Você está na página 1de 73

Sistemas Operacionais - Gerenciamento de

memória

Rafael Sachetto Oliveira


sachetto@ufsj.edu.br

4 de maio de 2011

Processos Rafael Sachetto Oliveira – 1 / 73


Introdução

■ A RAM é um recurso importante e deve ser gerenciado com


cuidado;

■ Programas se tornam maiores mais rápido que as memórias

■ Lei de Parkinson: ”programas tendem a se expandir a fim


de ocupar toda a memória disponı́vel”;

Processos Rafael Sachetto Oliveira – 2 / 73


Sem abstração de memória

■ Primeiro computadores não possuiam abstração de


memória;

■ Cada programa considerava a memória fı́sica;

■ Exemplo: MOV REGISTER1, 1000

■ Memória apresentada ao programador: conjunto de


endereços de 0 ao máximo e cada endereço continha uma
célula com normalmente 8 bits;

■ Não era possı́vel executar dois programas ao mesmo tempo!

Processos Rafael Sachetto Oliveira – 3 / 73


Sem abstração de memória

■ Modelo a: usado antigamente.

■ Modelo b: usado ainda em sistemas embarcados;

■ Modelo c: primeiros PCs

Processos Rafael Sachetto Oliveira – 4 / 73


Múltiplos programa sem abstração de
memória - Uso de PSW

■ Problema: o programa b vai acessar uma memória inválida.

■ Solução: realocaoção estática;

Processos Rafael Sachetto Oliveira – 5 / 73


Abstração de memória: Espaços de
endereçamento

■ Desvantagens da exposição da memória fı́sica;

◆ Danificação do sistema;
◆ Difı́cil de se executar vários programas ao mesmo
tempo

Processos Rafael Sachetto Oliveira – 6 / 73


A noção de espaço de endereçamento

■ Como executar programas simultâneamente sem


interferência:

◆ Proteção e realocação: Solução primitiva já


apresentada;

■ Solução: espaços de endereçamento:

◆ Cria um espaço abstrato de memória para cada


processo.
◆ O espaço de enderaçamento é o conjunto de endereços
que um processo pode usar para endereçar a memória;
◆ Cada processo tem seu próprio espaço independente;

Processos Rafael Sachetto Oliveira – 7 / 73


Registrador-base e limite

Processos Rafael Sachetto Oliveira – 8 / 73


Troca de memória

■ Normalmente a memória RAM não consegue armazenar


todos os processos;

■ Dois métodos para lidar com sobrecarga de memória:

◆ Troca de processos (swapping)


◆ Memória Virtual;

Processos Rafael Sachetto Oliveira – 9 / 73


Troca de memória

Processos Rafael Sachetto Oliveira – 10 / 73


Troca de memória

■ Deve ser considera a quantidade de memória a ser alocada


para cada programa;

◆ Se for estática, sem problemas;


◆ se for dinâmica, problemas poderam ocorrer;

Processos Rafael Sachetto Oliveira – 11 / 73


Troca de memória

Processos Rafael Sachetto Oliveira – 12 / 73


Gerenciamento de memória com mapa de bits

Processos Rafael Sachetto Oliveira – 13 / 73


Gerenciamento de memória com mapa de bits

■ Quanto maior a unidade de alocação menor o mapa e


vice-versa;

■ Principal problema: encontrar o espaço contiguo livre para


alocar o programa;

Processos Rafael Sachetto Oliveira – 14 / 73


Gerenciamento de memória com listas
encadeadas

Processos Rafael Sachetto Oliveira – 15 / 73


Algoritmos para alocação de memória
usando listas encadeadas

■ Fisrt fit

■ Next Fit

■ Best Fit
Otimização possı́vel: Utilizar duas listas.

Processos Rafael Sachetto Oliveira – 16 / 73


Memória Virtual

■ Registradores-base e limite poderiam se usados para


gerenciamento de memória;

■ Problema Bloatware

■ Demanda cada vez maior por memória;

■ Necessidade de que programas maiores que a memória


consigam executar;

■ Troca de processos não é uma opção atrativa:

◆ 10s para sair de um programa com 1GB e outros 10s


para inicializar outro programa com 10GB.

Processos Rafael Sachetto Oliveira – 17 / 73


Memória Virtual - (Overlays)

■ Solução adotada na década de 60;

