Você está na página 1de 8

GERENCIAMENTO

DE
MEMRIA
LINUX
GSO 2

Nome : Marcus Vinicius Alves Carvalho N 04 3Q

BIBLIOGRAFIA

Introduo

Memria Fsica

Memria Virtual

Regies da memria virtual

Troca de processo e paginao

Paginao

Memria

Tipos e Estruturas de Swapping

Concluso

Introduo
O Linux um sistema multiprocessos e multiusurios. Ento devemos ter um controle
rgido sobre a memria para que um processo no sobreponha os recursos (memria)
utilizados pelo outro.
Ele possui dois sistemas de gerenciamento de memria. O primeiro o sistema de
gerenciamento de memria fsica. Ele cuida da alocao e liberao de blocos de
memria. O segundo o sistema de gerenciamento de memria virtual. Este tem o
papel de "enganar" os processos dizendo que h memria suficiente quando no h.
Esta tcnica pode melhorar a performance do sistema operacional.
A seguir veremos algumas estratgias usadas pelos dois componentes para aumentar
a performance do processamento.
Memria Fsica
O administrador de memria fsica principal no Linux o alocador de pginas. Esse
processo responsvel por alocar e liberar pginas fsicas, sendo capaz de alocar
grupos de pginas contguas. O alocador de pginas usa um algoritmo de alocao de
regies vizinhas, que combina unidades de alocao adjacentes em uma nica
unidade. Cada regio de memria que pode ser alocada possui uma regio adjacente
correspondente, ou vizinha. Sempre que duas regies vizinhas so liberadas, elas so
combinadas para formar uma regio maior. Essa regio maior tambm tem uma
vizinha, com a qual pode ser combinada para formar uma regio livre ainda maior.
Como alternativa, quando no existir uma regio de memria disponvel pequena para
satisfazer a uma requisio de uma pequena poro de memria, uma regio maior de
memria subdividida em duas vizinhas. O sistema utiliza listas ligadas para reas
disponveis de cada tamanho permitido. No Linux, o menor tamanho de rea que pode
ser alocada usando esse mecanismo corresponde ao de uma nica pgina fsica.
As alocaes de memria no ncleo do Linux ocorrem estaticamente, por rotinas de
controle que reservam uma rea contgua de memria no momento da carga do
sistema, ou dinamicamente, pelo controlador de pginas. Entretanto, as funes do
ncleo no precisam usar o alocador de pginas para reservar memria. Existem
vrios outros subsistemas de gerenciamento de memria especializados, que usam o
controlador de pginas subjacente para gerenciar seu prprio espao de memria. Os
subsistemas de memria mais importantes so o sistema de memria virtual, o
sistema de alocao de reas de memria de tamanho varivel, kmalloc, e o sistema
de alocao de espao nas duas memrias cache de dados persistentes do ncleo: a
memria cache de reas de armazenamento temporrio e a memria cache de
pginas.
Muitos componentes do Linux precisam alocar espao a pginas inteiras, mas
freqentemente pode ser necessrio alocar blocos menores de memria. O ncleo
oferece um subsistema adicional para a alocao de reas de memria de tamanho
varivel, sem tamanho previamente definido, podendo ser de apenas alguns bytes, em
vez de uma pgina inteira. Esse servio, fornecido pela rotina kmalloc, anloga
rotina malloc da linguagem C, aloca blocos a pginas inteiras, sob demanda, mas
3

subdivide esses blocos em partes menores. O ncleo armazena dados sobre os


