Escolar Documentos
Profissional Documentos
Cultura Documentos
Cap 4 PDF
Cap 4 PDF
Gerência de Memória
1. Introdução
• Realocação e Proteção
2. Gerência básica de Memória
• Registradores base e limite
• MMU e troca de contexto
• Multiprogramação c/ partições fixas
3. Swapping
4. Paginação (Memória Virtual)
• Algoritmos para troca de páginas
• Questões de Projeto e Implementação
• Tabelas de páginas invertidas
5. Segmentação
1
Gerência de Memória
• O Gerente de Memória é um componente do Sistema
Operacional (contido inteira-ou parcialmente no kernel)
que aloca memória principal para os processos, e gerencia
a hierarquia de memória (Caches, RAM, e Disco)
• Suas tarefas:
– Garante isolamento mútuo entre processos (proteção)
– Mantém o registro das áreas de memória em uso
– Aloca memória RAM para novos processos (no fork())
– Faz o swapping transparente entre memória principal e disco
– Atende a requisições de aumento de memória
– Mantém o mapeamento de memória virtual para memoria fisica
– Implementa a política de alocação de memória para os processos
2
Gerência de Memória
Lei de Parkinson: Programas sempre aumentarão de tamanho,
demandando toda a memória disponível
3
GM para Monoprogramação
(sem swapping ou paginação)
Para S.Os com único usuário e dispositivos simples
(embarcados). Execução de um processo por vez.
• Ciclo básico: Evento de E/S (p.ex. comando do usuário) è
carregamento programa è execução
• Baixa utilização de CPU
Degree of multiprogramming
4 MB
2 MB
2 MB
512 KB
1 MB 1 MB
12
Swapping
Duas alternativas:
• Copiar a imagem inteira (swapping)
• Permitir que processo fique parcialmente em memória, e
parcialmente em disco (paginação) è Memória Virtual
Swapping
Quando um processo é bloqueado (espera por E/S) ele pode ser swapped
out, e depois swapped in para memória principal.
Permite manter um número maior de processos ativos, aumentando a
utilização da CPU
16
Gerenciamento de espaços disponíveis
Idéia: dividir a memória em unidades de alocação de n bytes (1 KB no
Minix) e representar a ocupação de (livre/ocupado) de lotes de unidades
usando um bit map ou então uma lista encadeada
è
è
è
è
Alternativa:
Quick Fit: mantém listas separadas por tamanho do espaço livre (2K, 4K, 8K, etc.)
• Problema: ao liberar memória, o novo espaço criado precisa ser inserido na fila
correspondente (possivelmente, após combinação com áreas vizinhas)
4K
8K
16K
32K
64K
other
19
Gerenciamento de Memória em Minix3
• Implementado pelo PM
• Com swapping e nem paginação (processo carregado
permanece exatamente na partição alocada)
• Motivos:
– Ser compatível com processador Intel 8088, que não possui MMU
– Menor complexidade do código
– Possibilitar a portabilidade para outras arquiteturas (sist.
embarcados), também sem MMU
• Memória sem partições
• Espaços livres em lista encadeada e seleção usando politica
First Fit
• O mapa de memória (qual segmento está alocado em qual
endereço de memória) é mantido pelo system task (no
núcleo) è separação de política e mecanismo
Gerenciamento de Memória no Minix3
• Cada processo contém 2 (ou 3) segmentos, que são mapeados para uma
partição contígua de memória
– Texto (segmento I) , dados (D) e pilha
– Segmentos I e D podem ser alocados juntos (modo combinado) ou separado
• Na tabela de processos (mproc.h), campo mp_seg[] é um vetor para os
segmentos de texto, heap e pilha.
• Cada elemento deste vetor contém os endereços virtual e real de cada
segmento
210K (0x34800)
stack 0x8 0xd0 0x2
208K (0x34000)
207K (0x33c00) 0xc8 0x7
0xc8
data
203K (0x32c00)
text Obs: 0 significa
200K (0x32000) segmentos combinados I+D;
Tudo em unidades de Click = 1KB
21
Memória Virtual
É necessária, quando o total de memória necessária para um
conjunto de processos excede o tamanho da memória física.
Também aqui, usa-se parte do disco como extensão da
memória RAM.
Usa a técnica de paginação:
• Espaço de endereçamento lógico de cada processo e memória
física são divididos em partições de mesmo tamanho fixo
(chamados de páginas e quadro de páginas)
• Em vez de fazer o swap in/out de uma imagem inteira de
processo, cada página pode ser movida do disco para a
memória e vice-versa.
• Em cada acesso a memória o hardware verifica se a página
correspondente está na memória, e se não for o caso, então um
tratador de páginas faltantes (page-fault) a copia para lá.
• A espera pela cópia para a memória de uma página é
equivalente a um bloqueio por E/S 38
Paginação
Requer da existência de suporte por hardware (Memory
Management Unit -MMU)
– MMU intercepta qualquer acesso à memória (p/ instruções e dados)
– Mapeia endereços lógicos para endereços físicos (através de uma tabela
de página)
– Quando página acessada não está em memória, gera uma interrupção de
falta de página (page fault), que causa a interrupção do processo em
execução e o seu bloqueio até que a página tenha sido copiada
39
Exemplo Memória Virtual
Exemplo: tamanho página = 4KB (varia
de 512 Bytes a 64 KB)
Um espaço de endereçamento virtual de
64K é mapeado em 32KB de
memória RAM
Número da página é usada como índice
para a tabela de páginas (TP)
Cada entrada na TP contém, entre
outros:
• Bit presença: se página está em
memória
• Se estiver, o número do quadro
correspondente
Composição do endereço
lógico:
• Bits mais significativos =
número da página
• Bits menos significativos =
deslocamento do endereço
dentro de uma página
41
Paginação
• Região de memória física ocupada por um processo não precisa
ser contíguo
• Memória física é particionada em quadros de página (frames) de
tamanho 2x bytes
• Espaço de endereçamento lógico é dividido em páginas de
tamanho 2x bytes
• Cada endereço lógico é composto do par (número-da-página,
deslocamento), onde número-página é usado como índice para
uma entrada na tabela de páginas
Exemplo: páginas de 4 K para endereços de 32 bits:
Número-da-página deslocamento
20 bits 12 bits
Obs:
- Em paginação, de certa forma, tem-se um registrador de realocação
por página
- Evita fragmentação externa, mas causa fragmentação interna 42
Paginação
P0 0 P3
P1 1 P2
CPU pg o fr o
P2 2 P1
P3 3
mem—ria 4
l—gica
0 5
6
1 2 6 P0
2 1
7
3 0
pg: no. da página 4
mem—ria
f’sica
fr: no. do quadro
o: offset (deslocamento) tabela de
p‡ginas
Processo pode ser executado, contanto que haja um número mínimo de
páginas na memória (as páginas sendo acessadas)
O espaço de endereçamento lógico é contiguo, mas o espaço físico
respectivo é distribuído/separado.
A tradução é feita de forma transparente pela MMU, que acessa a
TabPaginas, e mantém um cache das páginas recentemente consultadas. 43
Paginação
Cada processo possui a sua tabela de páginas, que precisa ser carregada na
MMU cada vez que ocorre troca de contexto.
Cada entrada na Tabela de Processos contém um ponteiro para a tabela de
páginas do processo. O dispatcher é o encarregado de "carregar" a nova
tabela de páginas na MMU.
Como qualquer acesso à memória ocorre através do mapeamento pela TP. Isso
fornece também automaticamente um mecanismo de proteção...
... contanto que o preenchimento da tabela de página seja feita em modo
privilegiado (supervisor)!!
=> à medida que as páginas vão sendo alocadas, o núcleo preenche as entradas
na tabela de página.
45
Entrada da Tabela de Páginas
48
Translation Look-aside Buffer
void main() {
structX vector[1000]
int I;
…
while (cond) {
…
vector[i] = …
}
}
51
Tabelas de página
• Principal problema é que a própria TP precisa estar
em memória.
• E pior, precisa-se manter uma TP por processo em
execução.
• Então, dependendo do número de entradas de cada
TP (que depende do tamanho da página), pode ser
inviável, manter todas elas na memória do núcleo.
• O que fazer?
Tabela de Páginas de 2 níveis
Second-level page tables
Resolve o problema de manter
grandes tabelas de página na
memória (para todos os
processos).
Top-level
Ideia: fazer a TabPaginas ser paginada page table
Offset = 12 bits
Tam. página= 4K
32 bits page number è 220 entries!
54
Tabela de Páginas de 2 níveis
Tabela de páginas Invertidas
Para arquiteturas de 64 bits, o espaço de endereçamento lógico é 264 bytes!
Mesmo se o se tamanho de página é 4KB, isso leva a TPs muito grandes, e.g.
252 ≈ alguns Tera Bytes!).
Desvantagem: a tradução de endereços lógicos èfíscios fica bem mais lenta, i.e.
para cada página p, precisa-se fazer uma varredura pela TP invertida para
encontrar o quadro correspondente.
56
Tabela de Páginas Invertidas
L
Qual
página
substituir?
Page-out
Page-in
?
60
Algoritmo Página não recentemente Utilizada
(Not Recently Used - NRU)
• Cada página tem um bit de acesso (R) e de Modificação (M):
– Bits são setados sempre que página é acessada ou modificada
– Pagina é carregada com permissão somente para leitura e M=0.
– No primeiro acesso para escrita, o mecanismo proteção notifica o
núcleo, que seta M=1, e troca para permissão de escrita
– A cada interrupção do relógio, seta-se R = 0
• Páginas são classificadas em 4 categorias
1. Não referenciada, não modificada
2. Não referenciada, modificada
3. referenciada, não modificada
4. referenciada, modificada
• NRU escolhe primeiro qualquer página (em ordem ascendente
de categoria)
è Razão da prioridade de descarte (#2 antes #3): É melhor manter
páginas sendo referenciadas, do que modificadas mas pouco
referenciadas.
61
Algoritmo FIFO de substituição
• Manter uma lista ligada de todas as páginas na ordem em que
foram carregadas na memória
• A página (mais antiga), no início da fila, é a primeira ser
descartada
• Principal Vantagem:
– Simplicidade de implementação.
• Principal Desvantagem:
– Não é levado em conta se uma página está sendo frequentemente acessada
não.
– Por exemplo: a página mais antiga pode estar sendo acessada com alta
frequência.
62
Algoritmo da Segunda Chance
• Uma variante do algoritmo FIFO que leva em
conta acessos recentes às páginas:
– Páginas são mantidas em fila FIFO (ordenada por momento
de carregamento)
– Se página mais antiga possui bit R=0, ela é removida.
– Se tiver bit R=1, o bit é zerado, e a página é colocada no
final da fila,. Ou seja: dá se uma 2a chance.
Página carregada há mais tempo. Página carregada mais
recentemente.
R=1
R=0
63
Algoritmo do Relógio
Acesso Pág. 0 Acesso Pág. 1 Acesso Pág. 2 Acesso Pág. 3 Acesso Pág. 2
Acesso Pág. 1 Acesso Pág. 0 Acesso Pág. 3 Acesso Pág. 2 Acesso Pág. 3
66
Not Frequently Used (NFU)
Requer um contador por página.
A cada intervalo de tempo (clock tick) todas as páginas
referenciadas no último intervalo de tempo terão o seu
contador incrementado. Assim, a página com o menor contador
é a candidata a ser substituida.
68
Principais limitações do Alg. de
Envelhecimento (comparado ao LRU)
• Quando duas páginas possuem o mesmo valor de contador
(de idade), não há como saber qual delas foi acessada por
último (no último período de tempo)
t
Pag.X Pag.Y
# de páginas na memória
71
O Conjunto de páginas em uso
A maioria dos processsos apresenta uma localidade de referência
(acessa apenas uma fração pequena de suas páginas).
# páginas
Se R=0, não é feita autalização. Se (R==0 && age ≤ τ ) avança com tempo virtual
e depois verifica novamente. Descarta-se páginas com R=0 e mais antigas do que τ.
73
Resumo dos algoritmos de susbtituição de
página
Nome do Algoritmo Avaliação/ Comentário
75
Politica de Substituição Local vs. Global?
• O número de quadros de páginas alocados a cada processo deve
variar?
• A página a ser substituida deve ser do processo que causou a falta
de página (pol. local), ou de qualquer processo (pol. global)?
Processo A
causou o
page-fault
81
Política de Alocação Local x Global
• Solução :
Reduzir o grau de multiprogramação: o número de
processos que competem pela memória
– levar alguns deles para disco e liberar a memória a eles alocada
– reconsiderar grau de multiprogramação
83
A questão do tamanho de página
Tamanho de página pequenos:
• Vantagens
– Melhor aproveitamento da memória físcica: menos
fragmentação interna
– mais programas usando a memória
– melhor alinhamento de segmentos de código e de
estruturas de dado às páginas
• Desvantagens
– programas precisam de mais páginas, tabelas de
página maiores, mais tempo para carregar entradas de
tabela nos registradores da MMU
– Transferência de página menor ou maior de/para disco
demanda aproximadamente o mesmo tempo (mas é
feito de forma mais frequente)
84
Tamanho de Página
• Custo associado ao tamanho de
página: tamanho da tabela de páginas
vs. fragmentação interna Espaço da tabela
de páginas
s" e p Fragmentação
custo adicional = +
p 2 interna
• Onde
– s = tamano médio do processo em bytes
– p = tamanho da página em bytes
!– e = tamanho da entrada da tabela de página
O resultado é:
p = 2" s" e
85
Questões de Implementação
Quatro momentos em que SO trata de paginação:
1. Criação do processo
- Determinar tamanho do processo
- Criação ta TP
2. Quando processo ganha CPU
- Re-setar MMU para novo processso
- Limpar TLB
3. Interrupção de falta de página
- Identificar qual é o endereço lógico causador da falta
- Escolhe página a ser substituida
- Carrega página requisitada para memória
- Completa a instrução de máquina
4. Quando processo termina
- Desaloca TP e páginas na memória e na área de swaping
89
Bloqueando páginas na memória
Em políticas globais de substituição de páginas, pode haver
uma interferência entre paginação e requisições de E/S,
que requerem a retenção (bloqueio) temporária de
páginas na memória.
Exemplo:
1. Processo1 faz requisição de leitura de dados de um dispositivo
para um buffer em uma página na memória
2. Enquanto espera, outro processo 2 causa uma falta de página
3. Por azar, a página do buffer de propcesso1 foi escolhida para
substituição
4. Dispositivo não conseguiria copiar dados para o buffer
5. Logo, há necessidade de manter as páginas que são fonte/destino
de dados de E/S
92
Separação de Política e Mecanismo
95
Segmentação: Exemplo Compilação
97
Segmentação
• Segmento = entidade (parte) lógica do programa que contém um único tipo
de dados e do qual o programador está consciente. Exemplos: código, pilha,
heap, tabelas temporárias, bibliotecas, etc.
Vantagens da segmentação:
• facilita definir e controlar modos de acesso diferenciados para cada parte do
programa
• segmentos podem crescer independentemente (tabelas dinâmicas, pilhas de
threads)
• facilita o compartilhamento de partes do programa (p.ex. shared libraries)
• Facilita a ligação de código. Por ex.: se em cada segmento existe apenas 1
procedimento (end. 0 do segmento n), pode-se modifica-lo sem que seja
necessário alterar qq referência a este procedimento (isto não acontece
quando vários procedimentos estão em uma mem. virtual contígua)
Segmentação cria um espaço virtual multi-dimensional.
98
Segmentação
Processos podem também alocar um novo segmento usando
int shmget(key_t key, size_t size, int shmflg)
99
Segmentação
Alguns sistemas permitem que o programador possa indicar quais
partes do programa devem ser segmentos independentes.
Endereço lógico consiste de:
• nºde segmento (s) e deslocamento no segmento (d)
• cada processo tem uma Tabela de Segmentos (TS), que é
fornecida à MMU para tradução de endereços.
• cada entrada na tabela consiste de par (base, limite), com
endereço base e um limite
• como visto anteriormente:
se (d <= limite[s]) então end-fisico = base[s] + d
senão "acesso não autorizado" (TRAP)
10
0
Segmentação
end. f’sico
translation HW
base +
Segment Table (ST) limit
limit base
10
3
Segmentação (3)
S1.p5
p4 S1.p3
p3 S2.p5
p2 S3.p3
p1 S1.p2
10
7
Segmentação com paginação
no MULTICS