Gestão de Memora no UNIX
Por: Milton Mondlane • 18/9/2019 • Artigo • 1.740 Palavras (7 Páginas) • 136 Visualizações
Gerenciamento de memória
As primeiras versões do UNIX usavam técnicas de swapping, posteriormente passou a se usar a paginação e actualmente implementa-se a paginação com swapping, sendo que os conceitos de endereçamento virtual e mapeamento tem detalhes de implementação como tamanho de página e níveis de tabela de página dependentes da arquitectura do hardware, existindo divisão em 3 segmentos: texto, dados e pilhas. (Machado & Maia, 2013).
- Texto é a área protegida contra gravação onde temos as instruções do programa;
- Dados é a área dinâmica com espaco variável onde temos as varias variáveis do programa como tipos numéricos e arrays;
- Pilha é a área que armazena informações de controle do ambiente de processo como chamadas ao sistema.
O gerenciamento de memória em Linux tem dois componentes:
- Alocação e libertação da memória física;
- Alocação e libertação da memória virtual.
Gestão de memória física
Devido a características específicas do hardware o Linux identifica 3 zonas de região de memória:
- ZONE_DMA – zona em que dispositivos só podem aceder a um pequeno espaço de memória;
- ZONE_NORMAL – zona usada mais para pedidos de rotina e identifica espaços mapeados ao espaço da CPU;
- ZONE_HIGHMEM – zona de memoria alta que refere a memoria física que não e mapeada nos espaços do Kernel, sendo a parte da memoria usada para programas.
Ex: com base em arquitectura 32 bits
Zona | Memoria física alocada em MB |
DMA | <16 |
NORMAL | 16<= X <896 |
HIGH MEMORY | 896<= |
Alocador de página
O gerenciador de memória física primário no Kernel do Linux é o alocador de página, que é responsável por alocar e liberar todas as páginas físicas da zona, e alocar faixas de páginas fisicamente contíguas à pedido; usa um sistema de camaradas para acompanhar as páginas físicas disponíveis onde unidades adjacentes de memória alocável são emparelhadas juntas.
Muitos componentes do sistema operacional Linux precisam alocar páginas inteiras ao pedido, mas frequentemente são necessários pequenos blocos de memória e o Kernel fornece um alocador adicional para solicitações de tamanho arbitrário, onde o tamanho de uma solicitação não é conhecido com antecedência e pode ser de apenas alguns bytes, em vez de uma página inteira.
Alocar memória envolve elaborar a lista apropriada e tomar a primeira peça gratuita disponível na lista ou alocar uma nova página e dividi-la, e as regiões de memória reivindicadas pelo sistema são atribuídas permanentemente até serem liberadas explicitamente e daí o sistema não pode realocar ou recuperar essas regiões em resposta a falta de memória.
Alocador de placas (Lajes)
Outra estratégia adotada pelo Linux para alocar a memória do Kernel é conhecida como alocação de placas onde uma laje é usada para alocar memória para estruturas de dados do Kernel e é composta de uma ou mais páginas fisicamente contíguas.
Ex: A figura mostra dois objetos Kernel 3 KB em tamanho e três objetos 7 KB em tamanho em alocador de lajes:
[pic 1]
Inicialmente, todos os objetos na cache são marcados como livres, quando um novo objeto para uma estrutura de dados do Kernel é necessária, o alocador pode atribuir qualquer objeto livre da cache para satisfazer a solicitação, daí o objeto atribuído a partir da cache é marcado como usado.
No Linux, uma laje pode estar em um dos três estados possíveis:
1. Completo. Todos os objetos na laje são marcados como usados.
2. Vazio. Todos os objetos na laje são marcados como livres.
3. Parcial. A laje consiste em objetos usados e livres.
O alocador de laje primeiro tenta satisfazer a solicitação com um objeto livre em uma laje parcial, se nenhum existir, um objeto livre é atribuído a partir de uma placa vazia, se nenhuma laje vazia estiver disponível, uma nova laje é alocada a partir de páginas físicas contíguas e atribuída a uma cache.
Cache de página
A cache de página que é a cache principal do Kernel para dispositivos orientados a blocos e arquivos mapeados em memória.
A cache de página armazena em cache páginas inteiras de conteúdo de arquivo e não se limita a bloquear dispositivos e também pode armazenar em cache dados em rede.
Sistema de memória virtual
O sistema de memória virtual que é gestor o conteúdo do espaço de endereço virtual de cada processo.
O sistema de memória virtual Linux é responsável pela manutenção do espaço de endereçamento visível para cada processo criando páginas de memória virtual sob demanda e gerência, e o carregamento dessas páginas a partir do disco ou sua troca de volta ao disco, conforme necessário.
Este gerenciador mantém duas vistas separadas do espaço de endereçamento de um processo: como um conjunto de regiões separadas e como um conjunto de páginas.
A cache de página e o sistema de memória virtual interagem de perto porque a leitura de uma página de dados na cache de página requer o mapeamento de páginas na cache de página usando o sistema de memória virtual.
Vistas de espaço de endereçamento
Segundo Sibelrschatz o Linux apresenta dois tipos de vista, uma logica e uma física.
Vista logica
Consiste num conjunto de regiões que não se sobrepõem, representando cada região um subconjunto contínuo, alinhado por página do espaço de endereçamento.
Cada região é descrita internamente por uma única estrutura que define as propriedades da região, incluindo as permissões de leitura, gravação e execução do processo na região e informações sobre quaisquer arquivos associados à região.
As regiões para cada espaço de endereço são ligadas em uma árvore binária balanceada para permitir pesquisa rápida da região correspondente a qualquer endereço virtual.
...