blocos em uso pelo sistema kmalloc, em listas que contm, cada uma, apenas blocos
que foram subdivididos em partes de um tamanho especifico. A alocao de memria
envolve selecionar a lista apropriada e retirar a primeira rea disponvel dessa lista, ou
alocar espao a uma pgina e subdividi-lo.
Tanto o controlador de pginas, quanto o kmalloc, no podem ser interrompidos. Uma
rotina que deseje alocar uma rea de memria informa a prioridade da sua requisio
rotina de alocao. Rotinas de interrupo utilizam uma prioridade atmica, que
garante que a requisio seja satisfeita ou que falhe imediatamente, caso no exista
mais memria disponvel. Em contraposio, para uma requisio de memria de um
processo comum de usurio, uma rea de memria livre procurada, sendo o
processo bloqueado at que uma rea de memria se torne disponvel. A prioridade
de alocao tambm pode ser usada para especificar a requisio de memria de
acesso direto (DMA). Esse recurso usado em algumas arquiteturas, como em PCs,
onde certas requisies de DMA no podem ser realizadas sobre qualquer bloco da
memria fsica.
As regies de memria solicitadas pelo sistema kmalloc ficam alocadas at que sejam
explicitamente liberadas. O sistema kmalloc no pode transferir essas regies de uma
posio para outra ou liber-las em resposta a uma diminuio do espao livre em
memria.
Os outros trs subsistemas principais de memria que realizam um gerenciamento
prprio de blocos de memria fsica so fortemente relacionados entre si. Esses
sistemas gerenciam o uso da memria cache de reas de armazenamento temporrio,
da memria cache de pginas e da memria virtual. A memria cache de reas de
armazenamento temporrio a principal memria cache do ncleo para dispositivos
de E/S baseada em blocos; alm disso constitui o principal mecanismo por meio do
qual as operaes de E/S sobre esses dispositivos so realizadas. A memria cache
de pginas armazena pginas inteiras de dados de arquivos e no restrita apenas
aos dispositivos que fazem E/S usando blocos. Ela tambm 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 memria virtual gerencia o espao de endereamento de cada
processo.
Esses trs sistemas de memria interagem entre si. A leitura de uma pgina de dados
para a memria cache de pginas usa a memria cache de reas de armazenamento
temporrio. As pginas da memria cache de pginas podem tambm usar o sistema
de memria virtual, caso um processo tenha mapeado o arquivo correspondente no
seu espao de endereamento. O ncleo usa um contador de referncias a cada
pgina na memria fsica para que as pginas compartilhadas por dois ou mais desses
subsistemas possam ser liberadas, quando elas no estiverem mais sendo usadas em
nenhum deles.
Memria Virtual
O sistema de memria virtual do Linux responsvel pelo uso do espao de
endereamento de cada processo. Esse sistema aloca espao de memria virtual sob
demanda e gerencia a transferncia de pginas entre o disco e a memria, quando
necessrio. No Linux, o administrador de memria virtual usa duas vises do espao
de endereamento de um processo: como um conjunto de regies separadas e como
um conjunto de pginas.
A primeira dessas vises do espao de endereamento a viso lgica, que descreve
as instrues recebidas pelo sistema de memria virtual relativas organizao do
espao de endereamento. Nessa viso, o espao de endereamento consiste em
regies separadas, cada qual consistindo em um espao contguo de pginas. Essa
regio descrita, internamente, por uma nica estrutura vrn_area_struct, que define
4

as propriedades dessa regio, incluindo os direitos de acesso do processo para


realizar operaes de leitura, escrita e execuo nessa regio, assim como dados
relativos aos arquivos associados regio. As regies de cada espao de
endereamento so organizadas em uma rvore binria balanceada, para possibilitar
uma pesquisa eficiente por uma regio correspondente a um endereo virtual.
O ncleo usa uma segunda viso de cada espao de endereamento. Essa viso
armazenada nas tabelas de pginas do processo. As entradas nessa tabela de
pginas determinam a posio atual de cada pgina da memria virtual, esteja ela em
disco ou na memria fsica. Essa viso do espao fsico gerenciada por um conjunto
de rotinas, chamadas por tratadores de interrupes de software do ncleo do
sistema, sempre que um processo usa uma pgina que no est presente na tabela
de pginas. Cada vrn_area_struct contm um apontador para uma tabela de rotinas
que implementam as operaes fundamentais de gerenciamento de pginas. Todas as
requisies de leitura ou escrita de pginas no disponveis so eventualmente
tratadas por uma rotina apropriada, contida na tabela vrn_area_struct, de forma que as
rotinas centrais de gerenciamento de memria no precisam lidar com detalhes
especficos de cada tipo de regio de memria.
Regies Da Memria Virtual
O Linux usa regies da memria virtual de vrias maneiras. Uma regio pode ser
caracterizada pela memria persistente para onde as pginas dessa regio so
copiadas ou de onde suas pginas so lidas. A maioria das regies de memria possui
uma cpia reserva em um arquivo ou ento no possui cpias reservas. Uma regio
que no possui cpias reservas constitui o tipo mais simples de memria virtual. Essas
regies representam memrias de demanda zero: quando um processo tenta ler uma
pgina dessa regio, ele simplesmente recebe uma pgina de memria totalmente
preenchida com zeros.
Uma regio com cpia em um arquivo funciona como uma viso de uma seo desse
arquivo: sempre que um processo tenta usar uma pgina dessa regio, a tabela de
pginas e preenchida com o endereo de uma pgina da memria cache do ncleo,
correspondente ao endereo da pgina requerida do arquivo. A mesma pgina de
memria fsica usada tanto pela memria cache de pginas quanto pelas tabelas de
pginas do processo, de modo que qualquer alterao feita sobre o arquivo, pelo
sistema de arquivos, imediatamente visvel a qualquer processo que tenha essa
pgina mapeada em seu espao de endereamento virtual. Vrios processos podem
mapear, em seu espao de endereamento, uma mesma regio de um determinado
arquivo, resultando na utilizao da mesma pgina de memria fsica por todos esses
processos.
Uma regio de memria virtual tambm definida pela forma como so tratadas as
operaes de escrita sobre essa regio. O mapeamento de uma regio no espao de
endereamento de um processo pode ser privado ou compartilhado. Se um processo
escreve em uma regio privada, o controlador de pginas detecta que necessria
uma cpia-em-escrita, para manter essas atualizaes locais ao processo. Por outro
lado, uma operao de escrita sobre uma regio compartilhada resulta na atualizao
da cpia dessa regio mantida na memria, de modo que essa atualizao seja
imediatamente visvel a todos os processos que usam essa regio.

