Gerenciamento de Memória Prof. Alexandre Monteiro Recife ‹#› Contatos Prof. Guilherme Alexandre Monteiro Reinaldo Apelido: Alexandre Cordel E-mail/gtalk: [email protected] [email protected] Site: http://www.alexandrecordel.com.br/fbv Celular: (81) 9801-1878 Gerenciamento de Memória Alocada Dinamicamente Existem duas maneiras do sistema operacional gerenciar a memória quando ela é alocada dinamicamente: • Mapa de bits e Lista de disponíveis (0 livre, 1 ocupado) - a) Parte da memória com cinco segmentos alocados a processos e três segmentos de memória livre. - b) O mapa de bits. - c) As mesmas informações do mapa de bits em uma lista encadeada. Gerenciamento de Memória com Listas Encadeadas É possível utilizar diversos algoritmos para alocar memória a um processo recém-criado (ou a um processo já existente em disco que esteja sendo transferido para a memória). • First-Fit (O Primeiro que Couber). O gerenciador de memória procura ao longo da lista de segmentos de memória por um segmento livre que seja suficientemente grande para esse processo. • Next-Fit (O Próximo que Couber). Funciona da mesma maneira que o algoritmo First-Fit, exceto pelo fato de sempre memorizar a posição em que encontra um segmento de memória disponível de tamanho suficiente. • Best-Fit (O que Melhor Couber). Esse algoritmo pesquisa a lista inteira e escolhe o menor segmento de memória livre que seja suficiente ao processo. • Worst-Fit (O que Pior Couber), isto é, sempre escolher o maior segmento de memória disponível. OBS: First e Best são melhores que Worst em termos de velocidade e utilização de espaço. Partições Variáveis: Algoritmos de Alocação de área livre Qualquer um dos algoritmos anteriores é mais eficiente se: • Houverem 2 listas: lista de partições usadas + lista de espaços livres • Listas são mantidas ordenadas por tamanho (nr. de unidades de alocação) Problema: há uma complexidade extra quando ocorre uma liberação de memória (precisa-se verificar se há espaços adjacentes livres e inserir o novo espaço na posição correta da lista). 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) Swapping Principal problema do swapping com partições de tamanho variável: • Manter a informação sobre espaços não utilizados (livres) • Evitar uma fragmentação externa da memória (= muitos espaços pequenos não utilizados) Compactação de memória é muito cara – da ordem de segundos para alguns MBs de RAM. Gerenciamento de Espaço Livre Quando o processo é swapped out, a lacuna correspondente precisa ser combinada com espaços vizinhos livres. Quando processo é swapped in, percorre-se a lista buscando um espaço livre suficientemente grande (lista geralmente ordenada por endereços de memória) Quando X é swapped out: quatro combinações de nós na lista Memória Virtual O tamanho total do programa pode exceder a quantidade de memória física disponível para ele. Sendo assim, o sistema operacional mantém as partes ativas do programa na memória e o restante em disco. Memória Virtual (Paginação) É 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. A grande maioria dos SO’s (exceto alguns para tempo real), implementam Memória Virtual. MV usa a técnica de paginação: • Memória física e espaço de endereçamento lógico de cada processo são divididos em partições de mesmo tamanho: - Espaço do processo é dividido em páginas - Memória é dividida em molduras de página • 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. Paginação Requer a 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 a 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 transferida para a memória. Paginação A memória física é dividida em um número de partições de mesmo tamanho, denominadas páginas físicas, quadros ou frames ou molduras. A memória lógica é dividida em partições do mesmo tamanho, denominadas páginas lógicas (ou, simplesmente, páginas) Cada página lógica é carregada em uma moldura de página quando o processo é carregado na memória principal. Nessa ocasião, uma Tabela de Páginas é criada. Permite que o espaço físico ocupado por um processo seja não contíguo. Paginação Exemplo: número de páginas/processo Processos A, B, C estão prontos A1 A2 A3 A 4 B 3 C 4 D 5 A4 B1 B2 B3 C1 C2 C3 C4 Paginação B termina D é submetido A1 A1 A2 A2 A3 A3 A4 A4 D1 D2 D3 C1 C1 C2 C2 C3 C3 C4 C4 D4 D5 Paginação Problemas tanto em particionamento fixo quanto dinâmico: • fixo – fragmentação interna • dinâmico – fragmentação externa e realocação dinâmica Solução: • Processo é dividido em páginas (blocos de processos) • MP é dividida em quadros de mesmo tamanho Páginas/quadros/molduras são de pequeno tamanho (ex., 1K): fragmentação interna pequena. Paginação elimina fragmentação externa. SO mantém uma Tabela de Páginas por processo. Paginação Processo não precisa estar completamente na MP (veremos adiante em Memória Virtual) Processo não precisa ocupar área contígua em memória Endereços são gerados dinamicamente em tempo de execução Somente um registrador então, não é suficiente Tabela de Páginas Exemplo em Memória Virtual Espaço de Endereçamento Virtual Página Virtual Espaço de Endereçamento Físico Moldura de Página Técnica de Paginação Exemplo de mapeamento: • Um computador pode gerar endereços virtuais de 0 a 64 K. • Contudo, esse computador tem somente 32 KB de memória física. • Embora seja possível escrever programas de 64KB, eles não podem ser totalmente carregados na memória para serem executados. • Uma cópia completa do código do programa, deve estar presente em disco, de modo que partes possam ser carregadas dinamicamente na memória, quando necessário. Técnica de Paginação O espaço de endereçamento virtual é dividido em unidades denominadas páginas. As unidades em memória física são denominadas molduras de página. As páginas e as molduras de página são sempre do mesmo tamanho. No exemplo dado, as páginas têm 4 KB, mas páginas de 512 bytes a 64 KB têm sido utilizadas em sistemas reais. • Com 64 KB de espaço de endereçamento virtual e 32 KB de memória física, podemos ter 16 páginas virtuais e oito molduras de página. Técnica de Paginação Qual endereço físico a MMU (Memory Management Unit) deve apontar quando a instrução for MOV REG, 8192? É transformada em “MOV REG 24576”, pois o endereço virtual 8192 está na página virtual 2, e essa página está mapeada na moldura de página física 6 (endereços físicos de24576 a 28671). Estrutura de uma Tabela de Páginas Como é uma entrada na tabela de páginas? • O tamanho da tabela geralmente é de 32 bits. • O campo mais importante é o Número da Moldura de Página, do qual se refere a página da memória RAM. • Próximo a ele temos o bit presente/ausente. Se esse bit for 1, a entrada será válida e poderá ser usada. Se ele for 0, a página virtual não estará presente na memória, ocorre uma falta de página. (Page Fault) • Os bits de proteção dizem quais tipos de acesso são permitidos à página. Em sua configuração mais simples, esse campo contém um bit, com 0 para leitura/escrita e 1 somente para leitura. Uma forma mais sofisticada tem 3 bits, 1 bit para habilitar/desabilitar cada uma das operações básicas na página: leitura, escrita e execução. Paginação Se um processo tem tamanho K, os seus endereços lógicos (endereços especificados nas suas instruções) vão desde 0 até K-1. Este é o espaço de endereçamento do processo. Cada endereço lógico é quebrado em duas partes: - número da página p - deslocamento d (offset) 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 15 10 9 Página (p) 0 deslocamento (d) Acontece relocação dinâmica, pois cada endereço lógico é traduzido em endereço físico em tempo de execução Tabela de Páginas – bits de controle Cada entrada da tabela possui alguns bits adicionais para implementar proteção • um bit para indicar se a página é de apenas leitura (read only) • um bit para indicar se a página é válida ou inválida Vejamos: Controle de Acesso A paginação pode ser facilmente estendida para incorporar controle de acesso para cada página: • além do endereço do quadro da memória, cada entrada da TP contém bits para o tipo de acesso permitido, podendo ser: somente-leitura, leitura-eescrita ou somente-execução • se uma instrução viola o acesso permitido, a MMU gera outra interrupção (violação de acesso de memória) • a validade de uma operação sob um endereço lógico pode ser testada em paralelo com a obtenção do endereço físico correspondente. Além disto, pode-se usar bits válido/inválido para marcar as páginas lógicas que efetivamente compõem o espaço de endereçamento lógico do processo • é útil para espaços de endereçamentos grandes e utilizados de forma descontínua • note-se que devido ao problema do não alinhamento de dados com os limites das páginas, esse tipo de controle de acesso não é muito preciso. Entrada da Tabela de Páginas Cache desabilitado Modificada Presente/Ausente Número da moldura de página Referenciada Proteção Memória Virtual Intervalo de Memoria em K Indice 60 64 X 56 60 X 52 56 X 48 52 X 44 48 7 40 44 X 36 40 5 32 36 X 28 32 X 24 28 X 20 24 3 16 20 4 12 16 0 8 12 6 4 8 1 0 4 2 28 32 24 28 20 24 16 20 12 16 8 12 4 8 0 4 Memória Virtual Intervalo de Memoria em K Indice 60 64 X 56 60 X 52 56 X 48 52 X 44 48 7 40 44 X 36 40 5 32 36 X 28 32 X 24 28 X 20 24 3 16 20 4 12 16 0 8 12 6 4 8 1 0 4 2 Page Fault 28 32 24 28 20 24 16 20 12 16 8 12 4 8 0 4 Memória Virtual Intervalo de Memoria em K Indice 60 64 X 56 60 X 52 56 X 48 52 X 44 48 7 40 44 X 36 40 5 32 36 X 28 32 X 24 28 X 20 24 3 16 20 4 12 16 0 8 12 6 4 8 1 0 4 2 Escolhe a célula mais antiga e salva em disco... 28 32 24 28 20 24 16 20 12 16 8 12 4 8 0 4 Memória Virtual Intervalo de Memoria em K Indice 60 64 X 56 60 X 52 56 X 48 52 1 44 48 7 40 44 X 36 40 5 32 36 X 28 32 X 24 28 X 20 24 3 16 20 4 12 16 0 8 12 6 4 8 X 0 4 2 Refaz o apontamento virtual... 28 32 24 28 20 24 16 20 12 16 8 12 4 8 0 4 Memória Virtual A MMU é mostrada como parte do chip da CPU porque atualmente isso é comum, porém poderia ser um chip separado, como ocorria no passado. Tabela de Páginas O objetivo da tabela de páginas é mapear páginas virtuais em molduras de página física. Matematicamente, a tabela de páginas é uma função que usa o número da página virtual como argumento e tem o número da moldura de página física correspondente como resultado. Tabela de Páginas Dois pontos importantes devem ser considerados: •A tabela de páginas pode ser extremamente grande. - Com um tamanho de página de 4 KB, um espaço de endereçamento de 32 bits tem um milhão de páginas virtuais; um espaço de endereçamento de 64 bits tem mais do que se possa imaginar. - Com um milhão de páginas virtuais no espaço de endereçamento virtual, a tabela de páginas deve ter um milhão de entradas. •O mapeamento deve ser rápido. Tabela de Páginas Realocação Mapeamento de endereços virtuais em reais necessário, pois processos são alocados em espaço de MP dinamicamente Ex.: processo P1 P1: executando novo bloqueado Ao voltar para MP P1 vai para end. 1024 pronto P1 em end. de MP 500 P1 passa para suspenso Realocação Mapeamento eficiente • endereço físico só calculado quando acesso a MP • endereços definidos: lógico, relativo, físico Registradores: • base – armazena o endereço inicial de MP do processo (quando o processo passa para executando) • limite – armazena endereço final do processo Acesso ao endereço Z no programa if (Z + base <= limite) acesse Z+base senão “trap” Relocação endereço relativo registrador de base PCB somador programa registrador limite comparador endereço absoluto imagem do processo na memória dados int pilha Paginação Paginação 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, o espaço físico equivalente é distribuído/separado. A tradução é feita de forma transparente pela MMU, que além da TP, mantém um cache das páginas recentemente consultadas. Em suma Paginação Cada processo P possui a sua Tabela de Páginas, que precisa ser carregada na MMU a cada troca de contexto. Para tal, cada entrada Tabela Processos(P) contém um ponteiro para a Tabela de Páginas de P. 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. Além disto, kernel precisa manter informações sobre o conjunto de molduras livres na memória principal: Para isso, usa-se uma tabela de molduras (tabela de moldura de páginas), com uma entrada por moldura, informando se o mesmo está alocado, e para qual processo. Implementação da Tabela de Páginas Conjunto de registradores dedicados Memória Principal TLB ou Memória Associativa Tabela de Páginas em Conjunto de Registradores Dedicados Na mudança de processo em execução estes registradores são carregados com os valores correspondentes ao novo processo. TP é mantida em um conjunto de registradores dedicados, que são carregados através de instruções privilegiadas (ex. DEC PDP-11) Pró: não necessita de MMU e tradução é veloz. Contra: número de entradas é pequeno (tipicamente, de 16 a 64 páginas) Tabela de Páginas na Memória Principal Cada descritor de processo contém o endereço de sua respectiva tabela de páginas. A UCP possui um registrador que aponta para a tabela de páginas atual Para acessar um dado na memória são necessários dois acessos: um de mapeamento (acesso à tabela) e outro para acessar o dado TP é mantida em memória principal • mantém-se um registrador com o endereço base da tabela (Process Table Base Register, PTBR) e entrada na tabela = PTBR + #página_virtual Prós: • possibilita tabelas de páginas arbitrariamente grandes • a troca de contexto envolve somente PTBR Contras: • tempo de acesso à memória duplica, devido ao acesso à tabela Tabela de Páginas em TLB ou Memória Associativa Memória de alta velocidade (mas hardware caro), onde cada posição possui dois campos (chave = número de página lógica, valor = página física correspondente) Usa um Translation Look-aside Buffer (TLB, buffer para tradução de endereços) na MMU: • TLB = vetor associativo que permite comparação paralela com suas entradas (de 8 - 128 entradas; Intel 80486 tem 32 entradas) • mantém-se apenas as entradas da TabPaginas das páginas recentemente acessadas ( princípio de localidade) • quando uma página lógica é acessada e seu mapeamento não está no TLB • (TLB miss) então: - acessa-se a TabPaginas na memória e substitui-se a entrada no TLB - dependendo se a página está em memória ou não, continua-se a execução, ou gera-se uma interrupção Page-fault • a cada troca de contexto, o TLB precisa ser limpo Vantagem: tradução rápida Desvantagem: requer gerenciamento do conteúdo do TLB (substituição de entradas) TLB - Translation Look-aside Buffer Funcionamento da MMU com TLB Ao receber um novo nº. de página (np) todas as entradas do TLB são comparadas em paralelo: • Se np é encontrado e tipo de acesso é válido, então usa-se a entrada do TLB (endereço do quadro) • Se tipo de acesso é inválido, gera-se uma falha de proteção (e processo é abortado) • Se np não é encontrado na TLB, (TLB miss), MMU consulta a TP em memória, obtém o end. do quadro, e copia a entrada completa da TP para o TLB (para agilizar acessos futuros) • Quando houver acesso p/escrita, copia-se o flag de escrita (Modify bit) de TLB para TP. Obs: Pode-se aumentar a eficiência da paginação, aumentando-se o tamanho do TLB. TLB - Translation Look-aside Buffer Possível configuração do TLB para um programa com: • Um loop cujas instruções internas estão armazenadas nas páginas 19-21, acessando um vetor nas páginas 129-130. O índice do vetor está na pagina 140 e a pilha em 860-861. TLB - Translation Look-aside Buffer Em arquiteturas RISC(*), TLB misses são tratados pelo Sistema Operacional e não pelo hardware (MMU). Quando a MMU gera um TLB-miss, o núcleo faz o troca da entrada da TLB. Desvantagem: gerenciamento do TLB é muito mais lento do que se for por hardware Vantagem: Torna o circuito da MMU bem mais simples, e permite a implementação em muitas arquiteturas; Problema com Tabela de Páginas Principal problema é que a própria TP precisa estar em memória. - Arquitetura de 32 bits. Tamanho da página= 4K Offset = 12 bits Tabela de página = 220 entradas! 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 e do número de bits da arquitetura), pode ser inviável manter todas elas na memória do núcleo. O que fazer? Tabela de Páginas Multinível • Resolve o problema de manter grandes tabelas de página na memória (para todos os processos). • Com TP de 2 níveis, pode-se particionar a TP principal em páginas e manter apenas as páginas da TP cujo mapeamento esteja sendo usado. • Uma tabela de 1o. nível contém os ponteiros para essas partes da TP. TP de nível 2 Tabela de Páginas Invertidas Para arquiteturas de 64 bits, o espaço de endereçamento lógico é 264 bytes! Exemplo: se o seu tamanho de página for 4KB, isso leva a TPs muito grandes, ex. 252 ≈ alguns Tera Bytes!). Por isso, em alguns sistemas usa-se uma TP invertida: Uma entrada para cada moldura de página Cada entrada contém uma lista de pares: (processID, nº da página) Desvantagem: a tradução de endereços lógicos para reais fica bem mais lenta. Ex: para cada página p, precisa-se fazer uma varredura pela TP invertida para encontrar a moldura correspondente. Só é viável, se o TLB for usado para guardar as associações correntes. Somente quando ocorre um TLB miss, a TP invertida precisa ser consultada. Na maioria dos sistemas, usa-se uma função de hash para indexar as entradas da TP invertida. Comparação de TP tradicional e TP invertida. A questão do tamanho das páginas Tamanho de página pequenos: • Vantagens • Melhor aproveitamento da memória física: 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) Algoritmo de Substituição de Página Quando uma falta de página ocorre, o sistema operacional precisa escolher uma página a ser removida da memória a fim de liberar espaço para uma nova página a ser trazida para a memória. Embora seja possível escolher aleatoriamente uma página a ser descartada, o desempenho do sistema será muito melhor se a página escolhida for uma que não estiver sendo muito usada. Algoritmos de Substituição de Páginas O Algoritmo de Substituição de Página Ótimo ou Ideal Substitui a página que será acessada no futuro mais remoto • Infelizmente, não é viável na prática, pois exigiria um conhecimento sobre todos os acessos futuros. Estimada através de... • registro do uso da página em execuções anteriores do processo ... • apesar disto ser impraticável 54 O Algoritmo de Substituição de Página Não Usada Recentemente (NUR) Cada página tem os bits (R) Referenciada / Acessada e (M) Modificada/Alterada • As páginas são classificadas Bits são colocados em 1 quando a página é referenciada e modificada Classe 0: não referenciada, não modificada Classe 1: não referenciada, modificada Classe 2: referenciada, não modificada Classe 3: referenciada, modificada NUR remove página aleatoriamente • da classe de ordem mais baixa que não esteja vazia 55 Algoritmo de Substituição de Página Primeira a Entrar, Primeira a Sair Mantém uma lista encadeada de todas as páginas • página mais antiga na cabeça da lista • página que chegou por último na memória no final da lista Na ocorrência de falta de página - página na cabeça da lista é removida - nova página adicionada no final da lista Desvantagem • página há mais tempo na memória pode ser usada com muita freqüência 56 Algoritmo de Substituição de Página Segunda Chance (SC) Operação do algoritmo segunda chance a) b) lista de páginas em ordem FIFO estado da lista em situação de falta de página no instante 20, com o bit R da página A em 1 (verificado se seu bit de referência tenha valor 1, caso ele tenha valor 1, seu valor é mudado para 0 e esta página NÃO é retirada, é tratada como mais recentemente carregada) 57 Algoritmo de Substituição de Página Relógio Todos as páginas carregadas estão em uma lista circular. Ponteiro aponta para a página P15, a próxima página ser testada a partir da página P14. Note neste algoritmo, que a próxima página que será retirada não será nem as páginas 15, 16, 1 e 2, pois seus bits de referência tem valores 1. a próxima vítima será a página 3 Alternativa para o algoritmo da 2a. Chance (sem necessidade de manipular fila) 58 Menos Recentemente Usada (MRU) ou LRU (Least Recently Used) Assume que páginas usadas recentemente logo serão usadas novamente • retira da memória página que há mais tempo não é usada Uma lista encadeada de páginas deve ser mantida • página mais recentemente usada no início da lista, menos usada no final da lista • atualização da lista à cada referência à memória Alternativamente manter contador em cada entrada da tabela de página • escolhe página com contador de menor valor • zera o contador periodicamente 59 LRU A implementação do algoritmo LRU é muito custoso, segundo Tanenbaum, pois é preciso manter uma lista encadeada de todas as páginas na memória, com as páginas mais recentemente utilizadas na frente e as menos recentemente utilizadas no fundo. Essa lista deve ser atualizada a cada referência de página, o que pode gerar uma grande modificação na lista. Imagine que, uma página do fim da lista (pouco referenciada) seja referenciada. É preciso, então deslocar esta página para o início da fila. MRU usando matrizes HW especial que mantém uma matriz n x n, onde n é o número de molduras. Inicialmente todos os bits da matriz são 0. Sempre que a moldura k é referenciada, o hardware seta todos os bits da linha k para 1, e depois zera todos os bits da coluna k para zero. Deste modo, a qualquer instante a linha com o menor valor binário é a menos recentemente usada. Simulação do LRU em Software (1) LRU usando uma matriz – páginas referenciadas na ordem 0,1,2,3,2,1,0,3,2,3 62 Algoritmo NFU (Não Frequentemente Usado) Não Usada Frenquentemente Um contador por página na memória A cada tick, o S.O. percorre todas as páginas na memória e soma o bit R (0 ou 1) de cada página ao seu respectivo contador Na ocorrência de falta de página, a página c/ o menor contador é substituída Problema: o algoritmo nunca esquece (reseta) o contador Envelhecimento (Aging) Simulação do LRU em Software O algoritmo do envelhecimento (aging) simula o LRU em software Note 6 páginas para 5 tiques de relógio, (a) – (e) 64 O Algoritmo de Substituição de Página do Conjunto de Trabalho (1) 65 O Algoritmo de Substituição de Página do Conjunto de Trabalho (2) 66 O Algoritmo de Substituição de Página WSClock Operação do Algoritmo WSClock Considera: Conjunto de Trabalho; Referenciadas e; Modificadas. 67 Revisão dos Algoritmos de Substituição de Página 68 Modelagem de Algoritmos de Substituição de Página – Anomalia de Belady (a) FIFO com 3 molduras de página (b) FIFO com 4 molduras de página P mostra quais referências de página causaram faltas de página 69 Algoritmos de Pilha Estado do vetor de memória, M, após cada item na cadeia de referências ter sido processado 70 A Cadeia de Distâncias Funções densidade de probabilidade para duas cadeias de distâncias hipotéticas 71 A Cadeia de Distâncias Cálculo da freqüência de faltas de página (PFF) a) o vetor C b) o vetor F 72 Questões de Projeto para Sistemas de Paginação Política de Alocação Local x Global (1) (a) Configuração original (b) Substituição local (c) Substituição global 73 Política de Alocação – Ultra-paginação Local x Global (Thrashing) Fenômeno que ocorre quando o gerenciador de memória fica sobrecarregado com cópias de páginas entre memória e disco. Alta frequência de faltas de página: ocorre quando um processo possui menos páginas na memória do que o seu conjunto de páginas em uso (working-set). 74 Controle de Carga Mesmo com um bom projeto, o sistema ainda pode sofrer paginação excessiva (thrashing) Quando o algoritmo PFF indica • alguns processos precisam de mais memória • mas nenhum processo precisa de menos Solução : Reduzir 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 75 Espaços Separados de Instruções e Dados a) Espaço de endereçamento único b) Espaços separados de instruções (I) e dados (D) 76 Páginas Compartilhadas Dois processos que compartilham o mesmo código de programa e, por conseqüência, a mesma tabela de páginas para instruções 77 Política de Limpeza Precisa de um processo que executa em background, um daemon de paginação • Inspeciona periodicamente o estado da memória • Verifica se página modificadas foram escritas em disco. Quando apenas algumas molduras de página estão disponíveis • Seleciona páginas a serem removidas usando um algoritmo de substituição Pode ser implementada através de lista circular (relógio) com dois ponteiros • Ponteiro da frente controlado pelo daemon de paginação • Ponteiro de trás usado para substituição de página (como no do relógio) 78 Questões de Implementação Envolvimento do S.O. com a Paginação Quatro circunstâncias de envolvimento: Criação de processo 1. determina tamanho do programa cria tabela de página (swap area = área de troca de disco) Execução de processo 2. MMU reinicia tabela de páginas para novo processo TLB é esvaziada Ocorrência de falta de página 3. determina endereço virtual que causou a falta descarta, se necessário, página antiga (política de limpeza) carrega página requisitada para a memória e aponta para instrução Terminação de processo 4. Libera tabela de páginas, páginas, e espaço em disco que as páginas ocupam, caso não sejam compartilhadas. 79 Tratamento de Faltas de Página (1) 1) 2) 3) 4) 5) Hardware desvia a execução para o núcleo (salva estado atual do processo na pilha) Salva conteúdo de registradores e outras informações voláteis SO determina a página virtual necessária que gerou a falta de página. SO checa validade de endereço, busca moldura de página na memória. Se moldura de página selecionada foi modificada (suja), salvá-la em disco 80 Tratamento de Faltas de Página (2) 6) 7) 8) 9) 10) SO escreve a página modificada em disco e busca em disco página virtual referenciada Tabela de páginas é atualizada Estado da instrução que causou falta de página é recuperado e aponta para a instrução Processo que causou falta de página é escalado para executar Programa continua 81 Fixação de Páginas na Memória Memória virtual e E/S interagem ocasionalmente Processo emite chamada ao sistema para ler do disco para o buffer • enquanto espera pela E/S, outro processo inicia • ocorre uma falta de página • buffer do primeiro processo pode ser escolhido para ser levado para disco Solução possível (Retenção de Páginas = Pinning) • Fixação de páginas envolvidas com E/S na memória 82 Memória Secundária (a) Paginação para uma área de troca estática (b) Páginas alocadas dinamicamente em disco 83 Separação da Política e do Mecanismo Tratamento de faltas de página com paginador externo 84 Segmentação Divisão do espaço de endereçamento em um número de partições com tamanhos distintos Aproxima-se mais da visão do programador: um programa é uma coleção de segmentos de tamanho variável Os compiladores e montadores criam automaticamente os segmentos que constituem o programa Na carga do programa cada segmento recebe um número de segmento específico Segmentação (1) Espaço de endereçamento unidimensional com tabelas crescentes Uma tabela pode atingir outra 86 Segmentação A memória lógica é constituída por um conjunto de segmentos, cada um com um nome e um tamanho (na prática, os segmentos são identificados por números e não por nomes) Páginas têm tamanho fixo, segmentação não. Uma posição da memória lógica é referida por um par (s, d) - s é o número do segmento - d é o deslocamento (offset ) dentro do segmento Segmentação (2) Permite que cada tabela cresça ou encolha, independentemente 88 Segmentação Subrotina Pilha Sqrt Programa Principal Array X Espaço de Endereçamento Lógico do Processo Segmentação É necessário mapear cada endereço lógico do tipo (s, d) para o endereços da memória física correspondente Para isso cada processo possui a sua tabela de segmentos A tabela de segmentos pode ser colocada em registradores rápidos ou na memória principal. Normalmente, é usado o esquema de memória associativa (na tabela associativa ficam os segmentos mais recentemente acessados e seus endereços) Tabela de Segmentos Segmentação Pode-se associar atributos aos segmentos, possibilitando assim uma proteção ou compartilhamento destes segmentos Bit de proteção associado a cada entrada da tabela de segmentos A segmentação facilita o compartilhamento entre usuários Segmentação e Paginação Espaço endereçamento • Paginação - Espaço de endereçamento lógico é um espaço único, contínuo, cujos endereços vão desde zero até MAX (onde MAX = tamanho do programa menos 1) • Segmentação - Espaço de endereçamento lógico é formado por um conjunto de segmentos. Cada segmento é um espaço contínuo, cujos endereços vão desde zero até MAX (onde MAX = tamanho do segmento menos 1) Segmentação e Paginação Qual o melhor? • Discussão antiga, sem vencedores Fragmentação • Paginação : apresenta fragmentação interna • Segmentação : apresenta fragmentação externa Administração • Paginação é mais simples Proteção (segurança) e compartilhamento • Segmentação é melhor, pois: - segmentos são unidades lógicas - páginas são mais misturadas (dados, código) Segmentação (3) Comparação entre paginação e segmentação 95 Sistemas Combinados Existem sistemas onde a paginação e a segmentação são usadas em conjunto, procurando tirar proveito de ambos os esquemas. •Segmentação paginada (mais comum) •Paginação segmentada (menos comum) Segmentação Paginada s d Tabela de Segmentos S >= N Base da Tabela de Páginas Tamanho do Segmento d erro p d’ MEM + f f d’ Paginação por demanda Um programa pode ser executado com poucas de suas páginas na memória Quando necessário, uma página é trazida do disco para memória e utilizada (demanda) Paginação por demanda É uma extensão do mecanismo de paginação simples As páginas de um processo podem estar presentes na memória ou não. As páginas não presentes estão marcadas como inválidas Se uma página inválida é referida, o SO verifica se ela está em disco (page fault) ou se realmente é uma página fora do espaço lógico do processo Implementação de Segmentação Pura (a)-(d) Desenvolvimento de fragmentação externa (e) Remoção da fragmentação via compactação 100 Referências Sistemas Operacionais Modernos – 3ª Edição. A. Tanenbaum, 2008. Modern Operating Systems 3 e. Prentice-Hall, 2008.