Memria virtual uma tcnica que se utiliza da memria
secundria para produzir o efeito prtico de aumentar
significativamente o espao de endereamento disponvel aos programas. Essa tcnica no depende do tamanho da memria principal que continua sendo limitado para ser implementada. A memria secundria (normalmente um disco rgido) passa a servir como uma espcie de extenso da memria principal, armazenando a maior parte dos programas e dados carregados para execuo. memria principal so transferidas por vez apenas algumas partes destes programas e dados, essenciais ao momento pontual da execuo. Deste modo, cria-se dois espaos de endereamento de memria: o espao de endereamento virtual e o espao de endereamento real. Endereos virtuais so os endereos gerados pelos compiladores e linkers na implementao dos programas. Eles representam o espao completo que os programas necessitam para serem carregados, isto , o tamanho de memria que efetivamente ocupam. No entanto, a memria real ou memria principal (RAM Random Access Memory) pode ser bastante limitada, possuindo um espao de endereamento real s vezes menor at mesmo que um nico programa. Um endereo real corresponde a uma clula fsica de endereamento presente na memria principal da mquina. Obviamente, apenas parte das aplicaes carregadas no espao de endereamento virtual poder ocupar a memria real num certo instante. Por outro lado, somente os dados carregados na memria principal so processados pela CPU. Como vrias aplicaes podem estar sob execuo, concorrendo pela utilizao do processador, uma soluo encontrada foi dividir o espao total de endereamento dos programas em pequenos blocos de tamanho fixo, as chamadas pginas de memria. A implementao dessa estratgia constitui o mecanismo de paginao. Outra alternativa dividir o cdigo de uma aplicao com base em critrios lgicos, ou seja, modularizando o programa de acordo com a funo dos diversos trechos de cdigo identificados. Segmentao o nome que se d a esta segunda estratgia de particionamento de cdigo, em que os segmentos gerados possuem tamanhos independentes e variveis. Ambos os mecanismos so importantes, sobretudo em ambientes multiusurios e multiprogramveis. Conforme o momento de execuo, parte dos dados (working set) so transferidos temporariamente para a memria principal a fim de serem processados, retornando memria secundria quando solicitados pelo sistema operacional, o qual responsvel pelo gerenciamento da memria.
Paginao
A tcnica denominada paginao utilizada na maioria dos sistemas
com memria virtual. Como sabemos, os endereos gerados pelos programas so denominados endereos virtuais e constituem o espao de endereamento virtual. Em computadores que no tem memria virtual, os endereos virtuais so idnticos aos endereos fsicos. Por outro lado, quando usamos memria virtual estes endereos diferem. Portanto, o endereo gerado pelo programa no pode ser colocado diretamente no barramento do sistema para acessar uma posio qualquer de memria. Assim, a MMU mapeia os end. virtuais em fsicos. A memria fsica dividida em blocos de tamanho fixos denominados molduras de pginas (page frames). J a memria lgica dividida em blocos de tamanho fixos denominados pginas (pages). As pginas e as molduras de pginas so sempre do mesmo tamanho. Quando um programa tenta usar uma pgina virtual que no est mapeada gerada uma interrupo da CPU para o sistema operacional a fim de buscar esta pgina na memria. Esta interrupo (trap) denominada falta de pgina (page fault). As aes desencadeadas so: o sistema operacional escolhe uma moldura de pgina (page frame) pouco usada e a salva em disco. Em seguida, carrega a pgina virtual referenciada pela instruo na moldura de pgina que foi liberada. Feito isso o sistema operacional pode reinicializar a instruo causadora da interrupo. Segmentao O esquema de paginao foi criado para facilitar o gerenciamento da memria. Contudo, os programadores e compiladores no so capazes de ver a memria lgica dividida em pginas, mas sim em segmentos. Dependendo do sistema a granularidade desses segmentos pode ser diferente. Por exemplo, comumente verificamos que um programa pode ser segmentado em: cdigo, dados alocados dinamicamente, dados alocados estaticamente e pilha de execuo. No entanto, alguns sistemas enxergam cada objeto ou mdulo como se fosse um segmento. Quando o sistema utiliza o esquema de segmentao, o endereo lgico tambm dividido em: nmero do segmento e deslocamento dentro do segmento (semelhante ao esquema de paginao). Os
segmentos no necessariamente precisam ter o mesmo tamanho. No
entanto, existe um tamanho mximo definido para os segmentos.