Troca De Processos E Paginao


Uma tarefa importante do sistema de memria virtual a transferncia de pginas, da
memria fsica para o disco, quando necessrio. Os primeiros sistemas UNIX
5

transferiam todos os dados de um processo de uma nica vez. Sistemas UNIX mais
modernos usam o mecanismo de paginao, que transfere pginas da memria virtual
individualmente entre a memria fsica e o disco. O Linux usa o mecanismo de
paginao, em vez de transferir todos os dados de um processo de uma nica vez.
Paginao
Com a ajuda de tabelas, o sistema operacional mapeia um grande espao de
endereamento lgico num espao de endereamento fsico menor. Quando os
processos precisam de mais memria principal do que est fisicamente presente,
segmentos individuais de memria lgica que no foram referenciados recentemente
so realocados no Disco Rgido.
Quando um programa acessa um endereo lgico que est atualmente localizado no
Disco Rgido, o respectivo segmento de memria (chamado pgina) carregado na
memria principal, enquanto outro segmento de memria precisa ser escrito para o
Disco Rgido para compensar. Devido ao tempo de acesso do Disco Rgido ser
significativamente mais alto se comparado com a memria principal, h naturalmente
um preo a ser pago em termos de velocidade de execuo.
A fim de ser capaz de usar o Disco Rgido para o gerenciamento de memria virtual e
a memria principal lgica, swap files (arquivos de troca) ou swap partitions (parties
de troca) devem ser criados no Disco Rgido. Sem tais parties ou arquivos, a
memria principal limitada ao seu tamanho fsico disponvel realmente.
O sistema de paginao pode ser dividido em duas partes. A primeira consiste no
algoritmo que define a poltica de substituio de pginas, que escolhe a pgina que
vai ser copiada da memria para o disco e determina quando essa pgina deve ser
copiada. A segunda consiste no mecanismo de paginao, que realiza a transferncia
dos dados entre a memria e o disco, quando necessrio.
A poltica de substituio de pginas do Linux usa uma verso modificada do algoritmo
do relgio (ou de segunda chance). O Linux usa um relgio de vrios passos e cada
pgina tem uma idade, ajustada a cada passo do relgio. Mais precisamente, a idade
uma medida da juventude da pgina, isto , de quantas vezes a pgina foi usada
recentemente. As pginas freqentemente usadas tero idade maior e a idade de uma
pgina pouco usada vai caindo gradualmente, a cada passo do relgio, at atingir o
valor zero. Essa informao sobre a idade das pginas permite que o algoritmo de
substituio selecione uma pgina com base na poltica MRU.
O mecanismo de paginao oferece suporte ao gerenciamento de pginas, tanto para
dispositivos e parties dedicados troca de processos, como para arquivos comuns,
embora a troca de pginas de arquivos comuns seja substancialmente mais lenta, em
razo da sobrecarga extra, devida ao sistema de arquivos. Os blocos so alocados a
partir dos dispositivos de troca, de acordo com uma tabela de blocos em uso, que
armazenada na memria principal. O processo que faz a alocao usa um algoritmo
que escolhe a prxima rea de tamanho suficiente para armazenar os dados
requeridos, tentando escrever as pginas em blocos contguos do disco, para obter
melhor desempenho. Para registrar a informao de que uma pgina foi escrita de
volta no disco, esse processo usa uma tcnica disponvel nas tabelas de pginas de
processadores modernos: ele liga o bit de pgina no presente da entrada
correspondente pgina na tabela de pginas, possibilitando que o restante dessa
entrada seja preenchido com o endereo onde a pgina foi escrita no disco.
Memria
Os nveis do cache so inicializados pela BIOS e portanto, tornam-se transparentes
programao. Por essa razo, os nveis do cache no so mapeados pelo modelo de
memria de arquitetura independente e o termo memria fsica em geral usada para
6

