Gestão de memória Virtual - Segmentação e Paginação                  

 

 

  Translação de Endereços

 

A permuta de sistemas faz uma pequena distinção entre o espaço de endereços no modulo absoluto ou na memória virtual , neste último, onde o programa vai ser executado embora  ambos tenham o mesmo tamanho.

Os sistemas virtuais distinguem-se entre nomes simbólicos, endereços virtuais e endereços de memória virtual. Os mapas provêm dos nomes simbólicos para os endereços virtuais e destes para os físicos. Há duas aproximações básicas para estabelecer o mapeamento físico - virtual: segmentação e paginação.

 

 Mapeamento dos endereços

 

Em vários momentos, os componentes de um programa são apresentados usando identificadores simbólicos, rótulos e variáveis. Cada elemento simbólico é “transformado” num endereço virtual quando o programa é traduzido para o  módulo absoluto pelo compilador e editor de linkagem . Por sua vez, é convertido num endereço físico na memória principal quando esta imagem é transformada num executável. Quando um programador escreve um programa, utiliza nomes de variáveis simbólicos, rótulos e identificadores. Num sistema de tradução serão convertidos em elementos virtuais. O sistema de memória virtual liga dinamicamente os endereços virtuais aos endereços físicos onde o programa será executado, isto é, o espaço físico de endereçamento é um conjunto de localizações físicas de memória na memória principal. As qualidades dos sistemas de memória virtual estão no desenvolvimento das técnicas eficientes para o carregamento dinâmico - ligando endereços virtuais aos endereços físicos.  Os programas tornam-se executáveis ao serem carregados sendo as suas entidades referenciadas em endereços físicos, mas para que isso aconteça é necessário que o sistema operativo seja capaz de mapear cada endereço virtual no programa ou endereço físico correspondente, dependendo da parte do endereço virtual que será carregado no espaço físico. Para ser mais preciso, o mapa de interpretação de endereços virtuais, _t, é um mapa variante no tempo do espaço de endereços de um programa a endereços físicos num tempo t:

  _t: espaço de endereços virtuais ® espaço de endereços físicos U{W}

onde t é um tempo virtual(inteiro não negativo) para o processo e W é um símbolo distinto referindo uma localização nula.

Em sistemas de memória virtual, o tamanho do espaço do endereço virtual é mais extenso do que o espaço do endereço físico alocado ao processo, ou seja, o processo usa mais endereço virtual que endereço físico. Num sistema multitarefa, muitos processos são carregados, assim como todo o espaço de endereçamento, o que implica que o sistema implicitamente restrinja o espaço de endereço virtual, mas actualmente nos sistemas de memória virtual , o espaço de endereçamento é muito superior, na ordem dos megabytes.

 

 Segmentação e Paginação

 

Segmentação

Divisão funcional dos programas em segmentos lógicos, os segmentos podem ter um tamanho variável, depende da arquitectura da máquina.

É uma extensão das ideias sugeridas pelo uso de alocação limitada de registos e blocos de memória ligados. As partes que vão ser carregadas/descarregadas são definidas pelo programador com segmentos (unidade de memória virtual transferida entre memórias) de vários tamanhos, sendo estes definidos explicitamente pelas directivas da linguagem ou implicitamente pelas semânticas do programa,  tais como texto, dados ,etc. Os conteúdos da memória são referenciados usando um endereço virtual de dois componentes: <número_de_segmento, offset>, onde o número_de_segmento identifica o bloco lógico de memória e o offset é um offset linear partindo do princípio do segmento. Em sistemas de segmentação, o sistema de memória virtual transfere segmentos completos entre a memória principal e secundária.

 

Paginação

 Usa endereços com um só componente. Na paginação, o espaço de endereço virtual é uma sequência de endereços virtuais. Neste sistema o programador não tem um mecanismo específico para informar o sistema de memória virtual acerca das unidades lógicas. O gerente da memória virtual é responsável pela definição do tamanho da unidade de transferência - a página - a ser movida de um lado para outro entre as memórias.

  A alocação num sistema de paginação serve para reduzir a fragmentação externa, ou seja, é usado para evitar desperdícios de memória ao transferir a página (unidade de espaço virtual de tamanho fixo). O espaço do endereço virtual é dividido logicamente em páginas, cada uma com o mesmo número de localizações.  

O objectivo da paginação é criar um espaço de endereçamento virtual maior que a dimensão da memória física. As páginas ou blocos têm um tamanho fixo.

Para haver optimização dos mecanismos de tradução é necessário evitar um acesso suplementar à memória, para isso os descritores das últimas n páginas acedidas são guardadas em memória associativa na tabela de traduções de endereços.  A pesquisa à tabela de traduções   é efectuada em paralelo com o acesso à tabela das páginas, se for encontrado o descritor da página que era para ser efectuada é interrompido o acesso à tabela das páginas. Caso a página não se encontram em memória primária é interrompida a instrução para ser efectuado o carregamento da página para a memória.

Para haver partilha de memória entre os processos apenas é necessário que os descritores das tabelas de páginas de dois ou mais processos apontem para o mesmo endereço físico.

 

Numa análise final, a segmentação prevê maior controlo sobre as unidades de transferência de memória. Os segmentos podem ser mais eficientes que a paginação, desde que os programadores possam especificar o conjunto de localizações dos endereços virtuais a serem usados. No entanto, o sistema de memória virtual vai ter maior dificuldade em colocar os segmentos  na memória principal devido ao facto de ter tamanho variável.

 

 Voltar