BC1518-Sistemas Operacionais Memória Virtual (aula 9) Prof. Marcelo Z. do Nascimento [email protected] Roteiro Memória Virtual Paginação sob demanda Cópia na escrita Algoritmos de Substituição de Página Thrashing Arquivos mapeados na memória Leituras Sugeridas Exercícios 06/04/09 2 Memória Virtual Há muitos anos os programas maiores que a memória eram divididos em módulos menores (overlays) => Programador; ◦ Overlays => eram mantidos dinamicamente na memória; em disco e carregados Responsável: sistema operacional; ◦ Desvantagem: Trabalho lento/alto custo computacional; Memória Virtual (MV) ◦ Idéia básica: tamanho total de um programa pode exceder a quantidade de memória física disponível para ele. 06/04/09 3 Memória Virtual Características: ◦ Técnica que combina memória principal (RAM) e secundária (Disco rígido); ◦ Fundamentação: não vincular o endereçamento feito pelos programadas aos endereços físicos da memória principal; ◦ Maximiza o número de processos na memória; ◦ Busca reduzir a fragmentação; ◦ Permite trabalhar com estruturas de dados maiores que o tamanho da memória física disponível; 06/04/09 4 Memória Virtual ◦ Espaço de endereçamento da memória principal (RAM) e memória secundária => blocos do mesmo tamanho: As páginas no espaço virtual => denominados páginas virtuais; As páginas no espaço real (quadro); => páginas reais ou frames ◦ Há uma tabela de páginas: responsável por mapear páginas virtuais em quadros de páginas para cada processo; Memória virtual pode ser implementada por: Paginação por Demanda; Segmentação por Demanda. 06/04/09 5 Espaço de Endereçamento Virtual • Mapeamento – permite que um programa não precise estar necessariamente em endereços contíguos na memória principal para ser executado; Memória Virtual . . . . . . Memória Principal Mapeamento 06/04/09 6 Memória Virtual ⇒ Memória Virtual pode ser maior do que a memória física 7 Memória Virtual Processo: Visão -> endereço lógico e existe em trechos contíguos na memória; Na verdade a MMU faz associação das páginas lógicas aos quadros de página físicos; O grande espaço vázio (espaços de endereços esparsos) faz parte do espaço de endereços virtuais, mas exigirá páginas físicas apenas se a pilha ou heap crescer; Também permite vincular bibliotecas de forma dinâmica durante a execução do programa 06/04/09 8 Paginação por Demanda Essa técnica busca trabalhar com memória virtual da seguinte forma: ◦ Uma página é carregada para memória apenas quando necessária. Mas, qual o motivo? ◦ Necessário menos E/S; ◦ Resposta mais rápida, porque é carregado apenas as primeiras páginas; ◦ Menos espaço de memória para cada processo; ◦ Então, mais processos pode ser admitidos no sistema. Como isso acontece? ◦ Processo gera o endereço lógico (virtual) o qual é mapeado para endereço físico; ◦ Se a página solicitada não está na memória => SO carrega 9 do disco (memória secundária). Então, como descobrir onde está uma página na memória? Cada entrada na tabela de página tem um bit valid–invalid: ◦ v ⇒ na memória; ◦ i ⇒ não está na memória; ◦ Inicial: configurado com I em todas entradas. Durante a tradução de endereço, se o bit valid–invalid esta i, pode ser: ◦ Referência ilegal (espaço de endereçamento fora da área do processo) ⇒ aborta processo; ◦ Referência Legal mas não está na memória ⇒ page fault (carrega a página do disco). Frame # valid-invalid bit v v v v i …. i i page table 10 Interceptação por Falha de Página O que ocorre se uma página não foi trazida para a memória? O acesso a uma página marcada como inválida causa uma interceptação por falha de página (page fault). Essa trap é repassada para o SO e o procedimento para tratá-la deve decidir: ◦ Referência inválida abortar Processo; ◦ Não está na memória carregar página: Encontra um quadro livre; Troca página do disco para o quadro (Operação de E/S); Modifica tabela, configurando como bit válido= v; Reinicia a instrução que causou page fault. 11 Interceptação por Falha de Página 12 Desempenho de Páginação por Demanda Probabilidade de uma falha de Página 0 ≤ p ≤ 1.0 ◦ Se p = 0 significa que não houve falha de página ◦ Se p = 1 significa que toda referência é uma falha Tempo de Acesso Efetivo (TAE): TAE = (1 – p) * tempo de acesso a memória (10 a 200 nanossegundos) + p * tempo de falha de página. ◦ Tempo e falha de página = serviço de interrupção de falha de página (~microsegundos) + Leitura da página requerida (~milissegundos) + reinicio do processo (~microsegundos). ◦ Lembre-se: Leitura na página requerida pode solicitar escrita de outra página para o disco se não houver quadro livre. 13 Cópia na escrita Como MV permite criar processos rápidos e eficiente? ◦ Emprega uma técnica Cópia na Escrita (CNE). A técnica CNE permite ambos os processos, pai e filho, compartilhar inicialmente as mesmas páginas na memória (durante o fork( )): ◦ Minimiza o número de novas páginas a ser alocadas ao processo recém-criado. ◦ Fork -> cria uma cópia do espaço de endereços do pai para o filho. Se usar a técnica CNE => Se algum processo modificar uma página compartilhada, a página é copiada. 14 Cópia na escrita Quando PI modifica a página C Cópia de C •Somente as páginas modificadas são copiadas; •Sistemas atuais: Windows XP, Linux; •Local de memória livre é alocado; •SO pode prover um banco de páginas livres para tais requisitos; •Podem ser alocadas quando pilha ou heap precisa crescer. 15 Substituição de Página Ocorre falha de página necessário carregar a página requerida do disco para memória: ◦ Encontrar a localização da página requerida no disco ◦ Encontrar uma página livre: Se há um quadro livre é só usá-lo; Senão use o algoritmo de substituição de página para selecionar uma página vítima residente na memória. ◦ Carregue a página requerida para o quadro livre; ◦ Atualize a tabela de página e a lista de quadro livre; ◦ Reinicie o processo. 16 Substituição de Página Pode-se resolver o problema de sobrecarga se a página vítima não foi modificada reduz operação de E/S. Associa-se um bit de modificação com cada página para indicar se a página foi modificada Se necessário, como escolher a página vítima? 17 Substituição de Página Objetivo: minimizar taxa de falha de página Avaliação de Algoritmo ◦ Retira um conjunto de referência da memória denomiando string de referência e calcula o número de falha de página na string. A string de referência é dada: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 Lembre-se ◦ Usa-se o número de página ◦ O endereço em sequência pode ter ser: 100, 250, 270, 300, … Assumindo uma página de tamanho = 100 bytes. ◦ As referências 250 e 270 estão na mesma página (2), apenas a primeira referência pode causar uma falha de página. 18 Substituição de Página O número de falha de página decai quando o número de quadros livres alocados ao processo aumenta 19 Algoritmo Primeiro a Chegar, Primeiro a Sair (FIFO) String de Referência: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 3 Quadros (3 páginas pode estar na memória a qualquer momento); Trabalha: Em toda falha de página: verifica o conteúdo da memória; Vantagem: Fácil de entender e implementar. Desvantagem: Desempenho pode não ser tão bom: • Pode ser uma página usada constantemente (ex. Uma variável acessada constantemente); • Pode ocorrer a anomalia de Belady. 20 Algoritmo Primeiro a Chegar, Primeiro a Sair (FIFO) Exemplo: Temos a seguinte string de referência: ◦ 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 Se há 3 quadros, quantas falhas de páginas pode ocorrer? ◦ 9 falhas de páginas (3 primeiros causam falha) Se há 4 quadros, quantas falhas de páginas? ◦ 10 falhas de páginas Mais quadros pode ser considerado oposto em falha de página. ◦ Anomalia Belady: mais quadros ⇒ mais falha de página 21 Algoritmo Primeiro a Chegar, Primeiro a Sair (FIFO) 1 1 4 5 2 2 1 3 3 3 2 4 9 falhas de página 22 FIFO: Anomalia Belady 23 Algoritmo Ótimo Você pode querer um algoritmo de substituição ótimo? ◦ Troca de página não irá usar o mais longo periodo de tempo como FIFO. Exemplo: 4-quadros: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 1 1 1 1 1 4 2 2 2 2 2 3 3 3 5 4 5 5 6 falhas de página Como prever o futuro? Não é possível 24 Algoritmo Least Recently Used (LRU) Tentativa de uma aproximação a política ótima: “olhe no passado para decidir o futuro”. ◦ LRU: Troca a página que não tem sido utilizada por o mais longo período; ◦ Relação: esta página pode não ser necessária (exemplo: páginas de inicialização de módulo) Exemplo 4-quadros: 1, 3, 4, 5 1 2, 3, 4, 1, 2, 5, 1, 2, 1 1 1 1 1 1 5 2 2 2 2 2 2 2 3 3 5 5 4 4 4 4 3 3 3 8 falhas de página (FIFO 10) 25 Implementação LRU (1): Contador Toda entrada na tabela de páginas tem um campo de tempo de uso (contador); Quando a página é referenciada, cópia o clock da CPU para esse campo ◦ O clock da CPU é mantido em um registrador e incrementado com todo acesso a memória Necessário trocar uma página, busca a página com o tempo mais antigo Desvantagem: ◦ Busca o tempo, atualiza o campo tempo de uso (escreve na memória) Necessário suporte de hardware 26 Implementação LRU (2): Pilha Mantém uma pilha do número de páginas em um lista duplamente encadeada Se uma página é referênciada, move para o topo A página menos recentemente usada vai para parte inferior Após Via hardware ocorre a atualização da pilha 27 Implementação LRU (3): Bit de referência Pode ser implementado por: Hardware Campos extras para armazenar o valor do contador na tabela de páginas; Após cada referência à memória, o valor do contador é armazenado nesse campo adicional da tabela de páginas; Quando ocorre falta de página S.O. => examina todos os campos dos contadores da tabela de página a fim de encontrar o menor dele; Qual a ordem desses bits ativos? Qual será removido? 06/04/09 28 Implementação LRU (4): Byte Solução: Contadores em software associado a páginas e utilizar o algoritmo aging (página com menor contador é removida); Bits R para páginas 0-5 clock tick 0 101011 Contadores clock tick 1 110010 clock tick 2 110101 clock tick 3 100010 clock tick 4 011000 0 10000000 11000000 11100000 11110000 01111000 1 00000000 10000000 11000000 01100000 10110000 2 10000000 01000000 00100000 00100000 10001000 3 00000000 00000000 10000000 01000000 00100000 4 10000000 11000000 01100000 10110000 01011000 5 10000000 a) 01000000 b) 10100000 c) 01010000 d) 00101000 e) 06/04/09 29 Algoritmo da segunda Chance Uma aproximação de LRU: ◦ Cada página tem um bit de referência (ref_bit), inicialmente = 0; ◦ Quando a página é referenciada, ref_bit =1 (pelo hardware) Mantém um ponteiro para próxima vítima (candidato); ◦ Quando escolhe uma página para substituir, verifica ref_bit da vítima: Se ref_bit == 0, troca Senão configura ref_bit = 0 Deixa a página na memória (segunda chance), Move o ponteiro para próxima página, Repete até encontrar uma vítima. 30 Algoritmo da segunda Chance 31 Algoritmo da segunda Chance Segunda chance melhorado ◦ Considere os bits R e M como um par ordenado; ◦ S.O. inspeciona todas as páginas e as separa em 4 categorias, com base nos valores dos bits R e M: Classe 0 => não referenciada, não modificada; Classe 1 => não referenciada, modificada; Classe 2 => referenciada, não modificada; Classe 3 => referenciada, modificada; ◦ Examina a classe à qual pertende e substitui a primeira página encontrada na classe não vazia mais baixa. 06/04/09 32 Algoritmo baseado em contagem Guarda um contador de número de referência que tem ocorrido em cada página Algoritmo LFU (Least Frequently Used): retira página com menor contador ◦ Página com menor contador não é usada frequentemente ◦ Problema: alguma página for usada muito frequentemente no início do processo, mas não for mais usada permanece na memória. Exemplo: Matriz Algoritmo MFU (Most Frequently Used): retira a página com mais alto contador ◦ Baseada no argumento de que a página com menor contagem provavelmente acabou de ser trazida para memória e ainda não está sendo usada. ◦ Problema: código de um módulo ou subrotina usado raramente, a MFU considera um bom candidato a não ser eliminado. 33 Alocação de Quadros Alocação igual: Todos os processo tem o mesmo número de quadros ◦ m quadros e n processos cada processo tem m/n quadros Alocação proporcional: Aloca de acordo com o tamanho do processo S = tamanho do processo M= número total de quadros Prioridade: Usa alocação proporcional para relação do tamanho 34 Alocação de Quadros: Global Se uma falha de página ocorre e não há quadro livre, há necessidade de obter um espaço livre: Substituição Global ◦ Processo seleciona um quadro a ser substituído de um conjunto de todos os quadros; ◦ Um proceso pode tirar um quadro de outros processos; ◦ Normalmente usado em SO. Vantagem: ◦ Melhor throughput (processo pode usar qualquer quadro avaliado) Desvantagem: ◦ Um processo não pode controlar sua própria taxa de pagefault. 35 Alocação de Quadros: Local Substituição Local ◦ Cada processo seleciona um quadro de seu conjunto de quadros alocados; Vantagem ◦ Cada processo tem seu próprio compartilhamento de quadros, não interfere no desempenho de outros processos. Desvantagem ◦ processo pode sofrer de altas taxas de pagefault embora há quadros livres disponíveis para outros processos 36 Thrashing O que ocorre se um processo não tem quadros suficientes para manter seu conjunto de páginas ativas na memória? A Taxa Page-fault é muito alta: ◦ Baixo uso de CPU, o qual ◦ Faz o SO pensar que precisa aumentar o grau de multiprogramação, então ◦ O SO admite outros processo ao sistema (piorando a situação) Thrashing ≡ um processo esta realizando thrashing se estiver gastando mais tempo paginando do que executando 37 Thrashing 38 Thrashing Para previnir o thrashing, deve-se fornecer a cada processo o número de quadros necessários Mas como saber quantos quadros um processo precisa? ◦ Um programa é composto por várias funções ou módulos ◦ Quando executa uma função, as referências a memória são feitas para instruções e variáveis locais da função e algumas variáveis globais ◦ Então, pode ser necessário guardar em memória alguma página necessária para executar a função ◦ Após finalizar a função, pode-se executar outra. Então, traz a página necessária para a nova função. ◦ Isso é conhecido como modelo de localidade 39 Modelo de Localidade O estado do modelo de localidade ◦ Quando um processo executa =>move de uma localidade para outra, onde uma localidade é um conjunto de páginas que são ativamente usada em conjunto. Lembre-se ◦ Localidade não é restrito a módulos e funções, é mais geral. ◦ Pode ser um segmento de código em uma função => exemplo, instruções em várias páginas ◦ Localidade de um programa pode sobrepor ◦ Localidade é a maior razão do sucesso de paginação sobre demanda Como podemos saber o tamanho de uma localidade? Usando o modelo de conjunto de trabalho 40 Modelo Conjunto de Trabalho O conjunto de páginas mais recentemente referênciada na memória ∆ => janela do conjunto de trabalho (working set – WS) ◦ Em cada referência, uma nova referência é adicionada no conjunto, senão for mais usada sai do conjunto; Exemplo: ∆ = 10 Tamanho de WS em T1 é 5 páginas, Em T2 é 2 páginas 41 Modelo Conjunto de Trabalho A precisão do modelo WS depende da escolha de ∆ ◦ Se ∆ é muito pequeno, não abrangerá a localidade inteira; ◦ Se ∆ é muito grande, poderá sobrepor várias localidades; ◦ Se ∆ = ∞ ⇒ um conjunto com todas as páginas referenciadas durante a execução. Usando modelo WS ◦ O SO monitora o WS de cada processo; ◦ Ele aloca um número de quadros suficiente para fornecer o tamanho do seu conjunto de trabalho; ◦ Se houver quadros extras suficiente, outro processo poderá ser iniciado. 42 Modelo Conjunto de Trabalho Manter uma janela do conjunto de trabalho inteira é custoso Solução: ◦ Approximação com um intervalo de tempo e um bit de referência (ref_bit é configurado com 1 quando a página é referenciada): Exemplo: ∆ = 10.000 referências a memória 43 Modelo Conjunto de Trabalho Exemplo: ∆ = 10.000 referências a memória ◦ Interrupção do temporizado a cada 5000 referências ◦ Quarda na memória 2 bits para cada página ◦ Quando um interrupção ocorre, copia o ref_bit na memória e reinicia o ref_bit; ◦ Quando ocorre page fault, verifica os 3 bits (ref_bit, 2 na memória) Se qualquer um deles for 1 ⇒ a página foi usada nas ultimas 10.000 a 15.000 referências coloca a página no conjunto de trabalho 44 Modelo Conjunto de Trabalho Mais importante é o seu tamanho WSSi ≡ o tamanho do conjunto de trabalho de um processo Pi ◦ O número de páginas referenciadas mais recente ∆ m ≡ tamanho da memória em quadros D = Σ WSSi ≡ total de quadros demandados Se D > m ⇒ Thrashing Política: Se D > m, então suspende um dos processos ◦ Manter o WS é custoso. Mas existe alguma forma de controlar o thrashing? 45 Modelo Conjunto de Trabalho Monitorar a taxa de page-fault e aumentar/decrementar alocação de acordo com: ◦ Determine um intervalo aceitável da taxa page-fault ◦ Se a taxa atual ultrapassar o limite, aloca outros quadros, ◦ Se ficar abaixo remove quadro 46 Alocação do Kernel na Memória Tratado diferentemente da memória de usuário: ◦ O Kernel solicita memória para estruturas de tamanho variado Descritores do processo(PCB), semáforo, descritores de arquivos, etc. Pode ser menor que uma página ◦ Algumas regiões da memória para kernel precisa ser contígua Alguns dispositivos interage diretamente com a memória física sem usar memória virtual 47 Kernel: Sistema Buddy Aloca a memória de tamanho de segmento fixo , consistindo em páginas fisicamente contíguas; Memória alocada usando um alocador de potência de tamanho 2 (4KB, 8KB, 16 KB) ◦ Satisfaz requisições em unidade de tamanho de potência de 2 ◦ Requer arredondamento Ex. 17 KB requesitado será arredondado para 32 KB (fragmentação) ◦ Quando alocação é menor precisa então ser avaliada, criando 2 buddies de potência de 2 Continua até apropriado tamanho satisfazer a requisição ◦ Os buddies pode ser combinados para formar segmentos maiores (união) 48 Kernel: Sistema Buddy 49 Kernel: alocação Slab Alocação ◦ Cria caches =>cada consistindo de um ou mais slabs ◦ Slab é uma ou mais páginas contiguas fisicamente Uma simples cache para cada estrutura de dados do kernel ◦ Cada cache é preenchida com objetos – instanciações da estrutura de dados ◦ Objetos são inicialmente marcados como livre ◦ Quando armazena estrutura, objeto é marcado como usado ◦ Benefícios Rápida alocação, não há fragmentação 50 Kernel: alocação Slab http://www.ibm.com/developerworks/linux/library/l-linux-slab-allocator/ 51 Memória Virtual e Mapeamento de Arquivos A MV permite mapear um arquivo para endereço de espaço de memória de um processo Como isso ocorre? ◦ Uma parte do arquivo do tamanho de uma página é lida do sistema de arquivos para a página física Subsequentes leitura/escrita ao arquivo são tratadas como acesso à memória ◦ Ex: mmap() do sistema Unix Porque? ◦ Operações de E/S no arquivo são tratadas como acesso a memória Simplifica ◦ Eficiente: acesso a memória é menos custoso que uma chamada de E/S ◦ Uma forma de implementar compartilhamento de memória para comunicação interprocessos 52 Memória Virtual e Mapeamento de Arquivos Arquivo mapeado na memória permite que vários processos mapeie o mesmo arquivo; Permite que páginas na memória sejam compartilhadas; O Win XP implementa compartilhamento de memória usando essa técnica ; O Unix e Linux utiliza o mmap ( ) para mapeamento e a chamada shmget ( ) e shmat ( ) para a memória compartilhada 53 Considerações Impacto na seleção do tamanho da página ◦ Fragmentação ◦ Tamanho da tabela de página ◦ Overhead E/S Pré-paginação ◦ Trazer para memória de uma só vez todas as páginas necessárias: Reduz o número de page faults nos processos iniciados Mas pode acontecer de muitas páginas trazidas para memória não serem usadas Ex. Solaris (apenas para arquivos pequenos) 54 MV: Estrutura de Programa Programa em Java ◦ int data [128][128]; ◦ Cada linha é armazenada em uma página; quadros alocados <128 ◦ Quantas page faults acontece em cada programa? ◦ Programa 1 for (j = 0; j < 128; j++) for (i = 0; i < 128; i++) data[i][j] = 0; #page faults: 128 x 128 = 16.384 55 MV: Estrutura de Programa Programa em Java ◦ int data [128][128]; ◦ Programa 2 for (i = 0; i < 128; i++) for (j = 0; j < 128; j++) data[i][j] = 0; #page faults: 128 ◦ Todas as palavras são zeradas antes de iniciar a próxima página. 56 Exemplo: Windows XP Usa paginação por demanda com clustering ◦ O clustering trata não só a página que falhou mas várias páginas após essa Processo criado ◦ Recebe o working set mínimo: garantia na memória (~50 páginas) ◦ working set máximo: máximo na memória (345 páginas) Automático do Working set ◦ Memória livre no sistema falha permite um limiar, remove páginas de um processo que mais que seu mínimo no working set 57 Sumário Memória virtual: mapea um maior espaço de endereço lógico dentro de um espaço menor na memória física: Page fault: ocorre quando uma página referenciada não está na memória Algoritmos de substituição: FIFO, OPT, LRU, Segunda chance Alocação de quadros: global e local Thrashing: pouco uso de CPU Modelo working-sets Memória para Kernel memory 58 Simulação – Atividade 4 1. O SOsim é um software educacional utilizada para simulação de alguns algoritmos empregados pelo Sistema Operacional para controlar os recursos computacionais. • O download pode ser http://www.training.com.br/aso/ feito em • Utilize esse simulador para realizar a atividade 4 disponível no Col. • Essa atividade deve ser entregue pelo email: [email protected] até o dia 04/08 06/04/09 59 Exercícios 1. Quais os benefícios oferecidos pela técnica de memória virtual? Como este conceito permite que um programa e seus dados ultrapassem os limites da memória principal? 2. Diferencie página virtual de uma página física. 3. Descreva como ocorre a fragmentação interna em um sistema que implementa paginação. 4. Um sistema com gerência de memória virtual por paginação possui tamanho de página com 512 posições, espaço de endereçamento virtual com 512 páginas endereçadas de 0 à 511 e memória real com 10 páginas numeradas de 0 à 9. O conteúdo atual da memória real contém apenas informações de um único processo e é descrito resumidamente na tabela abaixo: 06/04/09 60 Exercícios a)Considere que a entrada da tabela de páginas contém, além do endereço do frame, também o número da página. Mostre o conteúdo da tabela de páginas deste processo. b)Mostre o conteúdo da tabela de páginas após a página virtual 9 ser carregada na memória a partir do endereço real 0 e a página virtual 34 ser substituída pela página virtual 12. c)Qual endereço físico está associado ao endereço virtual 4613? 06/04/09 61 Exercícios 5. Descrever como funcionam dos seguintes algoritmos de troca de páginas: a) Not Recently Used Page Replacement-NRU; b) Aging; c) Segunda Chance; 06/04/09 62 Exercícios - Solução a) NPV Quadro 9 4 10 9 34 3 65 7 b) NPV Frame 10 9 9 0 12 3 65 7 c) • O endereço virtual 4613 encontra-se na página virtual 9 (4613/512), que inicia no endereço virtual 4608. • Como o deslocamento dentro do endereço virtual é 5, o endereço físico é a soma deste mesmo deslocamento ao endereço inicial do frame 2048 (tabela), ou seja, 2053. 06/04/09 63