Quando a capacidade de endereçamento do processador não corresponde à MP instalada, os endereços gerados são endereços virtuais (abstrações para endereços não reais) Na maioria dos SOs modernos as aplicações e processos sempre fazem referências à memória usando endereços virtuais. ◦ Nestes casos a memória virtual está sempre em uso Mapeamentos ◦ Primeiro caso: Capacidade de endereçamento menor que a memória física instalada Mapeamento feito sobre uma “janela” ou subgrupo da MP ◦ Segundo caso: Capacidade de endereçamento = memória instalada Mapeamento trivial. Cada endereço corresponde à uma posição na memória ◦ Terceiro caso: Capacidade de endereçamento > que memória instalada Solução é uso de memória virtual O processador faz uso de endereços virtuais e o Gerenciador de Memória Virtual se encarrega de fazer os mapeamentos. Não podendo ficar limitado à quantidade de memória física instalada e nem à baixa velocidade de acesso da memória secundária (virtual), utiliza-se uma hierarquia: Se os dados e instruções que o processador precisa estão na MP, não há problema... O acesso é feito de imediato Se os dados que o processador precisa estão endereçados na memória virtual o processamento é interrompido para que o gerenciador de memória traga os blocos necessários da memória secundária para a MP Programas tendem a se concentrar, a cada intervalo de tempo, em pequenas regiões dentro do espaço de endereçamento disponível. Isto faz com que todas as instruções (ou quase todas) estejam disponíveis na MP, diminuindo os acessos à Memória Secundária. Razões para existir condensação: ◦ Programas são escritos de forma seqüencial e as próximas instruções a serem executadas estão normalmente próximas à corrente ◦ Programas apresentam laços de repetição que são executados diversas vezes ◦ Dados são organizados seqüencialmente (por exemplo em vetores e tabelas) Custo médio por bit (relação entre MP e MS) Taxa de acerto – hit ratio (taxa em que os dados estão disponíveis diretamente na MP) Tempo médio de acesso (considerando acesso à MP e MS) Taxa de aproveitamento da MP (o ideal é que a MP não tenha espaços “vagos”) Swapping É a principal operação sobre as memórias virtuais. Consiste em movimentar um bloco entre os níveis da hierarquia de memória ◦ Um bom sistema de memória virtual deve tratar destas questões: Quando movimentar ? Onde colocar o bloco ? Qual o tamanho ideal de um bloco ? O mapa de memória pode ser implementado em registradores especiais de alta velocidade, na própria MP ou em memórias especiais. Geralmente contêm: ◦ Lista de espaços ocupados ◦ Lista de espaços vazios ◦ Endereços mapeados na MS O principal objetivo de se ter uma política de substituição de blocos é fazer com que a taxa de acertos seja maximizada (hit ratio) Quando um bloco referenciado não está disponível na MP ocorre uma condição conhecida como “acesso falho à memória” (memory fault) FIFO ( First-in-first-out) ◦ Seleciona para substituição o mais antigo bloco, ou seja, o que está há mais tempo na MP ◦ Vantagem: fácil de se implementar. Um nr de seqüência é associado a cada bloco quando ele é alocado na MP. Quando um bloco precisa ser substituído, basta eliminar o de menor seqüência. ◦ Desvantagem: Um bloco frequentemente utilizado pode ser substituído por ser o mais antigo (sendo o mais freqüentemente utilizado, as chances de ser o mais antigo aumentam) LRU (Least recently used) ◦ Seleciona para substituição o bloco menos recentemente utilizado pelo processador. ◦ Desvantagem: Dificuldade do SO manter uma estatística dos blocos menos recentemente utilizados. Estratégia possível é atribuir contadores (age registers) a cada bloco na MP. Toda vez que o bloco é referenciado seu contador é atualizado para o maior valor positivo. De tempos em tempos, todos os contadores são decrementados. O bloco menos recentemente utilizado é aquele cujo contador apresentar menor número. ◦ LFU (Least Frenquently Used): o controlador de cache escolhe o bloco que tem tido menos acessos (menos referências) por parte da CPU ◦ Escolha aleatória 16 Os blocos de memória podem ser organizados como segmentos ou como páginas. Um segmento pode ser considerado como um bloco de palavras seqüenciais logicamente relacionadas (sub-rotina, pilha, matriz) . Segmentos possuem tamanhos variáveis. Sua principal propriedade é a coesão Páginas tem tamanho fixo, sem preocupar com a coesão. Vantagem: ◦ Respeitam a modularidade e a lógica dos programas Desvantagem: Custo de se gerenciar o tamanho variável dos segmentos durante a alocação e a substituição Vantagem: ◦ Simplicidade de se gerenciar o tamanho fixo nas alocações e substituições (como tem tamanho fixo, basta trocar uma página por outro no “frame”) Desvantagem: ◦ Não respeitam a organização lógica dos programas. Tenta resolver as desvantagens dos dois modelos: ◦ Cada segmento é dividido em páginas de tamanho fixo