Gerência de Memória Virtual

De Aulas

Voltar para Sistemas Operacionais

Memória Virtual

  • Combina memória principal e secundária;
  • Impressão da memória ser muito maior do que é;
  • Desvinculação do endereçamento feito pelo programa dos endereços físicos da memória principal;
  • Procura minimizar o problema de fragmentação da memória.

Espaço de Endereçamento Virtual

  • Conceito próximo a vetores em linguagens de alto nível;
  • Referência a um componente do vetor sem preocupação com a posição da memória onde o dado está;
  • Programa no ambiente de memória virtual não faz referência a endereços físicos de memória (endereços reais), mas apenas a endereços virtuais;
  • Mapeamento: é a tradução do endereço virtual para o físico;
  • Espaço de endereçamento virtual: é o conjunto de endereços virtuais que os processos podem endereçar.
  • Espaço de endereçamento real: é o conjunto de endereços reais.
  • Apenas parte do programa pode estar residente na memória em um determinado instante;
  • O Sistema Operacional utiliza a memória secundária como uma extensão da memória principal.

Mapeamento

  • Mecanismo que transforma os endereços virtuais em endereços reais;
  • Todo programa precisa estar no espaços de endereçamento real para poder ser referenciado ou executado;
  • Atualmente, o mapeamento é realizado via hardware junto com o Sistema Operacional, de forma a não comprometer seu desempenho e torná-lo transparente aos usuários e suas aplicações;
  • A maioria das aplicações tende a fazer referência a um reduzido número de páginas, logo, somente uma pequena fração da tabela de páginas é necessária.
  • Memória associativa ou Translation Lookside Buffer – Hardware especial para mapear endereços virtuais para endereços físicos sem a necessidade de acesso à tabelas de páginas;
  • Quando um programa está em execução, existe uma tabela de mapeamento do processo no qual o programa executa. Se outro programa for executado no contexto de outro processo, o sistema deve passar a referenciar a tabela do novo processo. Toda vez que há mudança de contexto, o registrador é atualizado com o endereço da nova tabela.

Paginação

  • 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 (páginas);
  • Páginas virtuais no espaço virtual e páginas reais ou frames (molduras) no espaço real;
  • Todo mapeamento é realizado a nível de página, através de tabelas de páginas, em que cada página virtual do processo possui uma entrada na tabela ETP;
  • Paginação por demanda é quando as páginas dos processos são transferidas da memória secundária para a principal apenas quando são referenciadas.
  • Paginação Antecipada é o carregamento de páginas na memória antecipadamente, sendo que o sistema tenta prever as páginas que serão necessárias à execução do programa.
  • ALGORÍTMO DA PAGINAÇÃO.

Working Set

  • Problemas:
    • Paginação exigem operações de E/S (que deve ser evitado) quando um processo faz referência a uma página que não se encontra na memória;
    • O Sistema Operacional deve se preocupar em ter um certo número de páginas na memória que reduza ao máximo a taxa de paginação dos processos e não prejudique os demais processos que desejam acesso a memória.
  • Observações:
    • Quando um programa começa a ser executado, percebe-se uma elevada taxa de page faults (páginas que não se encontram na memória), que se estabiliza com o decorrer de sua execução.
    • Localidade é a tendência que existe em um programa de fazer referências a posições de memória de forma quase uniforme, ou seja, instruções próximas.
    • A partir da observação da localidade Denning formulou o modelo de working set.
  • Working Set de um processo é o conjunto de páginas referenciadas por ele durante determinado intervalo de tempo, ou, segundo Denning, é o conjunto de páginas constantemente referenciadas pelo processo, devendo permanecer na memória principal para que execute de forma eficiente, evitando a elevada taxa de paginação (thrashing).
  • Sempre que um processo é criado, todas as suas páginas estão na memória secundária.
  • O Working Set deve Ter um limite máximo de páginas permitidas.

