8: Transformacao de Endereco: Memoria Virtual para Memoria Real
Uma maneira de lidar com a discrepancia entre as organizacoes real e virtual da memoria e por meio de uma tabela de paginas, que e utilizada p/ transformar um endereco virtual em endereco real durante o ciclo de analise da instrucao. Lembre-se, um compilador ou um editor de linkagem cria referencias de memoria virtual. As instrucoes e os dados do processo parecem residir nos enderecos correspondentes.
A expressao transformacao dinamica de enderecos, descreve a conversao de um campo de endereco de uma instrucao durante sua execucao. Fazer isso durante o ciclo de analise da instrucao apresenta, uma grande vantagem. Podemos criar codigo que sempre executara, independentemente de sua posicao na memoria Isso representa uma grande vantagem para as pessoas que escrevem software Elas nao precisam preocupar-se em carregar um processo em posicoes especificas para que ela seja executado corretamente Com efeito, o processo torna-se independente das posicoes da memoria em qe eventualmente reside. Lembre-se, nao podemos prever quais as posicoes estarao disponiveis quando um processo esta pronto para ser executado.
Vamos agora discutir a tabela de paginas e o mecanismo da transpormacao dinamica d enderecos. Antes, porem, vamos recordar o formato tipico de uma instrucao em linguagem de maquina.
O endereco de memoria tem dois componente um numero de pagina e uma posicao relativa na pagina (ou deslocamento). Por exemplo, vamos supor que o endereco de memoria tenha 32 bits e que as paginas de memoria tenham 512 bytes. O desenho abaixo mostra o formato do endereco de memoria:
-----------------------------------------------------
|Numero de pagina (23 bits) | Deslocamento (9 bits) |
-----------------------------------------------------
O deslocamento de 9 bits poder ter 2 elevado a 9 (512 bytes) valores, um para cada byte em um pagina. Assim uma referencia a "posicao de memoria 1030" significa o byte no deslocamento 6 da pagina 2.
Equivalente Binario do numero 1030
|
|
|---------------------------------------|
0 . . . 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0
|-----------------------| |-------------|
| |
Equivalente binario Equivalente
de 2 em 23 bits. binario de
6 em 9 bits.
Todas as instrucoes q devem referencia a memoria em um processo contem enderecos virtuais. O ciclo de analise da instrucao substituira qualq endereco virtual por um endereco real correspondente antes que a instrucao seja executada
" - Mas como ocorre a conversao? Onde esta armazenado o endereco real para que a CPU posso transforma-la rapidamente ?"
R: Depende do Sistema ! :P . Porem, uma das tecnicas consiste em fazer com q a tabela d paginas seja parte da arquitetura da CPU. A serie d compu tadores Xerox Sigma fez isso. Entao na nossa materia, vamos tomar como base vamos usa-lo como modelo, para descrever a ideia basica, e mais adiante discutiremos outros implementacoes
Para criar uma tabela de pagina, defina uma serie de registradores d CPU. Cada entrada da Tabela corresponde a um registrador Tipicamente ha 1 entrada para cada pagina virtual. Cada entrada contem uma pagina de memoria real correspondente a uma determinada pagina virtual Cada entrada contem uma pagina de memoria real correspondente a uma determinada pagina virtual e um processo em execucao Lembre-se de que um processo tem espaco de memoria virtual determinado por suas referencias de memoria.
Quando o sistema armazena o processo na memoria, usa todas as paginas de memoria disponiveis. Nesse ponto, as referencias de memoria nas instrucoes nao correspondem ‡s posicoes reais. No entanto, antes qe o processo receba o controle da CPU, o sistema operacional carrega numeros de paginas de memoria reais em suas entradas da tabela de paginas. Entao, durante o ciclo de analise da instrucao, a CPU analisa cada referencia de memoria. O numero d paginas, refere-se a uma entrada de tabela de paginas
A entrada, por sua vez, contem o numero de pagina da memoria real Com esse arranjo, o sistema pode relocar um processo facilmente; tudo o q ele tem de fazer e redefinir as entradas de tabela de paginas. Essa ideia e similar aquele esquema de ENDERECAMENTO INDIRETO, exceto que ela nao requer uma referencia extra de memoria. Nessa implementacao da transformacao dinamica de enderecos, a referencia extra e para um registrador de CPU, o que torna a transformacao mais rapida e eficiente Bem, vou tentar desenhar um metodo como exemplo (ASCII sux! :P)..
Paginas Numero
. ____________ da _____________ __________ Pagina de
. | | Entrada | | | | Memoria
. | | . | | | | Real
. | | . | | | |
. | | . | | | |
. | | . | | .|.Codigo | 91
. | | . | | . | |
. | | . | | . | |
. |------------| 80 | 91 |. ..|.Codigo | 99
. | | 81 | 99 |..: | |
. | Codigo do | 82 | 104 |....|.Codigo | 104
. | Programa | 83 | 123 |... | |
. | | 84 | 128 |. :.|.Codigo | 123
. |------------| . | | . | |
. | | . | | . | |
. | | . | | .|.Codigo | 128
. | | . | | | |
. | | . | | | |
. | | . | | | |
------------ -------------- ----------
Memoria Tabela de Memoria
Virtual Pagina Real
Vamos supor que um usuario crie um processo que e executado nas paginas virtuais de 80 a 84. Em outras palavras, todas as suas referencias sao para as paginas de numeros 80 ate 84. Agora supunhetamos que, quando o processo ganha o controle da CPU, ele resida nas paginas de memoria real 91, 99, 104, 123 e 128 Antes q o processo receba o controle da CPU, o sistema operacional carrega os numeros de pagina de memoria real nas entradas 80 a 84 da tabela de paginas; ate onde interessa ao processo, as instrucoes e dados ainda estao nas paginas 80 a 84 Agora supunhetamos (de novo) q a primeira instrucao esteja no deslocamento 0 da pagina 80. Quando o processo comecar a execucao, o contador de programa contera aquele endereco. Durante a busca da instrucao, o valor 80 estara nos bits superiores d enderecamento. mas 80, na realidade se refere a uma entrada na tabela de paginas. A CPU usa o valor naquela entrada para determinar a pagina de memoria a ser acessada. Nesse caso, ela busca a primeira instrucao a partir do deslocamento 0 na pagina 9 (o conteudo da 80 - entrada). Em seguida, a instrucao e decodificada e executada. Vamos supor que ela faca referencia ao enderecamento dado pelo deslocamento 73 na pagina 84. Novamente, esse e um enderecamento virtual. A CPU substituira 84 pelo valor na entrada 84 da tabela de paginas. Essa e a pagina de memoria a ser referenciada. Aqui a instrucao realmente faz referencia ao deslocamento 73 na pagina 128. Se o processo nao sofreu desvio, a proxima instrucao sera obtida do deslocamento 1 na pagina virtual 80. Por meio da transformacao dinamica de enderecos, a CPU realmente a busca do deslocamento 1 da pagina de memoria real 91. A instrucao e analisada e todas as referencias de memoria subsequentes sao dirigidas atraves da tabela de paginas. Note que o codigo que parece residir consecutivamente nas paginas 80 e 81 esta realmente armazenado nas paginas 91 e 99, Assim, a transformacao dinamica de enderecos muda aquilo que parece ser referencia consecutivas.
E claro que nem todos os sistemas implementam as tabelas de paginas exatamente dessa forma. No entanto, o uso d uma tabela d paginas para relocacao e comum, e minha materia ilustra a logica usada para converter enderecos virtuais em enderecos reais. :P
Kosmos