Gerenciamento De Memória
Casos: Gerenciamento De Memória. Pesquise 862.000+ trabalhos acadêmicosPor: • 5/12/2014 • 2.063 Palavras (9 Páginas) • 745 Visualizações
Gerência de Memória Virtual
Ricardo S. Santos1
1Faculdade Área1 – DeVry Brasil
Av. Paralela, 3172 - Salvador – BA – Brasil
ricardosouzasantos@hotmail.com
Abstract. This research describes the techniques of virtual memory management used in Windows XP and Linux (kernel3).
Resumo. Esta pesquisa descreve as técnicas de gerenciamento de memória virtual utilizadas no Windows XP e no Linux (kernel3).
Introdução
Memória virtual é uma importante técnica de gerência de memória que dentre outras coisas permite que os programas deixem de estar limitados ao tamanho da memória principal, para isso essa técnica combina a memória principal e secundária, criando assim a ilusão de existir uma memória maior do que a capacidade real da memória principal. Além disso, como apenas partes de cada processo fica residente na memória principal, um numero maior de processos podem compartilhar a memoria principal, gerando inclusive um aproveitamento melhor do processador.
No inicio da década de 60, foi desenvolvido na Universidade de Manchester, a primeira implementação de memória virtual, através do sistema Atlas. Mas tarde, em 1972 a IBM introduziu comercialmente esse conceito na família System/370. Hoje em dia, esse conceito é amplamente utilizado pela maioria dos sistemas. O objetivo dessa pesquisa é mostrar as técnicas de gerenciamento de memória virtual utilizada em apenas dois sistemas operacionais, o Windows XP e o Linux (Kernel 3).
1.Windows XP
No Windows XP o componente que gerencia o espaço de endereços virtuais, a alocação de memória física e a paginação é o gerenciador de memória virtual (VM - Virtual Memory). No Windows XP a memória virtual é implantada tomando por base o mecanismo de paginação, nesta técnica o espaço de endereço virtual e o espaço de endereçamento real são divididos em blocos de mesmo tamanho, chamados páginas. As páginas no espaço virtual são chamadas de páginas virtuais, e as páginas no espaço real são chamadas de páginas reais ou frames. O mecanismo de tradução de um endereço virtual em um endereço físico é baseado em uma tabela de paginação em dois níveis.
1.1 Políticas de busca de página
Quando um programa é executado, as páginas virtuais não transferidas para a memória principal, porém o recurso de memória virtual permite a execução de um programa sem que seu código esteja totalmente na memória principal. Assim o papel da política busca de páginas é determinar quando uma página deve ser carregada para a memória.
O Windows XP utiliza a estratégia de paginação por demanda com clustering. Na paginação por demanda as páginas dos processos são transferidas da memória secundaria para a memória principal apenas quando são referenciados, ou seja, são carregadas na memória principal apenas as páginas realmente necessárias à execução do programa, partes não executadas ou raramente executadas, não são carregadas para a memória.
Na estratégia do Windows XP, o clustering trata a falta de página, carregando na memória a página que faltava e mais um pequeno número de páginas ao seu redor. Segundo Rômulo, Alexandre e Simão (2010, p.286) essa estratégia tenta minimizar o número e acessos ao disco provocado pela paginação de um processo explorando o princípio de localidade (um processo tende a executar, a todo instante, uma região limitada de seu espaço de endereçamento). A carga de páginas em avanço reduz o número de leituras individualizadas ao disco e, consequentemente, o tempo de entrada e saída.
1.2 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 real. No Windows XP quando um processo é criado, ele recebe um mínimo e um máximo do conjunto de trabalho (working set) que são definidos apenas a partir do tamanho da memória física. Para a maioria das aplicações, esses valores são de 50 e 345 páginas, respectivamente.
Quando ocorre uma falta de página esses limites são examinados, bem como a quantidade de memória disponível. Havendo memória livre disponível o gerenciador de memória virtual permite que o processo aumente seu working set até atingir o limite, ou vindo até a ultrapassa-lo a depender da quantidade de memória disponível. Se um processo estiver no seu limite de working set, ocorrer uma falta de página e não houver memória disponível, o gerenciador de memória iniciará o mecanismo de substituição de página local.
Quando a quantidade de memória livre estiver abaixo do limite ou o número de falta de páginas estiver muito elevado, a gerência de memória virtual utiliza o corte automático do conjunto de trabalho para restaurar os valores acima do limite. Esse recurso avalia o working set de todos os processos em memória, de modo que todos os processos que tenham mais páginas em memória do que o valor mínimo, tenham seus conjuntos de trabalho reduzidos até atingir o valor mínimo, liberando assim memória para alocação global.
1.3 Políticas de substituição de páginas
Quando um processo atinge o seu limite de alocação e ainda necessita alocar novas páginas na memória principal, o sistema operacional deve selecionar, dentre as páginas alocadas, qual será liberada. Essa ferramenta é chamada de política de substituição de página. Quando uma página real é liberada fica livre para ser usada por qualquer processo. No Windows XP a política empregada depende do tipo de arquitetura da máquina e do seu processador.
1.4 Algoritmo de substituição de páginas
O objetivo dos algoritmos de substituição de página é selecionar os frames menos importantes, ou seja, os que tenham as menores possibilidades de serem referenciados em um futuro próximo ou que não sejam mais utilizados posteriormente.
Em arquiteturas padrão multiprocessador baseadas em processadores da família intel, e máquinas baseadas em processadores da família Alpha, o Windows XP utiliza em essência o algoritmo FIFO local. Nesse algoritmo, segundo Rômulo, Alexandre e Simão (2010, p.286), considera-se para fins de seleção da página a ser substituída em memória apenas as páginas pertencentes ao processo. Em sistemas de único processador, o Windows XP utiliza o algoritmo LRU (Least-Recently-Used), implementado por meio do algoritmo do relógio (clock).
1.5 Tamanho de página utilizado
O tamanho da página está associado à arquitetura do hardware e varia de acordo com o processador. A gerência de memória do Windows XP é fundamentada em paginação com o tamanho de páginas variando entre 4 Kbytes e 64 Kbytes, dependendo do processador.
1.6 Método de proteção de memória
Sempre que uma página é referenciada, o Windows XP verifica na tabela de mapeamento do processo o tipo de proteção e determina se a operação é permitida, dessa forma ele impedi que um processo tenha acesso ou modifique uma página do sistema sem autorização.
A proteção de memória das páginas é definida como somente leitura, leitura-escrita, leitura-escrita-execução, somente execução, nenhum acesso, cópia na escrita. Deste modo, se há uma tentativa de uma operação de gravação em uma página com proteção somente leitura, o Windows XP gera um erro indicando a ocorrência do problema.
2. Linux (Kernel 3)
Assim como no Windows XP, o gerenciamento de memória do Linux é baseado em paginação, seguindo então o mesmo princípio mencionado acima. Entretanto o Linux emprega um sistema de paginação em três níveis para traduzir endereços virtuais em endereços físicos, e isso tanto para processadores Alpha, que possuem três níveis de tabelas de páginas, quanto para processadores Intel x86, que possuem apenas dois níveis de tabelas de páginas.
Os processos na memória virtual são representados pela estrutura de dados mm_struct. Essa estrutura contêm diversas informações que junto com outras operações compõem um conjunto de rotinas, algumas delas consideradas a seguir, que são utilizadas pelo Linux para manipulação da memória virtual.
2.1 Políticas de busca de página
O Linux utiliza a estratégia de paginação por demanda, já explicada anteriormente. Mas antes de fazer o devido tratamento o Linux verifica se o que causou a falta de página foi consequência de um evento legal ou ilegal. Por exemplo, o Linux verifica se o tipo de falta de página ocorrido é permitido pela área da memória virtual. Assim se o processo estiver executando uma operação ilegal, como por exemplo tentar escrever onde só é permitido leitura, o Linux sinalizará como um erro de memória.
2.2 Políticas de alocação de páginas
Para alocar e liberar as páginas físicas, o Linux utiliza o algoritmo Buddy. Nesse algoritmo, a alocação de memória é realizada de modo a alocar um bloco de memória composto por uma ou mais páginas físicas. A gerência de áreas de memórias livres e alocadas é feito por meio de um vetor. Cada parte desse vetor é uma lista encadeada que contem informações das páginas livres no sistema organizado em blocos. Cada elemento em ordem crescente aponta para um bloco cuja página física vai crescendo em potência de dois respectivamente.
O algoritmo de alocação a princípio procura por blocos de páginas que equivalem ao tamanho de memória desejado. Se não existir blocos livres do tamanho requisitado, o algoritmo busca blocos no próximo tamanho (que será duas vezes maior), e prossegue assim até encontrar um bloco livre. Quando o bloco encontrado é maior que o desejado, ele é dividido em dois continuamente, até atingir o tamanho requisitado. Esse procedimento acaba transformando grandes blocos de memória em blocos menores, um tipo de fragmentação. Para corrigir esse problema toda vez que um bloco de páginas é liberado, o algoritmo verifica se existe outro bloco livre de mesmo tamanho adjacente, em caso positivo os dois blocos viram apenas um bloco, de tamanho duplicado. Esse processo se repete ate que não seja possível formar um único bloco maior.
2.3 Políticas de substituição de páginas
No Linux a substituição de páginas é comumente conhecida como swapping, muito embora o termo correto seja pagging. Esse procedimento é realizado por um processo interno do Linux, o daemon pager. Seu principal objetivo é verificar se existem páginas livres suficientes, de modo que o gerenciamento de memória possa operar eficientemente. Esse processo é inicializado pelo Kernel durante a inicialização do sistema, e a cada espaço de tempo denominado timer de swap do kernel, ele verifica o número de paginas livres. Se este número estiver acima dos parâmetros definidos na variável free_pages_high, o processo não faz nada até o próximo ciclo do time, onde fará a mesma verificação. Quando o número de páginas livres estiver abaixo da variável free_pages_high tentará liberar páginas.
Outra variável denominada free_pages_low faz com que o processo verifique o numero de paginas livre com maior frequência - metade do tempo - isto é quando o numero de páginas livres estiver abaixo do valor definido nesta variável. Os valores das duas variáveis mencionadas são definidos em tempo de inicialização do sistema e são relacionadas com o número de páginas físicas.
2.4 Algoritmo de substituição de páginas
O algoritmo utilizado pelo Linux para determinar a página a ser trocada é o LRU (least recently used), otimizado com o algoritmo do relógio (clock) dentre outras melhorias. Por exemplo, se a página a ser substituída não foi modificada, ela não é reescrita em disco, visto que o mesmo já possui uma cópia atualizada. Porém se a página sofreu alguma alteração, ela é reescrita em disco, mas em um arquivo especial na área de swap. A implementação do algoritmo do relógio no Linux funciona da seguinte maneira, a cada passo do relógio, a idade de cada página é ajustada. Desse modo, as páginas muito utilizadas tem mais idade do que as pouco utilizadas. Isso permite ao algoritmo de substituição selecionar melhor a página a ser trocada.
2.5 Tamanho de página utilizado
A gerência de memória do Linux é baseada em paginação com um tamanho de páginas de 4 Kbytes para processadores x86 e 8 Kbytes para processadores Alpha. Essa divisão é definida no arquivo “asm/page.h”.
2.6 Método de proteção de memória
E sua maioria os processadores possuem ao menos dois modos de execução, a saber modo Kernel e modo Usuário. Assim para proteger a memória, no Linux o gerenciador de memória virtual não permite que processos no modo Kernel e no modo User se misturem. Segundo, no Linux cada segmento da memória virtual tem sua própria proteção, que podem causar uma violação se a memória é acessada incorretamente. Um bom exemplo disso é quando ocorre uma tentativa de escrever em um segmento que só permite leitura.
Referências
Rusling, David A. The Linux Kernel, http://www.tldp.org/LDP/tlk/tlk.html, Novembro.
Gerenciamento de memória no Linux, http://www.eee.ufg.br/~mcastro/disciplinas/so/trabalhos/GrupoF/so_mm.html, Novembro.
Gorman, Mel. (2004) Understanding The Linux Virtual Memory Manager, http://ptgmedia.pearsoncmg.com/images/0131453483/downloads/gorman_book.pdf, Novembro.
Jr, José G.A. e Diego A. Gerenciamento de memória no Linux, http://ces33.wikidot.com/gerenciamento-de-memoria:jose-gerardo-e-diego-alvarez, Novembro.
Machado, Francis B. e Maia, Luiz P. (2013) Arquitetura de Sistemas Operacionais, 5ª edição.
Oliveira, Rômulo S., Carissimi, Alexandre da S. e Toscani, Simão S. (2010) Sistemas Operacionais, 4ª edição.
Silberschatz, Abraham., Galvin, Peter B. e Gagme, Greg. (2004) Sistemas Operacionais com Java, 6ª edição.
Jr, José G.A. e Diego A. Gerenciamento de memória no Linux, http://ces33.wikidot.com/gerenciamento-de-memoria:jose-gerardo-e-diego-alvarez, Novembro.
...