sexta-feira, 13 de dezembro de 2013

MEMÓRIA VIRTUAL E OS DIVERSOS TIPOS DE PAGINAÇÃO



Memória virtual é uma técnica que usa a memória secundária como uma cache para armazenamento secundário. Houve duas motivações principais: permitir o compartilhamento seguro e eficiente da memória entre vários programas e remover os transtornos de programação de uma quantidade pequena e limitada na memória principal.
A memória virtual foi desenvolvido por volta de 1959-1962, na Universidade de Manchester para o Computador Atlas, terminado em 1962.7 A ideia é atribuída a John Fotheringham,8 no entanto, Fritz-Rudolf Güntsch, um cientista alemão, pioneiro da ciência computacional e, mais tarde, o criador do mainframe Telefunken TR 440, alega ter inventado o conceito em 1957, na sua tese de doutorado Logischer Entwurf eines digitalen Rechengerätes mit mehreren asynchron laufenden Trommeln und automatischem Schnellspeicherbetrieb (Conceito lógico para um sistema digital computacional com múltiplos sistemas assíncronos de armazenamento e modo de memória rápida automática).

A memória virtual consiste em recursos de hardware e software com três funções básicas:
(i) realocação (ou recolocação) - para assegurar que cada processo (aplicação) tenha o seu próprio espaço de endereçamento, começando em zero;
(ii) proteção - para impedir que um processo utilize um endereço de memória que não lhe pertença;
(iii) paginação (paging) ou troca (swapping) - que possibilita a uma aplicação utilizar mais memória do que a fisicamente existente (essa é a função mais conhecida).
Simplificadamente, um usuário ou programador vê um espaço de endereçamento virtual, que pode ser igual, maior ou menor que a memória física (normalmente chamada memória DRAM - Dynamic Random Access Memory).
A memória virtual ou arquivo de paginação do Windows é um aplicativo que permite ao sistema operacional obter mais memória RAM do que o computador possui, ou seja, se o computador possui pouca memória, o sistema utiliza um arquivo chamado Arquivo de Paginação que é um pequeno arquivo, alocado no HD, utilizado como memória RAM. Este processo, evita que em horários de pico, o sistema trave ou fique extremamente lento. Com tudo, porém, como o arquivo fica alocado no HD, o sistema não vai ficar tão rápido quanto utilizando a memória real do computador, já que a leitura do HD é muito mais lenta do que a leitura da memória RAM. Assim se o computador ficar por muito tempo neste estado (utilizando o arquivo de paginação) é recomendável aumentar a memória RAM.
No Linux, a memória virtual também existe, mas ela é dimensionada quanto ao seu tamanho na instalação e somente poderá ser mudada se o disco rígido for reparticionado novamente para utilizar uma partição maior de swap (que é assim chamado a memória virtual do Linux), e assim, deixando a swap maior é necessário diminuir a raiz que é onde irá ser instalado o sistema operacional e pode manipular com todos os seus documentos.
É recomendado utilizar como memória virtual de 2x a 3x a quantidade que o computador tiver de memória RAM.
A memória virtual deixou os programadores despreocupados com quanto de memória seu programa irá precisar para rodar no computador e se o respectivo programa poderia rodar com outros sem travar, pois a memória virtual utilizando a memória do disco rígido tem uma memória muito maior do que os pentes de memória RAM que você encontra hoje em dia no mercado que chegam aos seus 4 GiB, podendo o programador se preocupar mais com a tarefa de programação do que a de quanto o programa irá gastar de memória. Memória virtual é um conjunto de algoritmos muito bem estipulados de maneira que conseguem fazer com que parte do disco rígido se pareça com a memória RAM.
Funcionamento:
Existem dois mecanismos principais para implementação da memória virtual: paginação e segmentação.
Na paginação a memória física é dividida em blocos de bytes contíguos denominados molduras de páginas (page frames), geralmente com tamanho de 4 KiB (arquiteturas x86 e x86-64) ou 8 KiB (arquiteturas RISC) de tamanho. Por sua vez, o espaço de memória de um processo (contendo as instruções e dados do programa) é dividido em páginas que são fisicamente armazenadas nas molduras e possuem o mesmo tamanho destas.
Na segmentação existem vários espaços de endereçamento para cada aplicação (os segmentos). Neste caso, o endereçamento consiste em um par ordenado deslocamento, onde o deslocamento é a posição do byte dentro do segmento.
Na arquitetura x86 (32 e 64 bits), são usadas a segmentação e a paginação.10 O espaço de endereçamento de uma aplicação é dividido em segmentos, onde é determinado um endereço lógico, que consiste no par [segmento:deslocamento]; o dispositivo de segmentação converte esse endereço para um endereço linear (virtual); finalmente, o dispositivo de paginação converte o endereço virtual para físico, localizando a moldura de página que contém os dados solicitados.
O endereço virtual é encaminhado para a unidade de gerenciamento de memória (MMU - Memory Management Unit), um dispositivo do processador, cuja função é transformar o endereço virtual em físico e solicitar este último endereço ao controlador de memória. A conversão de endereços virtuais em físicos baseia-se em tabelas de páginas, que são estruturas de dados mantidas pelo sistema operativo.2
As tabelas de páginas descrevem cada página da aplicação (num sistema em execução, existe pelo menos uma tabela de páginas por processo). Cada tabela é indexada pelo endereço virtual e contém o endereço físico da moldura correspondente ou a indicação de que a página está em um dispositivo de armazenamento secundário (normalmente um disco rígido).
Como o acesso à tabela de páginas é muito lento, pois está em memória, a MMU possui uma cache associativa chamada buffer de tradução de endereços (TLB - Translation Lookaside Buffer) que consiste em uma pequena tabela contendo os últimos endereços virtuais solicitados e seus correspondentes endereços físicos.
Memória Virtual por Paginação
 A memória virtual por paginação é a técnica de gerência de memória onde o espaço de endereçamento virtual e o espaço de endereçamento real são divididos em blocos do mesmo tamanho chamados páginas. As páginas no espaço virtual são denominadas páginas virtuais, enquanto as páginas no espaço real são chamadas de páginas reais ou frames. Todo o mapeamento de endereço virtual em real é realizado através de tabelas de páginas. Cada processo possui sua própria tabela de páginas e cada página virtual do processo possui uma entrada na tabela (entrada na tabela de páginas – ETP), com informações de mapeamento que permitem ao sistema localizar a página real correspondente.
