CENTRO ESTADUAL DE EDUCAÇÃO PROFISSIONAL JOSÉ FIGUEIREDO BARRETO
CURSO TÉCNICO EM REDES DE COMPUTADORES
DISCIPLINA: FUNDAMENTOS DE SISTEMAS OPERACIONAIS
PROF(a).: ANNANETTE RABELO


RESUMO: MEMÓRIA VIRTUAL
(PAGINAÇÃO E SEGMENTAÇÃO)





Aluno do 2º módulo, turma C-II:
João Paulo Hora Gouvêa






Aracaju
2011







Memória Virtual: Paginação e Segmentação


Antigamente os programadores lidavam com programas maiores que a memó¬ria disponível, a solução era dividir o programa em módulos, denominados overlays (módulos de sobreposição), os overlays eram mantidos em disco e carregados na memória pelo sistema operacional, à medi¬da que se tornavam necessários.
Apesar da troca destes módulos serem feitos pelo sistema, a divisão do programa tinha de ser feita pelo programador. Em programas robustos, esta divisão dava muito trabalho, assim não demorou muito para se pensar em atri¬buir essa tarefa ao computador.
Para isso foi concebido um método (Fotheringham, 1961) que ficou conhecido como memória virtual, que utiliza uma técnica sofisticada de gerência de memória, onde as memórias principal e secundária são combinadas, dando a ilusão de existir uma memória maior que a memória principal. Ou seja, a memória virtual é uma técnica que utiliza parte do HD como se fosse uma memória RAM, assim o sistema operacional executa aplicações mesmo que os programas em execução supere a capacidade da memória. O sistema operacional trabalha movendo para o disco o conteúdo da memória principal que ainda não foi utilizado, liberando espaço para novas aplicações e deixando os dados que foram movidos em modo de espera, para que sejam utilizados posteriormente quando necessário.
É preciso salientar que quando o usuário faz uso da memória virtual, o desempenho do computador tende a cair e ficar mais brando, pois o acesso ao HD é mais lento que o da memória principal. Apesar de tudo, a virtualização de memória não é utilizada constantemente como em alguns anos atrás, devido ao grande aumento da capacidade da memória RAM, que atualmente pode ultrapassar 8 Gbs, excluindo praticamente qualquer necessidade de memória virtual, mas em alguns casos ela ainda é utilizada.


Paginação


A paginação é um processo da 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 páginas do mesmo tamanho, onde cada página virtual possui uma entrada na tabela, com informações que permitem ao sistema localizar a página real correspondente. Quando um programa é executado, as páginas virtuais são transferidas do HD para a memória principal e colocadas em frames (páginas reais).
A tabela de página é uma estrutura de dados usada pelo sistema de memória virtual para armazenar o mapeamento entre o endereço virtual e o endereço físico. Além da informação de mapeamento sobre a localização da página virtual, a tabela de páginas possui outras informações, dentre elas o bit de validade que indica se uma página está ou não na memória física. Se o bit for 0 (zero), a página virtual não está na memória principal, mas se for 1 (um), a página estará na memória. Sempre que o processo faz referência a um endereço virtual, o sistema 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 não esteja, o sistema tem de transferir a página da memória secundária para a memória física.


Algoritmo para Troca de Páginas