■ Pedaços do código eram carregados;

■ Overlays eram mantidos em disco e gerenciados pelo


gerenciador de Overlays;

■ Problema: A divisão dos programas tinha que ser feita pelo


programador;

Processos Rafael Sachetto Oliveira – 18 / 73


Memória Virtual

■ Surgiu para resolver os problemas do uso de overlays;

■ Idéia básica:

◆ Cada programa tem seu próprio espaço de


endereçamento dividido em páginas;
◆ Páginas são séries de endereços contı́guos;
◆ As páginas são mapeadas na memória fı́sica;
◆ Quando o programa referencia uma página que não
está na memória o sistema operacional tem que
resolver;

Processos Rafael Sachetto Oliveira – 19 / 73


Memória Virtual - Paginação

Processos Rafael Sachetto Oliveira – 20 / 73


Memória Virtual - Paginação

Processos Rafael Sachetto Oliveira – 21 / 73


Memória Virtual - Paginação

Processos Rafael Sachetto Oliveira – 22 / 73


Memória Virtual - Paginação

Processos Rafael Sachetto Oliveira – 23 / 73


Acelerando a paginação

Problemas na implementação da paginação:

■ O mapeamento do endereço virtual para o endereço fı́sico


deve ser rápido.

◆ Necessárias algumas referências a tabela de páginas


por instrução.

■ Se o espaço virtual for grande, a tabela de páginas será


grande.

◆ Com páginas de 4k e endereços de virtuais de 23 bits


terı́amos 1 milhão de páginas;

Processos Rafael Sachetto Oliveira – 24 / 73


Memória Virtual - Acelerando a paginação

Buffers para tradução de endereços - Software ou hardware.

Processos Rafael Sachetto Oliveira – 25 / 73


Memória Virtual - Tabelas Multinı́vel

Tabelas de páginas para memórias grandes.

Processos Rafael Sachetto Oliveira – 26 / 73


Memória Virtual - Tabelas Invertidas

Processos Rafael Sachetto Oliveira – 27 / 73


Algoritmo de substituição de páginas

■ Algoritmo ótimo de substituição de página.


■ Algoritmo de substituição de página não usado recentemente.
■ Algoritmo de substituição de página primeiro a entrar, primeiro a sair.
■ Algoritmo de substituição de página segunda chance.
■ Algoritmo de substituição de página de relógio.
■ Algoritmo de substituição de página usado menos recentemente.
■ Algoritmo de substituição de página de conjunto de trabalho.
■ Algoritmo de substituição de página WSClock.

Processos Rafael Sachetto Oliveira – 28 / 73


Algoritmo ótimo de substituição de página.

■ Cada página é rotulada com o número de instruções até


que a página seja referenciada a primeira vez;

■ Deverá ser removida a página com o maior rótulo;

■ Impossı́vel na prática;

■ Usado para a comparação com outros algoritmos de troca


de página;

Processos Rafael Sachetto Oliveira – 29 / 73


Algoritmo de substituição de página não
usado recentemente. (NRU)

■ Utiliza os bits referenciado (R) e modificado (M) para


realizar a substituição;

■ Divide as páginas em 4 classes:

◆ Classe 0: não referenciada, não modificada;


◆ Classe 1: não referenciada, modificada;
◆ Classe 2: referenciada, não modificada;
◆ Classe 3: referenciada, modificada;

■ Pode atualizar o bit R a cada interrupção de relógio;

Processos Rafael Sachetto Oliveira – 30 / 73


Algoritmo de substituição de página primeiro
a entrar, primeiro a sair.

■ Existe uma fila de páginas;

■ Páginas mais antigas são removidas primeiro;

■ Páginas novas vão para o inı́cio da fila;

■ Quais os problemas desse algoritmo?

Processos Rafael Sachetto Oliveira – 31 / 73


Algoritmo de substituição de página segunda
chance.

Processos Rafael Sachetto Oliveira – 32 / 73


Algoritmo de substituição de página de
relógio.

Processos Rafael Sachetto Oliveira – 33 / 73


Algoritmo de substituição de página usada
menos recentemente.

■ Páginas muito utilizadas nas últimas instruções tendem a


ser utilizadas nas próximas;

Processos Rafael Sachetto Oliveira – 34 / 73


Simulando LRU em software

Processos Rafael Sachetto Oliveira – 35 / 73


