INFRA-ESTRUTURA DE
SOFTWARE
Aspectos de projeto sobre gerenciamento de
memória
Roteiro
•
Política de alocação global x local
•Controle de carga
•
Tamanho de página
•
Páginas compartilhadas
•
Envolvimento do SO com paginação
•Fixação de páginas na memória
•
Memória secundária
•Segmentação
Política de alocação global x local
•
Uma questão adiada até agora:
Política de alocação global x local
•
O algoritmo da figura (b) é um algoritmo de substituição
Política de alocação global x local
•
Alocação global:
• Molduras de páginas são alocadas entre processos em execução
• O número de frames para cada processo varia no tempo
• Em geral, funcionam melhor quando comparados aos locais
• Pense sobre a variação de páginas do conjunto de trabalho durante a execução de um processo
• Quando a alocação é local:
• Se o conjunto de trabalho aumentar pode ocorrer ultrapaginação mesmo havendo molduras disponíveis
• Se o conjunto de trabalho de um processo diminuir os algoritmos locais desperdiça memória
•
Alguns algoritmos de substituição são usados nas duas
políticas (FIFO, LRU, etc), mas outros só fazem sentido para
alocação local (como o WSClock)
Controle de carga
•
Mesmo que se use PFF e algoritmos de substituição
global eficientes, pode ocorrer ultrapaginação
• É preciso se livrar temporariamente de alguns processos!
• Voltamos ao conceito de levar processos da RAM para o disco
• É importante considerar outros aspectos quando os processos são
escolhidos para evitar ultrapaginação
Tamanho de página
•
Geralmente é uma decisão do sistema operacional
•
Se o hardware for projetado para páginas de 512 bytes, o
SO pode escolher múltiplos maiores
•
Os objetivos na escolha do tamanho são conflitantes:
• Argumentos a favor de páginas pequenas:
• É provável que em algumas situações não se ocupe uma página inteira
• Tamanhos de páginas grandes farão com que partes do programa não usadas ocupem memória desnecessariamente (conjunto de trabalho) • Argumentos a favor de páginas grandes:
• Páginas pequenas implicam em uma grande tabela de páginas
•
Tamanhos de páginas reais estão entre 4 KB e 8 KB
• No passado era comum 1 KB então é provável que isso cresça
Páginas compartilhadas
•
É útil sempre que possível compartilhar páginas para
economizar memória
• Duas execuções do mesmo programa podem compartilhar páginas
Envolvimento do SO com paginação
•
Situações nas quais o SO se envolve com paginação:
1. Criação do processo
• Determina o tamanho do programa e cria tabela de páginas
2. No tempo de execução do processo
• Inicia a MMU e esvazia a TBL
3. Na ocorrência de falta de página
• Determina o EV causador da falta de página (lendo registradores)
• Procura uma moldura de página e descarta antiga caso necessário
• Carrega a página do disco para o frame
4. Na finalização do processo
Fixação de páginas na memória
•
O foco desta seção não é em E/S mas é preciso entender
que pode ocorrer interação entre E/S e memória virtual
•
Considere o processo 1 que emite uma chamada de
sistema para ler do disco para um buffer
• O processo 1 bloqueia
• Um processo 2 inicia a execução e a página que era buffer de E/S
do processo 1 é liberada para o processo 2
• O que acontece quando o bloqueio de E/S termina?
• É preciso evitar problemas nestas situações!
•
Uma solução é impedir que páginas envolvidas com E/S
sejam liberadas em faltas de páginas
Memória secundária
•
Quando é necessário fazer swap a área do disco pode se
apresentar em diversas formas:
• Pode ser usada uma área de troca (swap area) no disco em que os
arquivos normais ficam
• É possível ter uma partição do disco apenas para swap (fica fora
Memória secundária
•
Alternativas:
Segmentação
•
Para muitos problemas, ter 2 ou mais espaços de
endereçamentos separados pode ser melhor do que um
• O modelo de memória que discutimos até agora é unidimensional
•
Um compilador pode ser beneficiado por uma memória
virtual que possuísse várias tabelas com crescimento
independente
• O que acontece se um programa tem uma quantidade grande de
Segmentação
•
Em um espaço de endereçamento unidimensional com
Segmentação
•
Uma solução é prover a máquina com muitos espaços de
endereçamento independentes chamados segmentos
•
Um segmento é uma sequência linear de endereços de 0
até um máximo
• Segmentos diferentes podem ter tamanhos variados
• O tamanho dos segmentos podem variar durante a execução
•
Para especificar um endereço de memória segmentada e
bidimensional, o processo precisa especificar:
1. O número do segmentoSegmentação
Segmentação x paginação
Item Paginação Segmentação
O programador precisa saber que a técnica é usada?
Não Sim
Há quantos espaços de endereçamento linear? 1 Muitos
O espaço de endereçamento total pode superar o tamanho da memória física
Sim Sim
Rotinas e dados podem ser distinguidos e protegidos separadamente?
Não Sim
As tabelas cujo tamanho flutuam podem ser facilmente acomodadas?
Não Sim
O compartilhamento de rotinas entre usuários é facilitado
Segmentação x paginação
•
Porque a paginação foi inventada?
• Para permitir obter um grande espaço de endereçamento linear sem a necessidade de comprar mais memória física
•
Porque a segmentação foi inventada?
• Para permitir que programas e dados sejam divididos em espaços de endereçamento logicamente independentes
2ª Prova
•
Assuntos:
• Introdução ao gerenciamento de memória
• Espaços de endereçamento • Swap
• Gerenciamento de memória livre • Memória virtual