Realocação de Páginas

  • Problema em decidir quais páginas remover da memória principal.
  • O Sistema Operacional deve considerar se uma página foi ou não modificada antes de liberá-la para outro processo, caso contrário, possíveis dados armazenados na página serão perdidos.
  • Sempre que uma página é alterada, um bit de modificação é alterado de 0 para 1, informando que a página foi alterada.
  • Melhor estratégia de realocação é escolher uma página que não será referenciada num futuro próximo.
  • Tarefa difícil para o Sistema Operacional.
  • Principais estratégias usadas pelos sistemas operacionais para realocação de páginas:
    • Aleatória (random):
      • Não utiliza nenhum critério de seleção.
      • Consome menos recursos do sistema.
      • Raramente é utilizada.
    • First-In-First-Out (FIFO):
      • A página que primeiro foi utilizada será a primeira a ser escolhida.
      • Implementação bastante simples.
      • Necessário apenas uma fila.
    • Least-Recently-Used (LRU):
      • Seleciona a página utilizada menos recentemente, ou seja, a que está há mais tempo sem ser referenciada.
      • Estratégia boa, mas pouco implementada;
      • Grande overhead causado pela atualização, em cada página referenciada, do momento do último acesso, além do algoritmo de busca dessas páginas.
    • Not-Recently-Used (NRU):
      • Escolha da página que não foi recentemente utilizada (semelhante ao LRU).
      • Flag de referência – indica quando a página foi referenciada ou não.
      • Inicialmente, todas as páginas estão com o flag = 0, à medida que as páginas são referenciadas, o flag é modificado para 1.
    • Last-Frequently-Used (LFU):
      • Escolhe a página menos referenciada.
      • Existe um controle do número de referências feitas às páginas.
      • É escolhida a página que o contador tem o menor número de referências.
      • Problema – As páginas que entrarem mais recentemente no working set serão as que estarão com o menor número no contador.

Tamanho da Página

  • Paginação leva a uma menor fragmentação, pois apenas poderá haver fragmentação na última página.
  • A fragmentação é conseqüência do tamanho da página.
  • Páginas pequenas, tabelas de mapeamento maiores, maior taxa de paginação e aumento do número de acesso à memória secundária, porém, menor fragmentação.
  • Tamanho da página associado ao hardware e varia de sistema para sistema, norlamente entre 512 bytes e 64 kb.

Segmentação

  • Técnica de gerência de memória, onde os programas são divididos logicamente e em sub-rotinas e estruturas de dados e colocados em blocos de informações na memória
  • Segmentos: blocos de tamanhos diferentes com seu próprio espaço de endereçamento.
  • Segmentação X Paginação: Paginação com partes de tamanho fixo e segmentos com blocos de tamanhos variados e permite uma relação entre a lógica do programa e sua divisão na memória.
  • Cada entrada na tabela de segmentos possuí o endereço do segmento na memória física, informações sobre o tamanho do segmento, sua proteção e se ele está na memória ou não.
  • O Sistema Operacional mantém uma tabela com as áreas livres e ocupadas da memória.
  • A escolha da área livre a ser ocupada por um processo a ser carregado na memória pode ser a mesma utilizada no item Alocação Particionada Dinâmica (best-fit, worst-fit ou first-fit).
  • Apenas os segmentos referenciados são transferidos para a memória real.
  • Os programas devem ser bem modularizados para uma maior eficiência.
  • Existe também o problema da fragmentação e o problema da complexibilidade.

Segmentação com Paginação

  • Permite a divisão lógica dos programas e segmentos e, cada segmento é dividido fisicamente em páginas.
  • Um endereço é formado pelo número do segmento, pelo número de página, contida nesse segmento, e pelo deslocamento dentro dessa página.
  • O endereço físico é obtido somando-se a posição inicial do frame e o deslocamento.

Proteção

  • Necessária para impedir que um processo, ao acessar uma página/segmento do sistema, a modifique ou mesmo tenha acesso a ela.
  • No esquema de memória virtual, cada processo tem sua própria tabela de mapeamento e a tradução dos endereços é realizada pelo sistema, impedindo assim, que um processo tenha acesso a áreas de memória de outros processos, a não ser que tenham compartilhamento explícito.
  • A proteção deve ser realizada em nível de cada página/segmento na memória, utilizando-se as entradas da tabela de mapeamento, com alguns bits especificando permissões a cada uma das páginas/segmentos.