Algoritmo de substituição de página de
conjunto de trabalho.

Processos Rafael Sachetto Oliveira – 36 / 73


Algoritmo de substituição de página de
conjunto de trabalho.

Processos Rafael Sachetto Oliveira – 37 / 73


Algoritmo de substituição de página
WSClock.

Processos Rafael Sachetto Oliveira – 38 / 73


Resumo dos algoritmos de substituição de
página

Processos Rafael Sachetto Oliveira – 39 / 73


Polı́tica de alocação local versus global

■ Como a memória deve ser alocada entre processos


concorrentes em execução?

Processos Rafael Sachetto Oliveira – 40 / 73


Polı́tica de alocação local versus global

■ Algoritmos de substituição local alocam uma fração fixa de


memória;

◆ Pode ocorrer trashing se o conjunto de trabalho


aumentar;
◆ Desperdı́cio de memória se o conjunto de trabalho for
pequeno;

■ Algoritmos de substituição global alocam molduras de


páginas entre os processos em execução;

◆ Melhor na maoria dos casos.


◆ O sistema deve decidir continuamente quantas
molduras alocar para cada processo;

Processos Rafael Sachetto Oliveira – 41 / 73


Polı́tica de alocação local versus global

Processos Rafael Sachetto Oliveira – 42 / 73


Controle de carga

■ O trashing pode ocorrer quando o conjunto de trabalho de


todos os processos ultrapassa a memória disponı́vel.

■ O PFF indica que alguns processos precisam de mais


páginas, mas não existem processos abrindo mão delas.

■ Solução:

◆ Swapping

Processos Rafael Sachetto Oliveira – 43 / 73


Tamanho de página

■ Normalmente escolhido pelo sistema operacional;

■ Não se consegue um tamanho ótimo pois essa escolha


depende de parâmetros conflitantes.

■ Páginas pequenas: menor fragmentação interna, menor uso


de memória mas tabela de páginas grande;

◆ A transferência de 64 páginas de 512 bytes pode levar


640 ms, mas a transferência de páginas de 8 KB pode
levar somente 48 ms;

Processos Rafael Sachetto Oliveira – 44 / 73


Espaços separados de instrução de dados

Processos Rafael Sachetto Oliveira – 45 / 73


Páginas compartilhadas

■ Processos compartilham código.

■ Exemplo: fork. Utiliza copy on write.

Processos Rafael Sachetto Oliveira – 46 / 73


Bibliotecas compartilhadas

■ Deve-se usar codigo independente de posição: -fPIC no


GCC.

Processos Rafael Sachetto Oliveira – 47 / 73


Arquivos mapeados (mmap)

■ Arquivos são mapeados como um vetor de caracteres no


espaço de enderaçamento do processo.

■ As páginas são copiadas sob demanda;

■ Quando é o mapeamento é finalizado, as modificações são


escritas no disco;

■ Pode ser utilizado para compartilhamento de memória entre


processos;

Processos Rafael Sachetto Oliveira – 48 / 73


Polı́tica de limpeza

■ daemon de paginção: responsável por varrer a memória


periodicamente selecionando páginas a serem removidas.

■ Pode garantir que as molduras de páginas estejam limpas.

Processos Rafael Sachetto Oliveira – 49 / 73


Tratamento da falta de página

■ O hardware cria uma trap para o núcleo, salvando o


contador do programa na pilha.

■ Uma rotina em código é iniciada para salvar o conteúdo dos


registradores de uso geral e outras informações voláteis.

■ O sistema operacional descobre a ocorrência de uma falta


de página e tenta descobrir qual página virtual é necessária.

■ Uma vez conhecido o endereço virtual que causou a falta da


página, o sistema verifica se esse endereço é válido e se a
proteção é consistente com o acesso.

Processos Rafael Sachetto Oliveira – 50 / 73


Tratamento da falta de página

■ Se a moldura da página selecionada estiver suja, a página é


escalonada para ser transferida para o disco e será realizado
um chaveamento de contexto.

■ Quando a moldura da página estiver limpa, o sistema


operacional buscará o endereço em disco onde está a página
virtual solicitada e escalonará uma operação para trazê-la.

■ Quando a interrupção de disco indicar que a página chegou


na memória, as tabelas de páginas serão atualizadas para
refletir sua posição, e será indicado que a moldura de
página está normal.

