Sistemas Operacionais Gerência de Memória Memória virtual Edson Moreno [email protected] http://www.inf.pucrs.br/~emoreno Slides baseados nas apresentações dos prof. Tiago Ferreto e Alexandra Aguiar Introdução Problema Memória principal pode não comportar todos os processos ativos Solução Emprego de memória virtual Memória virtual Esquema de armazenamento no qual a memória secundária é endereçado como parte da memória principal Gerência de Memória Virtual Mapeamento Gerência de Memória Virtual Mapeamento Processador Apenas executa/opera no espaço de endereçamento virtual Deve existir mecanismo que transforme os endereços virtuais em reais. Mapeamento Permite tradução um endereço do espaço virtual para espaço real. Sistemas modernos Tarefa de tradução de endereços virtuais é realizada por Hardware + sistema operacional Não deve comprometer desempenho Deve ser transparente a usuários e suas aplicações. Gerência de Memória Virtual Mapeamento Tradução Unidade de gerência de memória (Memory Management Unit - MMU) em HW Acionado sempre que se faz referência a um endereço virtual Depois de traduzido Endereço real pode ser utilizado para o acesso à memória principal. Cada processo tem o seu espaço de endereçamento Responsabilidade do mecanismo de tradução Manter tabelas de mapeamento exclusivas para cada processo Relacionar os endereços virtuais do processo às posições na memória real Gerência de Memória Virtual Mapeamento Gerência de Memória Virtual Mapeamento A tabela de mapeamento Estrutura de dados existente para cada processo. Quando um determinado processo está sendo executado Tradução dos endereços baseado na tabela de mapeamento do processo Se um outro processo vai ser executado Sistema deve passar a referenciar a tabela do novo processo. A troca de tabelas de mapeamento é realizada através de um registrador Indica a posição inicial da tabela corrente Da mudança de contexto Registrador é atualizado com o endereço da nova tabela Gerência de Memória Virtual Mapeamento Tabelas mapeiam blocos de dados Tamanho determina o número de entradas existentes nas tabelas de mapeamento. Quanto maior o bloco Menos entradas existem nas tabelas de mapeamento Menor o tamanho das tabelas de mapeamento Técnicas empregadas pelos sistemas operacionais Paginação Segmentação Segmentação com paginação Gerência de Memória Virtual Memória Virtual por Paginação A memória virtual por paginação Blocos de mesmo tamanho nos espaços de endereçamento Virtual (memória secundária) Páginas virtuais Real (memória principal) Páginas reais / quadros Tabela de página Individual a cada processo possui Cada página virtual do processo Presente na tabela (entrada na tabela de páginas - ETP) Contém informações de mapeamento Permitem ao sistema localizar a página real correspondente Gerência de Memória Virtual Memória Virtual por Paginação Gerência de Memória Virtual Memória Virtual por Paginação Além da informação sobre a localização da página virtual Bit de validade (valid bit) Indica se uma página está ou não na memória principal. Zero indica página virtual não presente na memória principal Um indica a página está localizada na memória. Bit verificado sempre quando de uma requisição Ausência de um página na MP acarreta uma falha (page fault) Sistema transfere a página da memória secundária para a principal Realizando uma operação de E/S conhecida como paginação. Gerência de Memória Virtual Memória Virtual por Paginação Número de page faults gerado por um processo depende de: Como o programa foi desenvolvido Qual a política de gerência de memória implementada O overhead (sobrecarga) gerado pelo mecanismo de paginação Inerente à gerência de memória virtual Excesso de operações de E/S pode comprometer o desempenho Gerência de Memória Virtual Memória Virtual por Paginação Quando ocorre um page fault Processo em questão passa do estado de execução para espera Aguarda até que a página seja transferida para a memória principal. Na troca de contexto Tabela de mapeamento é salva Informações do novo processo escalonado são restauradas. Após a transferência da página para a memória principal Processo é recolocado na fIla de processos no estado de pronto Quando reescalonado poderá continuar sua execução. Gerência de Memória Virtual Memória Virtual por Paginação Gerência de Memória Virtual Políticas de Busca de Páginas MMU Permite a execução de um programa sem que seu código esteja completamente residente na memória principal Política de busca determina quando uma página deve ser carregada. Estratégias para este propósito Paginação por demanda Paginação antecipada. Paginação por demanda Páginas transferidas da memória secundária para a principal quando referenciadas. É possível que partes não executadas do programa nunca sejam carregadas Paginação antecipada Além da página referenciada, carrega páginas que podem ou não ser necessárias Permite economia de tempo, mas pode causar perda de tempo e desperdiçar memória Gerência de Memória Virtual Políticas de Alocação de Páginas A política de alocação de páginas Determina quantos frames cada processo pode manter na memória principal. Alternativas de alocação Fixa Processo tem um número máximo de frames que pode ser utilizado Caso o número de páginas reais seja insuficiente Página do processo deve ser descartada Variável Número máximo de páginas pode variar durante sua execução Emprega sua taxa de paginação e da ocupação da memória principal Gerência de Memória Virtual Translate Lookaside Buffer (TLB) Gerência de memória virtual Mapeamento implica em pelo menos dois acessos à memória principal à tabela de páginas à própria página. Maioria das aplicações Referencia um número reduzido de frames na memória principal Princípio da localidade Temporal e espacial Uma pequena fração da tabela de mapeamento é realmente necessária. Gerência de Memória Virtual Translate Lookaside Buffer (TLB) Translation Lookaside Buffer (TLB) Permite mapear endereços virtuais em endereços físicos Pode não requer acesso à tabela de páginas Traduções prévias podem estar armazenadas na TLB Funciona como uma memória cache Foco está na resposta a endereços virtuais previamente buscados e traduzidos Mantendo apenas as traduções dos endereços virtuais das páginas mais recentemente referenciadas Utiliza o esquema de mapeamento associativo Gerência de Memória Virtual Translate Lookaside Buffer (TLB) Tradução de um endereço virtual Verifica primeiro o TLB Caso o endereço virtual (tag) esteja na cache Endereço físico é utilizado Eliminando o acesso à tabela de mapeamento (TLB hit). Caso o endereço não esteja na cache Tabela de mapeamento deve ser consultada (TLB miss). Se a página estiver na memória principal Tradução do endereço virtual é colocada no TLB Endereço é traduzido. Caso contrário Ocorre um page fault A página é carregada para a memória A tabela de mapeamento é atualizada Informação é carregada para a TLB. Gerência de Memória Virtual Translate Lookaside Buffer (TLB) ENDEREÇO LÓGICO TABELA DE PÁGINAS PAGE FAULT Disco TLB MISS PAGE HIT MISS Envia dado para a CPU TLB TLB HIT MEMÓRIA CACHE HIT CACHE CACHE MISS MEMÓRIA PRINCIPAL HIT CPU Gerência de Memória Virtual Swapping em Memória Virtual A técnica de swapping Pode ser aplicada em sistemas com memória virtual Permite aumentar o número de processos que compartilham a memória principal Aumenta o grau de multiprogramação do sistema. Empregando quando Existem novos processos para serem executados Não há memória principal livre suficiente para alocação Sistema utiliza o swapping Selecionando um ou mais processos para saírem da memória Oferecer espaço para novos processos. Depois de escolhidos Sistema retira os processos da memória principal para a secundária (swap out) Páginas ou segmentos gravados em um arquivo de swap (swap file) Gerência de Memória Virtual Swapping em Memória Virtual Gerência de Memória Virtual Swapping em Memória Virtual Políticas que podem ser aplicadas na escolha dos processos Principalmente escolhe considerando o estado do processo e sua prioridade. Com base no estado dos processos Seleciona, inicialmente, os processos que estão no estado de espera. Seleção pode ser refinada em função do tipo de espera de cada processo. Com base na prioridade É possível que não existam processos suficientes no estado de espera para atender as necessidades de memória do sistema. Escolhe os processos no estado de pronto com menor prioridade Gerência de Memória Virtual Swapping em Memória Virtual O arquivo de swap Compartilhado por todos os processos que estão sendo executados no ambiente. Quando um processo é criado Sistema reserva um espaço no arquivo de swap para o processo. Quando um processo é eliminado Sistema libera a área alocada. Gerência de Memória Virtual Thrashing Thrashing Excessiva transferência blocos entre a memória principal e a secundária. Na memória virtual por paginação Thrashing ocorre em dois níveis No próprio processo Excessiva paginação ocorre devido ao elevado número de page faults Processo passa mais tempo esperando por páginas do que executado No sistema Processos competindo por memória principal que espaço disponível Solução o Reduzir o número de páginas de cada processo na memória Gerência de Memória Virtual Thrashing Desempenho da máquina Começa a diminuir a partir de um determinado número de processos ativos Característica dinâmica que depende: Da arquitetura da máquina Do tamanho da MP Do número de processos ativos Do tipo de processos que estão ativos (io-bound, cpu-bound) Taxa de utilização do processador cai exponencialmente quando em trashing