Quando ocorre uma falha de página, o sistema operacional precisa escolher uma página a ser removida da memória a fim de liberar espaço para outra. A escolha correta das páginas a remover da memória física é um fator essencial para a eficiência da memória virtual. Uma escolha errada poderá remover da RAM páginas muito usadas, aumentando a falta de páginas e diminuindo o desempenho do sistema. Os algoritmos de substituição de páginas são mecanismos utilizados para a escolha da troca de páginas.
Exemplos de algoritmos de substituição de páginas:
FIFO (First-in, First-out) - algoritmo de troca de baixo custo e fácil implementação que substituir a página carregada há mais tempo na memória. Ele não leva em consideração se a página está sendo muito utilizado, o que não é muito adequado, pois pode prejudicar o desempenho do sistema, por isso o FIFO não é muito utilizado.
LRU (Least Recently Used) - algoritmo que apresenta bom desempenho substituindo a página menos recentemente usada. Apesar do bom desempenho ele possui algumas deficiências quando o padrão de acesso é sequencial, dentro de loops, etc. A implementação do LRU pode ser feita através de uma lista, mantendo as páginas mais referenciada no início e a menos referenciada no final da lista.
Algoritmo Ótimo - apresenta o melhor desempenho computacional e o que mais minimiza o número de faltas de páginas. No entanto, sua implementação é praticamente impossível. A ideia é retirar da memória a página que vai demorar mais tempo para ser referenciada novamente.
MRU (Most Recently Used) - faz a substituição da última página acessada. Semelhante ao LRU, mas com algumas variações. Dessa forma, é possível explorar com mais eficiência o princípio de localidade temporal apresentada pelos acessos.
Algoritmo Clock (relógio) - Mantém todas as páginas em uma lista circular (em forma de relógio). A ordem mantida segue a sequência em que elas foram carregadas em memória. Além disso, é adicionado um bit de uso que indica se a página foi referenciada novamente depois de ter sido carregada. Ao precisar substituir uma página o algoritmo verifica se a página mais antiga está com o bit zerado. Se ela não estiver o bit é zerado e a próxima página da fila mais antiga será verificada. Esse processo continua até que uma página antiga com o bit zerado seja encontrada para ser substituída.
NRU (Not Recently Used) - busca as páginas que não foram referenciadas nos últimos acessos para serem substituídas. Tal informação é mantida através de um bit. O algoritmo também verifica, através de um bit de modificação, se a página teve seu conteúdo alterado durante sua permanência em memória.
LFU (Least Frequently Used) ? algoritmo que escolhe a página menos acessada dentre as que estão na memória. Para isso, é mantido um contador de acessos associado a cada página para que se possa realizar esta verificação. Esta informação é zerada cada vez que a página deixa a memória, prejudicando as páginas recém-carregadas, uma vez que por estarem com o contador de acessos zerado a probabilidade de serem substituídas é maior.
MFU (Most Frequently Used) - oposto do LFU, pois substitui a página mais referenciada. O controle é feito por contadores de acesso, sendo que o maior problema é ignorar o princípio de localidade temporal.
WS (Working Set) - algoritmo que possui a mesma política do LRU, com a diferença que este não realiza apenas a substituição de páginas, ele estabelece um tempo máximo para cada uma na memória. Assim, toda página que tem seu tempo esgotado é retirada da memória, deixando o número de páginas ativas variável.


Segmentação


Segmentação é um procedimento da gerência de memória, onde os programas são divididos em sub-rotinas e estruturas de dados, e depois são colocados em blocos de informações na memória que possuem tamanhos diferentes com seu próprio espaço de endereçamento.
A diferença entre a paginação e a segmentação é que, o primeiro divide o programa em partes de tamanho fixo, sem qualquer ligação com a estrutura do programa, já o segundo permite uma relação entre a lógica do programa e sua divisão na memória. O mecanismo de mapeamento é muito semelhante ao da paginação, com o uso de tabelas de segmentos. Além do endereço do segmento na memória física, cada entrada na tabela possui informações sobre o tamanho do segmento e se ele está ou não na memória.
O sistema operacional mantém uma tabela com as áreas livres e ocupadas da memória. Quando um novo processo é carregado para a memória, o sistema localiza um espaço livre que o acomode. Na segmentação somente os segmentos referenciados são transferidos do HD para a memória.


REFERÊNCIA BIBLIOGRÁFICA


De Internet:


BRUNO. Apostila de Sistemas Operacionais Disponível em: <http://pt.scribd.com/doc/50169406/74/Algoritmos-de-Paginacao> Acesso em: 15 set. 2011


MAZIERO, C.A. Sistemas Operacionais V- Gerência de Memória. Disponível em: <http://pt.scribd.com/doc/13291030/16/Algoritmos-de-substituicao-de-paginas> Acesso em: 15 set. 2011


SALES, E. Memória Virtual. Disponível em: <http://www.oficinadanet.com.br/artigo/730/memoria_virtual> Acesso em: 16 set. 2011


COMOTUDOFUNCIONA. O que é "memória virtual"?. Disponível em: <http://www.hsw.uol.com.br/questao684.htm> Acesso em: 16 set. 2011


De Livro:


TANENBAUM, A.S. / WOODHULL, A.S. Sistemas Operacionais: Projeto e Implementação. 2. Ed. Porto Alegre: Bookman, 2000.