terça-feira, 5 de junho de 2012


Memoria virtual é uma técnica sofisticada e poderosa de gerencia de memoria, onde as memorias principal e secundária são combinadas, dando ao usuário a ilusão de existir uma memória muito maior que a capacidade real da memória principal, fundamenta-se em vão vincular o endereçamento feito pelo programa. Existe uma forte relação entre o gerenciamento de memória virtual e a arquitetura de hardware do computador, por motivos de desempenho sendo implementadas algumas ações da memoria virtual para o hardware. O compartilhamento de memória é extremamente importante em aplicações que precisam compartilhar dados de memória principal.
Parecido com o compartilhamento de códigos, o mecanismo de paginação permite que processos façam o mapeamento de uma mesma área na memoria e tendo acesso compartilhamento de leitura e gravação.
A memoria virtual por paginação é a forma de gerenciamento de memoria onde o espaço de endereçamento virtual e o espaço de endereçamento real são divididos em blocos iguais em tamanho chamando-se paginas. Paginas no espaço virtual são chamadas paginas virtuais e paginas no espaço real são denominados paginas reais ou frames. Podemos apontar como politicas de busca de paginas a paginação por demanda que são as paginas do processo são transferidas da memória secundária para a principal somente quando referenciadas; na paginação antecipada o sistema carrega para a memoria principal, além da pagina referenciada outras que podem ou não ser necessárias ao processo ao longo do seu processamento isto pode ser aplicada na criação de um processo ou na ocorrência de um  page fault. As politicas de alocação de páginas determina quantos frames cada processo pode manter na memoria principal tendo assim duas alternâncias básicas: Alocação Fixa e Alocação Variável. Os dois problemas são se o numero máximo de paginas alocadas for muito pequeno, o processo tenderá a ter um elevado numero de page faults, o que pode impactar no funcionamento do sistema e o outro é no caso o numero de paginas seja muito grande, cada processo irá ocupar na memoria principal um espaço maior do que o necessário, reduzindo o numero de processos residentes e o grau de multiprogramação.
As Politicas de substituição de páginas é  o processo quanto atinge o seu limite de alocação de frames e necessita alocar novas paginas na memoria principal, o sistema operacional deve selecionar, dentre diversas paginas alocadas, qual deverá ser liberada.

Os algoritmos de substituição de página são:

Ótimo:
O algoritmo ótimo seleciona para substituição uma página que não será mais referenciada no futuro ou aquela que levará o maior intervalo de tempo para ser nova­mente utilizada.
Aleatório:
O algoritmo aleatório, como o nome já sugere, não utiliza critério algum de sele­ção. Todas as páginas alocadas na memória principal têm a mesma chance de serem selecionadas.

FIFO (First-ln-First-Out):
No algoritmo FIFO. a página que primeiro foi utilizada será a primeira a ser esco­lhida, ou seja, o algoritmo seleciona a página que está há mais tempo na memó­ria principal. O algoritmo pode ser implementado associando-se a cada página o momento em que foi carregada para a memória ou utilizando-se uma estrutura de fila, onde as páginas mais antigas estão no início e as mais recentes no final.
O algoritmo FIFO é raramente implementado sem algum outro mecanismo que minimize o problema da seleção de páginas antigas que são constantemente refe­renciadas.

LFU (Least-Frequently-Used):
O algoritmo LFU seleciona a página menos referenciada, ou seja, o frame menos utilizado. Para isso, é mantido um contador com o número de referências para cada página na memória principal. Este esquema, como apresenta­do, é raramente implementado, servindo apenas de base para outros algoritmos de substituição.

LRU (Least-Recently-Used):
O algoritmo LRU seleciona a página na memória principal que está há mais tempo sem ser referenciada. Se considerarmos o princípio da localidade, uma página que não foi utilizada recentemente provavelmente não será referenciada novamente em um futuro próximo.
Para implementar esse algoritmo, é necessário que cada página tenha associado o momento do último acesso, que deve ser atualizado a cada referência a um frame. Quando for necessário substituir uma página, o sistema fará uma busca por um frame que esteja há mais tempo sem ser referenciado. Apesar de ser uma estratégia com uma eficiência comparável ao algoritmo ótimo, é pouco empregada na prática, devido ao seu elevado custo de implementação.

NRU (Not-Recently-Used):
O algoritmo NRU é bastante semelhante ao LRU. porém com menor sofisticação. Para a implementação deste algoritmo é necessário um bit adicional, conhecido como bit de referência (BR). O bit indica se a página foi utilizada recentemente e está presente em cada entrada da tabela de páginas.

FIFO com buffer de páginas:
O algoritmo FIFO com buffer de páginas combina uma lista de páginas alocadas (LPA) com uma lista de páginas livres (LPL). É importante notar que a página selecionada e que entrou na LPL continua dispo­nível na memória principal por um determinado intervalo de tempo. a página não for mais referenciada, com o passar do tempo irá chegar ao início da LPL. quando será utilizada para um outro processo. Caso a página seja posterior­mente referenciada, o sistema terá que carregá-la novamente da memória secun­dária.

FIFO circular (clock):
O algoritmo FIFO circular utiliza como base o FIFO, porém as páginas alocadas na memória estão em uma estrutura de lista circular, semelhante a um relógio. Os algoritmos de substituição de página tem como objetivo selecionar os frames que tenham as menores chances de serem referenciadas em um futuro próximo. A melhor estratégia se substituição será aquela que escolhesse um frame que não fosse mais utilizado no futuro ou levasse mais tempo para ser novamente referenciado. O principal argumento para o uso de paginas pequenas é a melhor utilização da memória principal.
A técnica de partições fixas gera muita perda de memória e não é mais utilizada na prática. Embora
partições variáveis seja um mecanismo mais flexível, o desperdício de memória em função da
fragmentação externa é um grande problema

Em sistemas multiprogramaveis, onde diversas aplicações compartilham a memoria principal devem existir mecanismos para preservar as áreas de memória do sistema operacional e dos diversos processos dos usuários. O sistema operacional deve impedir modificações sem autorização, se modificado pode gerar certa instabilidade no sistema.
Memoria virtual por segmentação é o gerenciamento de memoria onde o espaço de endereçamento virtual é dividido em blocos de tamanhos diferentes chamados segmentos. Um programa é dividido logicamente em sub-rotinas e estruturas de dados, que são alocados em segmentos na memoria principal.
Memoria virtual por segmentação com paginação é o gerenciamento de memoria onde o espaço de endereçamento é dividido em segmentos, cada segmento dividido em paginas oferecendo vantagens técnicas de paginação e segmentação.
Swapping é quando não se há memoria principal livre para certo processo, sendo assim selecionado um ou mais processos para saírem da memoria e oferecerem espaço para novos processos.
Thrashing é a definição da excessiva transferência de paginas e segmentos entre a memoria principal e memoria secundária. Esse problema está presente em sistemas que implementam tanto paginação como segmentação.
Podemos apontar dois níveis, sendo eles no nível do processo, a excessiva paginação ocorre devido ao elevado numero de page faults, e o segundo nível é o do sistema.