se referir RAM. A memria fsica dividida em pginas, na qual definida no


arquivo "asm/page.h" com tamanho de 4 KB para processadores x86 e 8 KB para
processadores Alpha.
A converso do endereo da memria linear para o endereo da memria fsica feita
pelo processador ou pela MMU (Memory Management Unit). Esta converso feita
em 3 nveis, na qual o endereo linear dividido em 4 partes. A primeira parte usada
como um ndice no diretrio de pgina (page directory) e sua entrada faz referncia ao
diretrio intermedirio de pgina (page middle directory). A segunda parte usada
como ndice do diretrio intermedirio de pginas, que por sua vez, faz referncia
Tabela de Pginas (page table). A terceira parte um ndice da Tabela de Pgina, que
aponta (se possvel) para uma pgina na memria fsica. Finalmente, a quarta parte do
endereo fornece o deslocamento dentro da pgina de memria fsica selecionada.
Os processadores x86 suportam apenas converses em dois nveis. Neste caso, o
tamanho do diretrio de pgina intermediria (pmd) definida como um e a entrada do
diretrio de pgina (pgd) passa a ser interpretada como um diretrio de pgina
intermediria (pmd). Entretanto, a converso do endereo linear deve ser dado em 3
nveis (segundo a definio do modelo de memria de arquitetura independente).
Como consequncia, h um aumento da pgd e da tabela de pgina.
Tipos e Estrutura de Swapping
O Linux executa o swapping de duas formas. Na primeira, o chamado dispositivo
de swap, usa-se um bloco completo de um dispositivo como arquivo de swap, uma
partio do Disco Rgido. Na segunda, o chamado arquivo de swap, usa-se arquivos
de tamanho fixo. Para facilitar, ser usado o termo espao de swap para referncia
dos dispositivos de swap e arquivos de swap.
Existe uma estrutura definida para espao de swap. Os primeiros 4096 bytes contm
um mapa de bits. Os bits setados indicam que a pgina de memria est disponvel
para paginao. O nmero do espao de swap contido nos bits setados corresponde
ao deslocamento de bits a partir do incio do espao. Do byte 4086 em diante
armazenado uma string de caracteres "SWAP_SPACE" como um identificador. Isso
significa que apenas 4086 x 8 - 1 pginas de memria (130784 KB) podem ser
gerenciados no espao de swap. O Linux permite, alm disso, administrar 8 espaos
de swap em paralelo, conforme especificado em MAX_SWAPFILES; mas este valor
pode ser acrescido para 64.
A vantagem de se usar dispositivos de swap ao invs de arquivos de swap que a
pgina sempre salva em blocos consecutivos. Em arquivos de swap, uma pgina
pode ser salva em vrios blocos no contguos dependendo de como o sistema de
arquivo fragmentou o arquivo quando ele foi criado. Estes blocos ento precisam ser
encontrados por meio do inode do arquivo de swap.
Num dispositivo de swap, o primeiro bloco dado diretamente pelo deslocamento para
a pgina de memria a ser gravada ou lida. O restante ento segue este primeiro
bloco. Quando um dispositivo de swap usado, somente um pedido de leitura ou
escrita feito para cada pgina, enquanto um arquivo de swap pede um nmero
dependendo da proporo entre o tamanho de pgina e o tamanho do bloco. Num
caso tpico (quando um tamanho de bloco de 1024 bytes usado) isto agrupado em
quatro pedidos separados, para reas de leitura no meio externo que pode no
necessariamente seguir um aps o outro. No Disco Rgido, isto causa movimentos da
cabea de leitura/escrita, o que afeta a velocidade de acesso.
A chamada de sistema swapon loga num dispositivo de swap ou arquivo para o
kernel.
int sys_swapon(const char * special_file);

Concluso

O gerenciamento de memria no Linux realizado com o auxlio de circuitos de


hardware. Esses circuitos permitem que o gerenciamento de memria seja mais
eficiente e seguro, evitando erros causados por software no acesso memria. O
acesso memria fsica no acontece direto do software. No software especificamos o
endereo lgico, o endereo lgico compilado por uma unidade de segmentao,
que o transforma em um endereo virtual. Este endereo virtual representado por um
inteiro de 32 bits, e portanto, pode enderear at 4GB, do endereo 0x00000000 at
0xffffffff.
O endereo virtual transmitido a uma unidade de paginao, que responsvel por
associar o endereo virtual ao fsico, representado por inteiros no negativos de 32 ou
36 bits. O endereo resultante utilizado para acessar um dado presente na memria
dos chips.