Aula 9 Sistemas Operacionais Ivan Saraiva Silva Ciência da Computação 2005.1
Gerência de Memória Um sistema de memória possui pelo menos dois níveis: Memória principal: RAM (acessada pela CPU) Memória secundária: discos Programa para ser executado tem que estar em RAM Transferência de memória secundária (disco) a memória primária (RAM) Complexidade da gerência de memória depende do sistema Monoprogramação Não abordaremos Multiprogramação
Multiprogramação Fila P4 Fila P2 Fila P1 Partição 4 Partição 3 Partição 2 Partição 1 SO Dividir a memória em N partições fixas de tamanhos variados Processos usam a menor partição possível Múltiplas filas de processos Desperdício de memória Fragmentação interna
Multiprogramação ila Única Partição 4 Partição 3 Partição 2 Partição 1 SO Fila única de processos Busca-se na fila o primeiro job que caiba na partição Desperdício de memória Busca-se o maior job que caiba na partição Despreza jobs pequenos Alternativas Pelo menos uma partição pequena Não preterir jobs mais que k vazes
Modelagem de Multiprogramação Utilização da CPU Se p é a fração de tempo em que um espera por E/S é n é o número de processos na memória: p n é a probabilidade de todos estarem esperando E/S 1-p n é a utilização da CPU Modelo simplificado considera processos independentes
Exemplo Sistema com 32 MB, o SO usa 16MB e os programas do usuário usam 4MB Programas de usuário simultaneamente na memória Se os processos esperam em média 80% do empo por E/S, tem-se Utilização da CPU = 1 0,8 4 60% Acrescentando 16MB de memória no sistema Utilização da CPU = 1 0,8 8 83% Acrescentando outros 16MB Utilização da CPU = 1 0,8 12 93%
Relocação e Proteção ila Única Partição 4 Partição 3 Partição 2 Partição 1 SO A multiprogramação implica em um problema Ao mudar de partição o programa necessita ser relocado Relocação implica em correção de endereços de instruções Via software (mapa de correções) Via hardware (reg. base e limite) Proteção Não correção ou correção errada implica em acesso a outra partição
Partições Dinâmicas Criar partições dinâmicas é uma boa solução para a fragmentação interna Quantidade e tamanho das partições é dinamicamente definido Resulta em fragmentação externa Troca de processos deixa muitos espaços vazios na memória Compactação da memória pode ser usada para corrigir a fragmentação externa Compactação é muito custosa em tempo Definição do tamanho das partições pode ser difícil Processos crescem quando em execução É bom definir áreas extras para dados e pilhas
Mapa de bits Usado para o gerenciamento com alocação dinâmica Memória é dividida em unidades de alocação De algumas palavras a vários quilobytes Menor maior o mapa de bits Maior desperdiço na última unidade A cada unidade é associado um bit que descreve a disponibilidade da unidade Disponível = 0 Ocupada = 1 Principal problema Busca de k zeros consecutivos para alocação de k unidades
Lista Encadeada Também usado para gerenciar a alocação dinâmica. Lista ligada de segmentos alocados ou livres Um segmento é uma área de memória alocada ou livre Cada elemento da lista indica Estado do segmento (P) Alocado ou (H) Livre Unidade em que inicia Tamanho em unidades Lista duplamente encadeada facilita de concatenação de segmenos Lista ordenada por endereço permite vários algoritmos de alocação
Algoritmos de Alocação First Fit: Procura primeiro segmento que couber o processo Next Fit: First Fit com memorização resultado da última busca Best Fit: Procura o menor segmento que caiba o processo Worst Fit: Procura o maior segmento disponível, o restante ainda deve servir Lista separadas de alocados e livres podem ser mantidas Neste caso ordenação por tamanho beneficia Best Fit e First Fit