Quando um programa é executado, as páginas virtuais são transferidas da memória secundária para a memória principal e colocadas nos frames. Sempre que um programa fizer referência a um endereço virtual, o mecanismo de mapeamento localizará na ETP da tabela do processo o endereço físico do frame no qual se encontra o endereço real correspondente. Nessa técnica, o endereço virtual é formado pelo número da página virtual (NPV) e por um deslocamento. O NPV identifica unicamente a página virtual que contém o endereço, funcionando como um índice na tabela de páginas.
O deslocamento indica a posição do endereço virtual em relação ao início da página na qual se encontra. O endereço físico é obtido, então, combinando-se o endereço do frame, localizado na tabela de páginas, com o deslocamento, contido no endereço virtual. Além da informação sobre a localização da página virtual, a ETP possui outras informações, como o bit de validade (valid bit) que indica se uma página está ou não na memória principal. Se o moveis bit tem valor 0, isto indica que a página virtual não está na memória principal, mas se é igual a 1, a página está localizada na memória. Sempre que o processo referencia um endereço virtual, a unidade de gerência de memória verifica, através do bit de validade, se a página que contém o endereço referenciado está ou não na memória principal. Caso a página não esteja na memória, dizemos que ocorreu uma falta de página (page fault). Neste caso, o sistema transfere a página da memória secundária para a memória principal, realizando uma operação de E/S conhecida como page in ou paginação.
O número de page faults gerado por um processo depende de como o programa foi desenvolvido, além da política de gerência de memória implementada pelo sistema operacional. O número de page faults gerado por um processo em um determinado intervalo de tempo é definido como taxa de paginação do processo. O overhead gerado pelo mecanismo de paginação é inerente da gerência de memória virtual, porém se a taxa de paginação dos processos atingir valores elevados, o excesso de operações de E/S poderá comprometer o desempenho do sistema. Quando um processo referencia um endereço e ocorre um page fault, o processo em questão passa do estado de execução para o estado de espera, até que a página seja transferida do disco para a memória principal. Na troca de contexto, as informações sobre a tabela de mapeamento são salvas e as informações do novo processo escalonado são restauradas. Após a transferência da página para a memória principal, o processo é recolocado na fila de processos no estado de pronto, e quando for reescalonado poderá continuar sua execução.


REFERÊNCIAS BIBLIOGRÁFICAS


Memória virtual. Disponível em: http://pt.wikipedia.org/wiki/Mem%C3%B3ria_virtual. Acesso em: 30 nov. 2013.


Tipos de Memória moveis Virtual MEMÓRIA VIRTUAL POR PAGINAÇÃO. Disponível em: http://memoriavirtualunisc.blogspot.com.br/p/tipos-de-memoria-virtual.html. Acesso em: 30 nov. 2013.

Nenhum comentário:

Postar um comentário

Somos Denilson, Karine e Wesley alunos do curso de Licenciatura em Informatica Neópolis/SE