Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Aula 10 Capítulo 10 – Memória Virtual • 10.1 Aspectos básicos • 10.2 Paginação sob Demanda • 10.4 Substituição de página • 10.5 Alocação de quadros • 10.6 Thrashing Sistemas Operacionais com Java 10.1 Aspectos Básicos Silberschatz, Galvin e Gagne (c) 2003 • A memória virtual é uma técnica que permite a execução de processos que podem não estar inteiramente na memória. • Vantagens: – Um programa não ficaria limitado pela quantidade de memória física disponível; – Mais programas poderiam ser executados ao mesmo tempo, aumentando a utilização da CPU; – Menos operações de I/O seriam necessárias para carregar ou fazer a movimentação de programa de usuário para a memória, executando rapidamente. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Memória Virtual que é Maior do que a Memória Física Sistemas Operacionais com Java 10.1 Aspectos Básicos Silberschatz, Galvin e Gagne (c) 2003 • A memória virtual é a separação da memória lógica do usuário da memória física. • A memória virtual é implementada por intermédio da técnica de paginação sob demanda e também em um sistema com segmentação. • Paginação sob demanda é similar a um sistema com troca de processos (swapping). Sistemas Operacionais com Java 10.2 Paginação sob Demanda Silberschatz, Galvin e Gagne (c) 2003 • Os processos são armazenados na memória secundária (disco). • Quando um processo vai ser executado, ele é copiado para a memória. • Entretanto, em vez de copiar o processo todo na memória, usamos um mecanismo de cópia tardia: uma página nunca é copiada para a memória a menos que ela seja requerida. Sistemas Operacionais com Java 10.2 Paginação sob Demanda Silberschatz, Galvin e Gagne (c) 2003 • Como um processo é visto como uma sequência de páginas, e não como um grande espaço de endereçamento contíguo, o uso do termo troca é, nesse caso, tecnicamente incorreto. • Na troca de processos há a manipulação de processos inteiros, ao passo que um paginador manipula páginas de um processo. Sistemas Operacionais com Java 10.2.1 Conceitos Básicos Silberschatz, Galvin e Gagne (c) 2003 • Quando um processo vai ser carregado da memória, o paginador imagina quais páginas serão usadas antes que o processo seja descarregado novamente. • Em vez de carregar o processo inteiro, o paginador leva apenas as páginas necessárias para a memória. • Evitando a leitura de páginas que não serão utilizadas, diminuindo o tempo de troca e a quantidade de memória física necessária. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Transferência de uma Memória Paginada para o Espaço Contíguo Sistemas Operacionais com Java 10.2.1 Conceitos Básicos Silberschatz, Galvin e Gagne (c) 2003 • Precisamos de um suporte de hardware para fazer a distinção entre as páginas que estão na memória e as que estão no disco. • Pode ser utilizado nesse caso o esquema do bit válido-inválido. • Nesse caso o bit válido significa que a página associada está na memória e é legal. O bit inválido significa que a página não é válida, ou é válida mas está no disco. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Tabela de página quando algumas páginas não estão na memória principal Sistemas Operacionais com Java 10.2.1 Conceitos Básicos Silberschatz, Galvin e Gagne (c) 2003 • Marcar uma página como inválida não terá efeito se o processo nunca tentar acessar essa página. Pois carregamos todas e apenas as páginas que são de fato necessárias, aquelas que estão residentes na memória. • Mas o que acontece se o processo tenta usar uma página que não foi carregada na memória? • Causa uma interrupção de falta de página (page fault trap). Sistemas Operacionais com Java 10.2.1 Conceitos Básicos Silberschatz, Galvin e Gagne (c) 2003 • O hardware da paginação, ao traduzir o endereço através da tabela de página, observará que o bit inválido está ativo, irá gerar uma exceção para o SO. • Essa exceção é resultado da falha do SO, que é preciso ser corrigido através de um procedimento para tratar essa falta de página. E esse procedimento é simples. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Etapas no tratamento de uma falha de página Sistemas Operacionais com Java 10.4 Substituição de Página Silberschatz, Galvin e Gagne (c) 2003 • A substituição de páginas consiste no seguinte: quando não existe nenhum quadro livre, encontramos um que não está sendo usado no momento e o liberamos. • Podemos liberar um quadro gravando seu conteúdo no espaço de swap e alterar a tabela de página para indicar que a página não está mais na memória. E usar o quadro livre para armazenar a página na qual ocorreu a falta no processo. Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Necessidade de Substituição de Página Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • A substituição de página gera as seguinte tarefas: – Localizar a posição da página desejada no disco; – Encontrar um quadro livre: • Se houver um quadro livre, use-o. • Se não houver um quadro livre, use um algoritmo de substituição de página para selecionar um quadro vítima. • Envie o quadro vítima para o disco; mude as tabelas de página e quadro de acordo. – Ler a página desejada para o quadro (recém -) liberado; mudar as tabelas de página e quadro. – Reiniciar o processo do usuário. 10.4.1 Substituição de página básica Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Quando nenhum quadro estiver livre, duas transferências de página uma descarga e uma carga são necessárias. • Essa situação dobra o tempo de serviço de falta de página e aumenta o tempo efetivo de acesso proporcionalmente. 10.4.1 Substituição de página básica Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 Substituição de Página Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Para implementar a paginação sob demanda, é preciso resolver dois problemas: – É necessário definir um algoritmo de alocação de quadro; – E um algoritmo de substituição de páginas. 10.4.1 Substituição de página básica Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • É o algoritmo mais simples; • Associa a cada página o instante em que a página foi levada para a memória; • Para substituir uma página, a página mais antiga é escolhida; • Pode-se criar uma fila FIFO para manter todas as páginas na memória. E para substituir basta selecionar a que estiver no início da fila. 10.4.2 Substituição de página FIFO Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Fácil de entender e programar, mas seu desempenho nem sempre é bom; • A página substituída pode ser um módulo de inicialização que foi usado há muito tempo e não é mais necessário; • Por outro lado, ela pode conter uma variável muito usada que foi inicializada cedo e está em uso constante. 10.4.2 Substituição de página FIFO Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 10.4.2 Substituição de página FIFO Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Tem a menor taxa de falta de página possível paraum número fixo de quadros; • Substituir a página que não será usada pelo período mais longo. • É difícil de implementar, pois requer conhecimento futuro da string de referência. 10.4.3 Algoritmo de substituição ótimo Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 10.4.3 Algoritmo de substituição ótimo Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Substitui a página que não foi usada por mais tempo; • Associa a cada página a data que essa página foi usada pela última vez; • Quando é necessário substituir uma página, o algoritmo LRU seleciona a página que não foi usada pelo maior período de tempo. 10.4.4 Algoritmo de substituição LRU Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 10.4.4 Algoritmo de substituição LRU Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Como alocamos a quantidade fixa de memória livre entre os vários processos? • Se tivermos 93 quadros livres e dois processos, quantos quadros cada processo obterá? • O caso mais simples de memória virtual é o sistema monousuário. 10.5 Alocação de quadros Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Existem várias formas de resolver esse problema de maneira simples. • A estratégia básica é clara: o processo de usuário recebe qualquer quadro livre. • O problema difere quando a paginação por demanda é combinada com a multiprogramação, que aloca dois ou mais processos na memória ao mesmo tempo. 10.5 Alocação de quadros Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Não é possível alocar mais do que o número total de quadros disponíveis. • Mas existe também um número mínimo de quadros que pode ser alocado. A medida que o número de quadros alocados para cada processo diminui, a taxa de falta de página aumenta, tornando a execução do processo mais lenta. 10.5.1 Quantidade mínima de quadros Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Lembre-se de que, quando ocorre uma falta de página antes que a execução de uma instrução esteja concluída, a instrução deverá ser reiniciada, por isso é preciso ter quadros suficiente. • O número mínimo de quadros por processo é definido pela arquitetura, enquanto o número máximo é definido pela quantidade de memória física disponível. 10.5.1 Quantidade mínima de quadros Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • A forma mais fácil de dividir m quadros em n processos é dar a todos uma parcela igual de m/n quadros. O esquema é chamado de alocação igual. • Mas existem processos que precisam de diferentes quantidades de memória e para resolver esse problema, pode-se usar a alocação proporcional. 10.5.2 Algoritmos de alocação Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Outro fator importante na forma em que os quadros são alocados aos vários processos é a substituição de página. • Com vários processos competindo por quadros, é possível classificar os algoritmos de substituição de páginas em duas amplas categorias: substituição global e substituição local. 10.5.3 Alocação global versus local Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Substituição Global – permite que um processo selecione um quadro de substituição do conjunto de todos os quadros, mesmo se esse quadro estiver alocando no momento a algum outro processo. • Um processo pode tirar um quadro de outro. 10.5.3 Alocação global versus local Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Substituição local – requer que cada processo selecione somente a partir de seu próprio conjunto de quadros alocados. • Com uma estratégia de substituição local, o número de quadros alocados para um processo não muda. • Com a substituição global, pode acontecer de um processo selecionar apenas quadros alocados a outros processos, aumentando assim o n° de quadros alocados a ele. 10.5.3 Alocação global versus local Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Thrashing de um processo é quando ele está consumindo mais tempo em substituição de páginas do que na execução de seu código. • Fornecer um número suficiente de quadros para cada processo, de modo a evitar a paginação excessiva, pode requerer a troca e o escalonamento de processos. 10.6 Thrashing Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • O SO monitora a utilização de CPU. – Se a utilização de CPU for muito baixa, aumenta o grau de multiprogramação introduzindo um novo processo sistema. • Um algoritmo de substituição de páginas global é usado. – Se um processo entra em uma nova fase de execução que precise de mais quadros. Ele começa a gerar faltas de páginas e retira quadros de outros processos. Entretanto, esses processos precisam dessas páginas e acabam falhando, pegando quadros de outros processos. 10.6.1 Causa do Thrashing Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Esses processos com faltas de página devem utilizar o dispositivo de paginação para carregar e descarregar páginas. • À medida que elas entram na fila para o dispositivo de paginação, a fila de processos prontos vai esvaziando. • Enquanto os processos esperam pelo dispositivo de paginação, a utilização de CPU diminui. 10.6.1 Causa do Thrashing Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • O escalonador de CPU vê a redução da utilização de CPU e aumenta o grau de multiprogramação como resultado disso. • E começa a falta de página novamente. 10.6.1 Causa do Thrashing Sistemas Operacionais com Java Silberschatz, Galvin e Gagne (c) 2003 • Podemos limitar os efeitos do thrashing usando o algoritmo de substituição local (ou por prioridade). • Com a substituição local, se um processo entrar em thrashing, ele não poderá roubar quadros de outro processo e fazer com que este também entre em thrashing. • As páginas são substituídas com relação ao processo do qual fazem parte. 10.6.1 Causa do Thrashing Sistemas Operacionais com Java Referências • Capítulo 10 da referência abaixo: – SILBERSCHATZ, ABRAHAM; GAGNE, GREG; GALVIN, PETER BAES. Sistemas operacionais: com java. . Rio de Janeiro: Elsevier, 2004. Silberschatz, Galvin e Gagne (c) 2003
Compartilhar