Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 29 Vimos diversas formas de gerenciamento de memória que foram evoluindo para uma melhora na performance de gerenciamento de processos na memória principal e também reduzir a fragmentação de espaço na memória principal. Mas podemos perceber também que nesses sistemas vistos até agora há uma inefi ciência, pois os processos só podem ser executados sempre dependendo se há memória disponível, ou seja, os processos sempre estão limitados ao tamanho da memória existente. Há uma técnica que pode até ter um jeito de resolver tais situações de falta de memória Aula 03 MEMÓRIA VIRTUAL Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 30 que é o overlay, mas essa técnica é de difícil implementação e nem sempre essa prática traz resultados satisfatórios, ou seja, essa solução nem sempre tem a garantia de bons resultados. A maneira mais sofi sticada e que traz resultado de sucesso é o uso da técnica de memória virtual, pois ela é muito poderosa para gerência de memória. A princípio essa técnica é bastante simples, é feita uma junção entre as memórias principal e memória secundária que acaba dando a impressão ao usuário de que existe uma memória muito maior que a capacidade real da memória principal. O conceito de memória virtual fundamenta-se em não vincular o endereçamento feito pelo programa dos endereços físicos da memória principal. (Arquitetura de sistemas operacionais / Francis Berenger Machado, Luis Paulo Maia, - 4° Ed. – Rio de Janeiro :LTC, 2007). A primeira implementação de memória virtual foi realizada no início da década de 60, no sistema Atlas, desenvolvido na Universidade de Manchester (Kilburn,1962). Posteriormente a IBM introduziria este conceito comercialmente na família System/370, em 1972. (Arquitetura de sistemas operacionais / Francis Berenger Machado, Luis Paulo Maia, - 4° Ed. – Rio de Janeiro :LTC, 2007). Com a aplicação da memória virtual facilita e muito, pois os processos não fi cam totalmente dependentes de memória física disponível, já que agora eles têm o privilégio de possuírem endereços associados á memória secundária. Outro passo em que o uso da técnica de memória virtual está à frente é que com ela pode-se permitir um número maior de processos compartilhados na memória principal, pois com ela em prática fi cam apenas partes dos processos como residentes. Com a utilização de memória virtual o uso do processador fi ca mais efi ciente e pode também fi car menos fragmentada. Ainda para que a memória virtual tenha um desempenho ainda mais satisfatório, algumas funções de gerencia de memória virtual são implementadas diretamente no hardware, por isso pode-se considerar uma forte ligação entre a gerência de memória virtual e a arquitetura de hardware. Portanto várias especifi cações da arquitetura de hardware têm que ser levadas em consideração em relação à memória virtual, uma das principais especifi cações é o método de endereçamento do processador. Nos sistemas de memória virtual existe uma ligação com o hardware de propósito especial que é chamado de unidade de gerenciamento de memória (Memory Managent Unit). Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 31 O endereço virtual em um sistema de paginação é representado por um par ordenado (p,d), pois o p é o número da página e o d representa o deslocamento dentro da página p no qual o item referenciado está localizado. Temos também a Moldura de página que é quando o sistema transfere uma página do armazenamento secundário para a memória principal, o processo pode ser executado se a página em que ele estiver referenciando estiver alocada na memória principal. Veja na fi gura 6 a representação de endereço de memória principal. Número da Página p d Número da Página Endereço Virtual v = (p,d) Figura: 6 A memória virtual por paginação é uma técnica que consiste na divisão de espaço de endereçamento de memória virtual e do espaço de endereçamento de memória real em blocos de mesmo tamanho que são chamados de páginas. Todo o mapeamento de endereço é realizado através de tabelas de página, cada processo possui a sua própria tabela de páginas. Cada página virtual do processo tem uma entrada na tabela, essas tabelas possuem informações de mapeamento para que se possa localizar a página real correspondente, observe a fi gura 7. Figura: 7 Memória Virtual Memória Principal Memória Secundária Página virtual O Página real O Página real 1 Página real R Página virtual 1 Página virtual 2 Página virtual V Tabelas de páginas ETP Assim que o processo é executado, as páginas virtuais são enviadas da memória secundária para a memória principal e são alocadas nas páginas reais. Toda vez que um processo fi zer referência a um endereço da memória virtual, o mecanismo de mapeamento faz a localização Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 32 na ETP (Entrada na tabela de página) da tabela do processo, o endereço físico da tabela real. Além da informações de localização que estão no sistema de mapeamento de endereço da memória real tem-se a informação do bit de validade (valid bit), que indica se a página está ou não na memória principal. Se o bit tiver o valor 0, indica que a página virtual não está na memória principal, se o bit tiver o valor 1 indica que a página está alocada na memória principal. Com a memória virtual é possível que seja executado um processo sem que o seu código esteja por completo alocado na memória principal. O esquema de busca também faz o controle de quando uma página deve ser carregada para a memória. Paginação por demanda (Demand paging): nesse esquema é páginas dos processos somente são carregadas da memória secundária para a memória principal quando realmente há a necessidade da determinada página, ou seja, somente quando é chamada a referida página. Esse esquema é muito conveniente, pois ele carrega para a memória principal somente as páginas que realmente são necessárias para execução. Com isso, é possível que partes que não serão utilizadas para a execução não sejam carregadas para memória principal. Paginação por antecipação (antecipatory paging ou prepaging): nesse esquema são carregados páginas além das necessárias para a execução, ou seja, são enviadas páginas além da que foi referenciada para a execução, mas são páginas que poderão ser utilizadas ao longo do processo. A vantagem desse esquema é que, se pensarmos que um determinado programa está armazenado sequencialmente no disco, vai existir uma grande economia de tempo na transferência de páginas da memória secundária para a memória principal ao invés de carregar uma página de cada vez. Por outro lado, se por acaso o sistema não ocupe algumas das páginas carregadas antecipadamente, o sistema terá perdido tempo e ocupado memória principal sem necessidade. Esse esquema de paginação antecipada pode ser aplicado no momento da criação de um processo ou na ocorrência de um page fault. Quando um processo é criado, várias páginas são criadas na memória secundária que devem ser carregadas para a memória principal, criando um grande número de page fault e várias operações de leitura de disco. Com o carregamento das páginas para a memória, a taxa de paginação tende a diminuir. Caso o sistema carregue várias páginas, a taxa de paginação do processo deverá cair imediatamente e fi car estabilizada durante um tempo. Assim sempre que houver um page fault, o sistema poderá carregar várias páginas além da página referenciada, na tentativa de evitar novos page fault e uma sequência de operações de leitura de disco. Existem basicamente duas alternativas para política de alocação de páginas: uma é a alocação fi xa, a outra é a alocação variável; na fi xa, cada processo tem um limite de páginas que podem ser utilizadas durante a execução. Caso o número de páginas seja insufi ciente, uma outra página do processo deve ser desativada para que uma nova sejacarregada, esse limite de páginas pode ser igual a todos os processos ou esse número pode ser defi nido individualmente. Pode até parecer justo alocar o mesmo número de páginas para todos os processos, mas não se anime, pois pode não parecer uma boa opção. Se nós observarmos, os processos Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 33 raramente tem as mesmas necessidades, o correto é que seja defi nido o número de páginas no momento da criação do processo, pode-se tirar isso com base no tipo da aplicação que será executada. A política de alocação fi xa é bastante simples, mas ela traz também alguns problemas. Caso o número de páginas for pequeno, o processo terá um número elevado de page faults, com isso pode-se prejudicar o desempenho de todo o sistema, mas caso esse número de páginas for bem maior que o necessário para a execução do processo, cada processo vai ocupar uma área maior que o necessário da memória principal, isso pode ocasionar na redução do número de processos residentes. Caso isso ocorra, pode ser aplicada a técnica de swapping onde pode ser feita a retirada e o carregamento de processos da memória principal. Já na política de alocação variável, o que ocorre é que o número máximo de páginas para o processo pode ser variado durante a sua execução por conta da taxa de paginação e da ocupação da memória principal. Com esse tipo de política os processos com um grande número de paginação, é possível ampliar o limite máximo de páginas e com isso pode-se reduzir o número de page faults. Do mesmo modo em que processo com um baixo número de páginas pode ter páginas realocadas para outros processos. A política de alocação variável é uma forma muito prática, mas requer uma melhor performance do sistema operacional que vai ter que constantemente monitorar o comportamento dos processos. Existe também a política de substituição de página: pode ocorrer uma falta de página para o processo e, nesse caso o sistema operacional precisa selecionar uma página que será retirada da memória principal a fi m de liberar espaço para uma outra página. Se por ventura a página que foi selecionada para remoção tiver sofrido alguma alteração durante o processo, essa página deverá ser novamente gravada no disco com a fi nalidade de atualizar o código virtual. Se por certo a página não tiver sofrido nenhuma alteração, esse procedimento de gravar novamente a página no disco não é necessário, pois a cópia existente é a mesma a ser gravada. Quando há nova página que é carregada na memória ela substitui a página antiga, assim a página antiga foi totalmente destruída da memória principal. É possível escolher uma página aleatoriamente para ser substituída a cada vez que for necessário, mas o sistema terá um desempenho muito melhor obviamente se for retirada da memória uma página que estiver sendo pouco usada. Caso ocorra de uma página que está sendo muito utilizada ser a escolhida para ser substituída, é bem possível que logo esta página terá que ser introduzida na memória novamente, isso causa custos extras. O sistema operacional tem a capacidade de identifi car as páginas porque existe um bit em cada entrada da tabela de página, chamado de bit de notifi cações (dirty bit ou modify bit). O valor desse bit sempre é alterado quando uma página sofre alguma modifi cação. Esse problema de substituição de páginas ocorre em outros ambientes do sistema computacional como por exemplo, na memória cachê com blocos de memória mais recentes. Se a cachê estiver cheia, um dos blocos é escolhido para ser retirado; aí que existe uma diferença na substituição da página, a diferença está no tempo envolvido, pois, na cachê, a substituição do conteúdo de um bloco de memória Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 34 é realizada em um tempo reduzido comparando-se com a substituição de páginas. Essa diferença de tempo se dá porque há uma falta de bloco (block miss) no cachê; essa troca é satisfeita a partir da memória principal, que não tem a demora por conta de tempo de rotação e de latência rotacional do disco. Uma forma que poderia ser perfeita, e que facilitaria e muito na substituição de páginas seria a seguinte: quando uma falta de página ocorrer, na memória principal existe um conjunto de páginas, e uma dessas páginas que ainda não foram referenciadas será referenciada após pelo menos umas 10, 100 ou até mesmo 1000 instruções. A solução é rotular um número de instruções que serão executadas antes que a página seja referenciada pela primeira vez. Logo uma página com rótulo mais alto deverá ser removida, por exemplo. Se houver uma página não vai ser usada durante 7 milhões de instruções e outra que não vai ser usada por pelo menos 4 milhões de instrução, se remover a primeira, isso deixará por mais tempo possível a falta de tempo. O problema que impede a utilização desse algoritmo é que, no momento da falta de página, o sistema operacional não tem como saber quando cada uma das páginas serão futuramente referenciadas. Esse é o melhor algoritmo de substituição, mas infelizmente raramente é implementada. Sua utilização somente é possível na segunda execução, usando as informações de referência de páginas recolhidas durante a primeira execução. Já na substituição de páginas FIFO (primeira a entrar, primeira a sair), o esquema de substituição funciona da seguinte maneira: quando uma página entra na memória e logo outra vai chegar, a que sai é a que está por mais tempo na memória, ou seja, a que entrou primeiro, mas também há problema no uso desse método. Na hora do sistema referenciar a página que será excluída opta-se pela que esta há mais tempo, e ás vezes essa página vai ser mais utilizada do que outra que pode estar está logo atrás. Temos também o esquema de FIFO circular, método que utiliza como base o esquema FIFO, mas as páginas alocadas na memória fi cam em uma estrutura de lista circular semelhante a um relógio onde um ponteiro guarda o endereço da página mais antiga. As páginas possuem um bit onde se encontra a sua referência, esse bit mostra se a página foi recentemente referenciada. Assim, quando há a necessidade de se fazer uma troca de página, o sistema verifi ca se o bit de referência está com valor 0 ou 1, onde 0 representa que a página foi selecionada para ser excluída, pois, ela além de ser a mais antiga, não foi utilizada recentemente. Em outro caso, se o bit estiver com o valor 1, o bit é desligado e o ponteiro é incrementado, essa página além de ser a mais antiga, foi utilizada recentemente. VIRTUALIZAÇÃO Muitos exemplos nos mostram como os softwares podem ser usados para fazer os recursos parecerem diferentes do que realmente são. Isso se chama virtualização. Memórias virtuais parecem ser bem maiores que memória física instalada no computador. Máquinas virtuais criam a ilusão de que o computador a ser usado para executar aplicações realmente bem diferente do hardware. Fonte: (Sistemas Operacionais: terceira edição/H.M.Deitel, P.J.Deitel, D.R. Choffnes; - São Paulo : Pearson Prentice Hall, 2005). Sistemas Operacionais I - France Ricardo Marques Gonzaga - UNIGRAN 35 Existem vários tipos de esquemas de substituição de páginas. Alguns selecionam na memória principal a página que está há mais tempo alocada na memória; existe aquele que seleciona a página menos referenciada; há outros que fazem uma seleção aleatória da página que está alocada na memória. Vamos agora saber um pouco a respeito de tamanho de páginas. Alguns sistemas permitem a confi guração do tamanho da página, assim, ele torna-se mais fl exível, mas a escolha do tamanho da página é um fator muito importante quando se fala em implementar a memória virtual por paginação. O tamanho de página está diretamente ligado á arquitetura de hardware e ela pode variar de acordo com o modelo do processador, mas de acordo com Francis Berenger Machado e Luiz Paulo Maia – Arquitetura de Sistemas Operacionais – 4° ed;Rio de Janeiro: LTC, 2007, o tamanho pode ser entre 512 e 16 M endereços. ATIVIDADES As atividades referentes a esta aula estão disponibilizadas na ferramenta “Atividades”. Após respondê-las, envie-nas por meio do Portfólio- ferramenta do ambiente de aprendizagem UNIGRANET. Em caso de dúvidas, utilize as ferramentas apropriadas para se comunicar com o professor.
Compartilhar