Processos Rafael Sachetto Oliveira – 51 / 73


Tratamento da falta de página

■ A instrução que estava faltando é recuperada para o estado


em que se encontrava quando começou, e o contador de
programa é reiniciado a fim de apontar para aquela
instrução.

■ O processo em falta é escalonado, o sistema operacional


retorna para a rotina, em linguagem de máquina, que o
chamou.

■ Esta rotina recarrega os registradores e outras informações


de estado e retorna ao espaço de usuário para continuar a
execução como se nada tivesse ocorrido.

Processos Rafael Sachetto Oliveira – 52 / 73


Backup de instrução

Processos Rafael Sachetto Oliveira – 53 / 73


Retenção de páginas na memória

■ Uma página utilizada como buffer de E/S pode ser


removida da memória;

■ Pode estragar a transferência se for via DMA;

■ Soluções: pinning ou utilização de buffers de núcleo;

Processos Rafael Sachetto Oliveira – 54 / 73


Memória secundária

Processos Rafael Sachetto Oliveira – 55 / 73


Separação da polı́tica e mecanismo

Sistema de gerenciamento de memória é dividido em três partes:

■ Um manipulador de MMU de baixo nı́vel.

■ Um manipulador de falta de página que faz parte do núcleo.

■ Um paginador externo executado no espaço do usuário.

Processos Rafael Sachetto Oliveira – 56 / 73


Separação da polı́tica e mecanismo

Processos Rafael Sachetto Oliveira – 57 / 73


Segmentação

Um compilador tem muitas tabelas que são construı́das


conforme a compilação ocorre, possivelmente incluindo:

■ O código-fonte sendo salvo para impressão (em sistema em


lotes).

■ tabela de sı́mbolos – os nomes e atributos das variáveis.

■ A tabela com todas as constantes usadas, inteiras e em


ponto flutuante.

■ A árvore sintática, a análise sintática do programa.

■ A pilha usada pelas chamadas de rotina dentro do


compilador.

Processos Rafael Sachetto Oliveira – 58 / 73


Segmentação

Processos Rafael Sachetto Oliveira – 59 / 73


Segmentação

Processos Rafael Sachetto Oliveira – 60 / 73


Implementação da segmentação pura

Processos Rafael Sachetto Oliveira – 61 / 73


Segmentação com paginação: MULTICS

Processos Rafael Sachetto Oliveira – 62 / 73


Segmentação com paginação: MULTICS

Processos Rafael Sachetto Oliveira – 63 / 73


Segmentação com paginação: MULTICS

Quando ocorre uma referência à memória, o seguinte algoritmo é


executado:

■ O número de segmento é usado para encontrar o descritor


desse segmento.

■ Realiza-se uma verificação para ver se a tabela de páginas


do segmento está na memória.

◆ Se não estiver, ocorre uma falta do segmento.


◆ Se houver uma violação na proteção, uma falta ocorre.

Processos Rafael Sachetto Oliveira – 64 / 73


Segmentação com paginação: MULTICS

■ A entrada da tabela de páginas para a página virtual


requerida é examinada.

◆ Se a página não estiver na memória, ocorre uma falta


de página.
◆ Se estiver na memória, o endereço da memória
principal do inı́cio da página é extraı́do da entrada da
tabela de páginas.

■ O deslocamento é adicionado à página de origem para gerar


o endereço da memória principal onde a palavra está
localizada.

■ A leitura ou registro podem ser realizados.

Processos Rafael Sachetto Oliveira – 65 / 73


Segmentação com paginação: MULTICS

Processos Rafael Sachetto Oliveira – 66 / 73


Segmentação com paginação: MULTICS

Processos Rafael Sachetto Oliveira – 67 / 73


Segmentação com paginação: MULTICS

Processos Rafael Sachetto Oliveira – 68 / 73


Segmentação com paginação: o Pentium

Processos Rafael Sachetto Oliveira – 69 / 73


Segmentação com paginação: o Pentium

Processos Rafael Sachetto Oliveira – 70 / 73


Segmentação com paginação: o Pentium

Processos Rafael Sachetto Oliveira – 71 / 73


Segmentação com paginação: o Pentium

Processos Rafael Sachetto Oliveira – 72 / 73


Segmentação com paginação: o Pentium

Processos Rafael Sachetto Oliveira – 73 / 73