Compartilhamento de Memória

  • Bastante útil para programas de código reentrante.
  • Bastante simples implementação do compartilhamento de código e dados entre vários processos, bastando que as entradas das tabelas de páginas/segmentos apontem para as mesmas páginas/segmentos na memória principal.
  • Reduz o número de programas na memória principal e aumenta o número de usuários compartilhando o mesmo recurso.
  • Segmentação X Paginação em relação ao compartilhamento:
    • O compartilhamento de segmentos é mais simples que o de páginas, pois as tabelas de segmentos mapeiam estruturas lógicas, como sub-rotinas e estruturas de dados.
    • Enquanto o mapeamento de um vetor necessita de várias entradas na tabela de páginas, na tabela de segmentos é necessária apenas uma única entrada.
    • O segmento pode variar seu tamanho durante a execução com o crescimento de um vetor, por exemplo, na paginação, isso implica na alocação de novas páginas.

Swapping em Memória Virtual

  • Quando existem novos processos que desejam ser processados e não existe memória real suficiente, o sistema seleciona um ou mais processos que deverão sair da memória para ceder espaço aos novos processos.
  • Os critérios mais utilizados para a escolha são a prioridade, escolhendo processos de melhor prioridade, e o estado do processo, selecionando os processos que estão no estado de espera.

Thrashing

  • É a excessiva transferência de páginas/segmentos entre a memória principal e a memória secundária. Problema existente tanto em paginação quanto a segmentação.
  • Na paginação:
    • A nível de processo:
      • O working set de um processo pode ser pequeno demais para acomodar as páginas constantemente acomodadas referenciadas por ele, a solução é aumentar o tamanho do working set.
      • O thrashing também pode ocorrer pela não obediência do conceito da localidade, ou seja, o programa faz referência a comandos/dados localizados em páginas fora do working set do processo e a solução para isso é reescrever a aplicação.
    • A nível de sistema:
      • O trashing ocorre quando existem mais processos competindo por memória que espaço disponível.
      • O primeiro passo é a redução do tamanho dos working set dos processos, mas isso pode levar o thrashing a nível de processo.
  • Na segmentação:
    • Em nível de processo, quando a trasferência de segmentos é excessiva devido a modularização extrema do programa não seguindo o conceito da modularidade.
    • Em nível de sistema é semelhante ao caso da paginação.
  • Em qualquer caso, se existem mais processos para serem executados que a memória real disponível, a única solução é expandir a memória principal.
  • Este problema ocorre em todos os sistemas que possuem um mecanismo de gerência de memória.

Lista de Exercícios

Formulário

  1. Descreva com suas próprias palavras a Memória Virtual.
  2. O que é o espaço de endereçamento virtual?
  3. O que é e como funciona o mapeamento em relação a memória virtual?
  4. Descreva a paginação em relação a memória virtual?
  5. Faça um algoritmo de paginação.
  6. O que é o Working set e a partir de que isto surgiu?
  7. O que é e como funciona a realocação de páginas em relação a memória virtual?
  8. Cite e descreva as principais estratégias usadas pelos sistemas operacionais para realocação de páginas.
  9. Qual a relação entre o tamanho das páginas e a fragmentação?
  10. Descreva a segmentação em relação a memória virtual.
  11. Como podem ser usadas a paginação e a segmentação juntas, descreva o algoritmo para o acesso aos endereços usando-as juntas.
  12. Comente sobre a Proteção em relação à memória virtual.
  13. Como funciona o compartilhamento em relação a memória virtual e quais as diferenças entre a segmentação e a paginação em relação ao compartilhamento.
  14. Como funciona o Swapping da memória virtual?
  15. Quais os problemas de trashing, o que é e quais suas possíveis soluções?