Fundamentos de Sistemas Operacionais Aula 19: Memória Virtual: Introdução Diego Passos Última Aula Paginação ● Método de gerenciamento de memória mais usado hoje. ● Espaço de endereçamento de um processo é dividido em páginas. ○ Pequenos blocos de tamanho fixo. ● Páginas são mapeadas em quadros da memória principal. ○ Quadros alocados para um processo não precisam ser contíguos. ● Não há fragmentação externa. ● Alocação dos processos é simples. Memória Virtual: Introdução Motivação ● Sistemas monoprogramados são ineficientes. ○ Apenas um processo ativo por vez. ○ Alta probabilidade dos recursos ficarem ociosos. ■ Processador, por exemplo. ● Sistemas multiprogramados são mais eficientes. ○ Vários processos ativos simultaneamente. ○ Alta probabilidade de ao menos um processo utilizar cada recurso a cada momento. ● Quanto maior o número de processos em memória, maior a eficiencia. ○ Maior o grau de multiprogramação. Motivação (mais) ● O SO procura permitir o uso do maior número possível de processos simultaneos. ○ Limitado pelo tamanho da memória principal. ○ Processos devem estar carregados na memória. ● Tamanho da memória principal limita também o tamanho dos processos que podem ser executados. ○ Espaço de endereçamento deve ser menor ou igual ao tamanho da memória. ○ Problema comum em computadores antigos. ■ Mesmo hoje, ocorre em aplicações científicas. Memória Virtual ● Solução para as limitações da memória principal. ● SO aumenta a capacidade de armazenamento da memória principal usando a memória secundária. ○ Simula que a máquina tem mais memória principal do que realmente possui. ● Processo ainda precisa ter seu espaço de endereçamento em memória principal para executar. ○ Mas temporariamente pode ser levado para memória secundária para liberar espaço. ○ Operação de swap. ○ Escalonador de médio prazo decide quando e em que processos aplicar o swap. Memória Virtual (mais) ● Implementada pela grande maioria dos SOs modernos. ● No Linux, usuário é instruído a criar uma partição de swap. ○ Espaço em disco reservado especificamente para uso como memória virtual. ● No Windows, SO cria um arquivo comum no disco. ○ Muitas vezes chamado Arquivo de Paginação. ● A memória virtual pode ser usada com qualquer esquema de gerenciamento de memória. ○ No entanto, maiores vantagens são obtidas em conjunto com a paginação. ■ Esquema denominado de paginação por demanda. ○ Permite que processos estejam parcialmente em memória principal. Paginação sob Demanda Ideia ● Combinação da paginação com a memória virtual. ● Algumas páginas de um processo podem não estar em quadros da memória principal. ○ Ao invés, eles são colocados na área de swap na memória secundária. ● Quando processo tenta acessar memória, MMU consulta a tabela de páginas. ○ Se o bit de validade é 1, página está em memória principal. ■ Acesso é feito normalmente. ○ Caso contrário, interrupção é gerada. ■ SO vai buscar a página na área de swap. ■ Página é copiada para a memória principal. Falta de Página ● Evento no qual a MMU não encontra uma página necessária em memória principal. ● Após a interrupção gerada: ○ SO faz requisição de leitura do disco. ■ Operação de E/S (portanto, lenta). ○ Processo não pode executar. ■ SO o coloca no estado suspenso. ○ Quando E/S termina, processo é colocado novamente na fila de aptos. ■ Sua tabela de páginas é atualizada. ○ Eventualmente, escalonador recoloca o processo em execução. Falta de Página (mais) ● Se a memória está completamente ocupada, SO precisa mover uma página para memória secundária. ○ Operação de swap. ● Registrador IP do processo pode ter que ser consertado. ○ Instrução que gerou falta de página não foi executada com sucesso. ○ Ela precisa ser repetida. Política de Alocação de Páginas ● O nome "Paginação sob Demanda" vem do fato das páginas serem alocadas conforme necessário. ● Inicialmente, apenas a página "inicial" do processo é necessária. ○ Página que contém as primeiras instruções. ● Ao longo da execução, faltas de página ocorrem. ○ Novas páginas são trazidas para memória principal. ● No início, falta de páginas acontece com frequência. ○ Espera-se que após um tempo a situação se estabilize. ○ Quando houver um número razoável de páginas carregadas. Política de Alocação de Páginas (mais) ● Nem sempre esta é uma boa estratégia. ○ Pode ser mais interessante proativamente trazer mais páginas. ○ Tentar prever quais serão necessárias em um futuro próximo. ■ Princípio da localidade referencial. ○ Se as previsões forem boas, haverá poucas faltas de página. ■ Menos necessidade de acesso a disco. Princípio da Localidade Referencial ● Prega que dados manipulados em um programa tendem a ser próximos. ○ Em termos temporais. ■ Variável acessada agora tem grande probabilidade de ser acessada novamente em breve. ○ Em termos espaciais. ■ Variáveis próximas a variável sendo acessada agora, têm grande probabilidade de serem acessadas em breve. ● SO pode usar este princípio para trazer páginas antes que elas sejam necessárias. ○ Exemplo: trazer as duas páginas subsequentes à atualmente requisitada. Quantas Páginas Alocar? ● Quando há memória disponível, SO pode alocar quantas páginas forem necessárias para um processo. ○ Processo pode ter todas as suas páginas carregadas. ● Mas quando há muitos processos ativos, pode não ser possível manter todos os processos completos em memória. ● Neste caso, quantas páginas devem ser dadas a cada processo? ● Três abordagens: ○ Divisão igualitária: número de páginas é igual para todos os processos. ○ Divisão proporcional: número de páginas é proporcional ao tamanho do processo. ○ Não levar número de páginas em consideração. Desempenho da Paginação sob Demanda Dois Tempos de Acesso ● Tempo de acesso à memória dependeda localização da página. ● Se a página está em memória, acesso é rápido. ● Se acontece falta de página, o tempo é muito longo. ○ E também variável. ■ Depende do tempo de acesso à disco. ■ Depende de se há ou não espaço em memória principal. ■ Depende do tempo que o processo demora para ser escalonado novamente. ● A pergunta é: qual o tempo médio de acesso à memória? Tempo Médio de Acesso ● Também conhecido como tempo efetivo de acesso à memória. ● Tempo médio depende de três fatores: ○ t_am: tempo de acesso à memória quando não há falta de página. ○ t_tf: tempo de acesso quando há falta de página. ○ p: probabilidade de ocorrência de falta de página. ● Neste caso, o tempo médio é dado por: t_e = (1-p)*t_am + p*t_tf Reduzindo o Tempo de Acesso ● O tempo de acesso a memória quando a página está disponível pode ser considerado uma constante. ○ Depende das características do hardware. ● Tempo de tratamento de falta de página depende do tempo de acesso a área de swap. ○ Velocidade do disco. ○ Overhead do SO. ○ Alguns sistemas tentam melhorar este tempo. ■ Exemplo: UNIX, com uso de partições de swap dedicadas. ○ No entanto, em geral o efeito é relativamente baixo. ■ Disco é muito lento. Reduzindo o Tempo de Acesso (mais) ● Maior potencial de redução está na probabilidade de ocorrência de falta de páginas. ● Idealmente, SO deseja manter p = 0. ○ Só é possível se há memória física suficiente para acomodar todos os processos. ● É possível reduzir p através de métodos inteligentes de substituição de páginas. ○ Quando uma página é trazida para memória, outra tem que ser retirada. ○ Se retirarmos a página errada, ela logo será necessária. ■ Causando outra falta de página. Algoritmo de Substituição de Página ● Usado sempre que uma página deve ser escolhida para sair da memória principal. ○ Ou seja, falta de página com todos os quadros ocupados. ● Objetivo: escolher a Página Vítima. ○ Página a ser removida em favor da página necessária. ● Página vítima deve ser uma não necessária em um futuro próximo. ● Fatores relevantes na escolha: ○ Modificação ou não da página. ■ Páginas modificadas são piores candidatos. ○ Histórico de acessos. ■ Páginas recentemente acessadas tem mais chance de próximos acessos. Bits de Controle de Página ● SOs mantém na tabela de páginas bits de controle associados com cada página. ● Indicam características da página que auxiliam no processo de substituição. ● Há três bits comumente encontrados: ○ Bit de sujeira. ○ Bit de referência. ○ Bit de tranca. Bit de Sujeira ● Também chamado de dirty bit. ● Indica se uma página sofreu alterações. ○ Em relação ao momento em que ela foi trazida para memória principal. ● Caso a página tenha sido alterada, SO terá que copiá-la novamente para a área de swap ao removê-la da memória principal. ● A cada requisição de escrita à página, seu bit de sujeira é alterado para 1 pela MMU. ● Quando uma página é trazida para memória, o SO inicializa este bit com 0. Bit de Referência ● Também chamado de reference bit. ● Permite ao SO estimar a quanto tempo uma página não é acessada. ● Quando SO traz uma página para a memória, bit de referência é setado para 1. ● A cada acesso à página, MMU altera este bit para 1. ● De tempos em tempos, SO zera todos os bits de referência. ● Se uma página tem bit de referência em 0, SO tem uma ideia do tempo desde o último acesso. Bit de Tranca ● Também chamado de lock bit. ● Indica que uma página não pode ser removida da memória principal. ● Exemplo de utilização: operação de E/S. ○ Processo requisita leitura de arquivo. ○ Buffer para recepção da leitura pertence a página P, alocada no quadro Q. ○ DMA recebe endereço físico, e não lógico. ○ Se o SO remove a página P, DMA continua escrevendo o resultado no quadro Q. ■ Possivelmente sobrescrevendo dados de outro processo. Revisão Para Lembrar ● Memória virtual: ○ Método que aumenta a capacidade da memória principal. ○ Utiliza a memória secundária. ● Paginação sob Demanda: ○ Une paginação e memória virtual. ○ Processos podem estar parcialmente em memória. ○ Páginas trazidas conforme a necessidade. ■ Falta de página. ● Substituição de Páginas: ○ Objetivo. ○ Critérios.