Gerenciamento De Memorias
Artigo: Gerenciamento De Memorias. Pesquise 862.000+ trabalhos acadêmicosPor: daniele1995 • 23/5/2013 • 3.881 Palavras (16 Páginas) • 502 Visualizações
Introdução
O Linux é um sistema multiprocessos e multiusuários. Então devemos ter um controle rígido sobre a memória para que um processo não sobreponha os recursos (memória) utilizados pelo outro.
Ele possui dois sistemas de gerenciamento de memória. O primeiro é o sistema de gerenciamento de memória física. Ele cuida da alocação e liberação de blocos de memória. O segundo é o sistema de gerenciamento de memória virtual. Este tem o papel de "enganar" os processos dizendo que há memória suficiente quando não há. Esta técnica pode melhorar a performance do sistema operacional.
A seguir veremos algumas estratégias usadas pelos dois componentes para aumentar a performance do processamento.
2.MEMÓRIA FÍSICA
O administrador de memória física principal no Linux é o alocador de páginas. Esse processo é responsável por alocar e liberar páginas físicas, sendo capaz de alocar grupos de páginas contíguas. O alocador de páginas usa um algoritmo de alocação de regiões vizinhas, que combina unidades de alocação adjacentes em uma única unidade. Cada região de memória que pode ser alocada possui uma região adjacente correspondente, ou vizinha. Sempre que duas regiões vizinhas são liberadas, elas são combinadas para formar uma região maior. Essa região maior também tem uma vizinha, com a qual pode ser combinada para formar uma região livre ainda maior. Como alternativa, quando não existir uma região de memória disponível pequena para satisfazer a uma requisição de uma pequena porção de memória, uma região maior de memória é subdividida em duas vizinhas. O sistema utiliza listas ligadas para áreas disponíveis de cada tamanho permitido. No Linux, o menor tamanho de área que pode ser alocada usando esse mecanismo corresponde ao de uma única página física.
As alocações de memória no núcleo do Linux ocorrem estaticamente, por rotinas de controle que reservam uma área contígua de memória no momento da carga do sistema, ou dinamicamente, pelo controlador de páginas. Entretanto, as funções do núcleo não precisam usar o alocador de páginas para reservar memória. Existem vários outros subsistemas de gerenciamento de memória especializados, que usam o controlador de páginas subjacente para gerenciar seu próprio espaço de memória. Os subsistemas de memória mais importantes são o sistema de memória virtual, o sistema de alocação de áreas de memória de tamanho variável, kmalloc, e o sistema de alocação de espaço nas duas memórias cache de dados persistentes do núcleo: a memória cache de áreas de armazenamento temporário e a memória cache de páginas.
Muitos componentes do Linux precisam alocar espaço a páginas inteiras, mas freqüentemente pode ser necessário alocar blocos menores de memória. O núcleo oferece um subsistema adicional para a alocação de áreas de memória de tamanho variável, sem tamanho previamente definido, podendo ser de apenas alguns bytes, em vez de uma página inteira. Esse serviço, fornecido pela rotina kmalloc, análoga á rotinamalloc da linguagem C, aloca blocos a páginas inteiras, sob demanda, mas subdivide esses blocos em partes menores. O núcleo armazena dados sobre os blocos em uso pelo sistema kmalloc, em listas que contêm, cada uma, apenas blocos que foram subdivididos em partes de um tamanho especifico. A alocação de memória envolve selecionar a lista apropriada e retirar a primeira área disponível dessa lista, ou alocar espaço a uma página e subdividi-lo.
Tanto o controlador de páginas, quanto o kmalloc, não podem ser interrompidos. Uma rotina que deseje alocar uma área de memória informa a prioridade da sua requisição à rotina de alocação. Rotinas de interrupção utilizam uma prioridade atômica, que garante que a requisição seja satisfeita ou que falhe imediatamente, caso não exista mais memória disponível. Em contraposição, para uma requisição de memória de um processo comum de usuário, uma área de memória livre é procurada, sendo o processo bloqueado até que uma área de memória se torne disponível. A prioridade de alocação também pode ser usada para especificar a requisição de memória de acesso direto (DMA). Esse recurso é usado em algumas arquiteturas, como em PCs, onde certas requisições de DMA não podem ser realizadas sobre qualquer bloco da memória física.
As regiões de memória solicitadas pelo sistema kmalloc ficam alocadas até que sejam explicitamente liberadas. O sistema kmalloc não pode transferir essas regiões de uma posição para outra ou liberá-las em resposta a uma diminuição do espaço livre em memória.
Os outros três subsistemas principais de memória que realizam um gerenciamento próprio de blocos de memória física são fortemente relacionados entre si. Esses sistemas gerenciam o uso da memória cache de áreas de armazenamento temporário, da memória cache de páginas e da memória virtual. A memória cache de áreas de armazenamento temporário é a principal memória cache do núcleo para dispositivos de E/S baseada em blocos; além disso constitui o principal mecanismo por meio do qual as operações de E/S sobre esses dispositivos são realizadas. A memória cache de páginas armazena páginas inteiras de dados de arquivos e não é restrita apenas aos dispositivos que fazem E/S usando blocos. Ela também pode ser usada para armazenar dados transmitidos por meio da rede e é utilizada tanto pelos sistemas de arquivos originais do Linux, que usam discos, quanto pelo sistema de arquivos de rede NES. O sistema de memória virtual gerencia o espaço de endereçamento de cada processo.
Esses três sistemas de memória interagem entre si. A leitura de uma página de dados para a memória cache de páginas usa a memória cache de áreas de armazenamento temporário. As páginas da memória cache de páginas podem também usar o sistema de memória virtual, caso um processo tenha mapeado o arquivo correspondente no seu espaço de endereçamento. O núcleo usa um contador de referências a cada página na memória física para que as páginas compartilhadas por dois ou mais desses subsistemas possam ser liberadas, quando elas não estiverem mais sendo usadas em nenhum deles.
3.MEMÓRIA VIRTUAL
O sistema de memória virtual do Linux é responsável pelo uso do espaço de endereçamento de cada processo. Esse sistema aloca espaço de memória virtual sob demanda e gerencia a transferência de páginas entre o disco e a memória, quando necessário. No Linux, o administrador de memória virtual usa duas visões do espaço de endereçamento de um processo: como um conjunto de regiões separadas e como um conjunto de páginas.
A primeira
...