Escolar Documentos
Profissional Documentos
Cultura Documentos
Gerenciamento de Memria
Prof. Dr. Mrcio Andrey Teixeira
Todo programador deseja dispor de uma memria infinitamente grande, rpida e no voltil e tambm
de baixo custo.
Porm, infelizmente, com a tecnologia atual, isso no possvel, tornando-se necessrio utilizar uma
hierarquia de memria, que combina: uma memria principal, uma memria secundria, e cabe ao
sistema operacional coordenar a utilizao destas memrias.
Quando um sistema organizado desta maneira, somente um processo pode ser executado em um
determinado instante.
Quando um usurio executava um programa, o prompt do sistema ficava ocupado aguardando o
trmino do processo.
Quando um processo era encerrado, o prompt ficava livre para o usurio entrar com outro comando
(ou processo a ser executado).
Na Figura 2-a, vemos como se representa o esquema de parties fixas com filas de entrada separada.
Desvantagem desse esquema: A fila de uma grande partio ficar vazia e a fila de uma pequena partio
ficar cheia.
Nesse caso, processos pequenos tem que esperar pela liberao de memria, embora exista muito
espao de memria disponvel.
Organizao alternativa: Manter uma nica fila, como pode ser visto na Figura 2-b. Nesse caso,
sempre que uma partio estiver disponvel, o processo mais prximo da fila e que caiba na partio
poder ser carregado e executado.
Como indesejvel desperdiar uma grande partio com um processo pequeno, outra estratgia seria
pesquisar o maior processo da fila de entrada e alocar a partio de memria ao maior processo que
pudesse ser alocado.
Problema: Discriminao com os processos pequenos.
Soluo: Deve haver pelo menos uma partio pequena para permitir a execuo dos processos
pequenos.
Esses esquema de parties fixas foi utilizado por muitos anos pelo OS/360. simples de entender e
igualmente simples de implementar. Os processos que esto chegando permanecem enfileirados at que
a partio adequada esteja disponvel.
Modelagem da Multiprogramao
O uso da multiprogramao melhora a utilizao da CPU. De modo genrico, se, em mdia, um
processo permanece em execuo apenas 20% durante o tempo que permanece em memria, com cinco
processos simultaneamente na memria a CPU deveria permanecer 100% do tempo ocupado.
Considere o modelo probabilstico. Suponha que um processo gaste uma frao p do seu tempo
esperando pela finalizao de uma solicitao de E/S. Com n processos simultneo na memria, a
probabilidade de todos os n processos estarem esperando por uma requisio de E/S pn .
A utilizao da CPU ento dada pela
frmula: CPU = 1 - pn
Realocao de Memria
A multiprogramao introduz dois problemas essenciais para serem resolvidos: a realocao e a
proteo.
Observe a Figura 2. Observe que processos diferentes executam em espaos de memria diferentes.
Quando um programa ligado (programa principal, procedimentos escritos pelos usurios,
procedimentos de biblioteca), o ligador (Linker) tem de saber em que endereo o programa deve
comear na memria.
Suponha, por exemplo, que a primeira instruo seja uma chamada a um procedimento situado em
um endereo absoluto 100, dentro do arquivo binrio produzido pelo ligador.
Se esse programa fosse carregado na partio 1 (a partir do endereo 100k), essa instruo de
chamada faria saltar para o endereo absoluto 100 que est dentro do sistema operacional, enquanto
o correto seria saltar para o endereo 100K + 100 dentro da partio 1.
Realocao de Memria
Uma possvel soluo para este exemplo seria modificar as instrues dos programas segundo
partio de memria alocado. Programas carregados na partio 1 tero 100k adicionados a cada
endereo. Isso conhecido como realocao.
Uma das solues para este problema foi dividir a memria em blocos de 2k, (isso utilizado pelo
computador IBM 360) e associar um cdigo de proteo de 4 bits a cada bloco. Com isso, o
hardware interrompia qualquer tentativa de um processo em execuo acessar um bloco de
memria cujo seu cdigo de proteo era diferente. Somente o sistema operacional podia modificar
este cdigos.
Uma outra soluo seria inserir dois registradores especiais, denominados: Registrador Base e
Registrador Limite.
Troca de Processos
Em um sistema em lote, simples e eficiente organizar a memria em parties fixas. Cada Job
carregado em uma partio ao alcanar o incio da fila e permanece na memria at a concluso de
sua execuo.
Em relao aos sistemas com compartilhamento no tempo, esta histria diferente. s vezes no h
memria principal suficiente para conter todos os processos ativos, de modo que os excedentes
devem ser mantidos em disco e trazidos dinamicamente para a memria a fim de ser executado.
Dois mtodos gerais para o gerenciamento de memria podem ser usados, dependendo do recurso
disponvel:
Troca de processos (swapping): Estratgia mais simples, consiste em trazer totalmente cada
processo para a memria, execut-lo durante um certo tempo e ento devolve-lo ao disco.
Memria virtual: Permite que programas possam ser executados mesmo que estejam apenas
parcialmente carregados na memria principal.
Quando trocas de processos deixam muitos espaos vazios na memria, possvel combin-los
todos em um nico espao contguo de memria, movendo-os para os endereos mais baixos. Essa
tcnica denominada compactao de memria.
Devido ao tempo gasto, essa tcnica no muito utilizada.
Um ponto muito importante a ser considerado a quantidade de memria que deve ser alocada a
um processo quando este for criado.
Se um processo for criado com um tamanho fixo, inaltervel, ento a alocao simples: o sistema
operacional ir alocar exatamente aquilo que necessrio, nem mais nem menos.
Porm, se a rea de dados puder crescer, por exemplo, alocando dinamicamente a memria,
problemas podero ocorrer sempre que um processo tentar crescer.
Se houver um espao livre disponvel adjacente ao processo que necessita crescer, ele poder ser
alocado ao processo
Por outro lado, se estiver adjacente a outro processo, o processo que necessita crescer poder ser
movida para uma rea de memria grande o suficiente para cont-lo, ou um ou mais processos tero
de ser transferidos para o disco a fim de criar essa rea disponvel.
Se esperado que um processo cresa durante a sua execuo, provavelmente ser uma boa idia
alocar uma pequena memria extra, para evitar a transferncia de um processo para a memria, ou
a movimentao dele do mesmo.
Com isso, reduziria o custo extra relacionado a movimentao do processo. Porm, ao voltar para o
disco, somente a memria em uso dever ser transferida.
A figura a seguir mostra a configurao da memria na qual o espao para crescimento foi alocado
para dois processos.
Mapa de Bits
Com o mapa de bits, a memria dividida em unidades de alocao, que pode conter apenas
poucas palavras ou ter vrios Kbytes.
Associado a cada unidade de alocao, existe um bit no mapa de bits, o qual vale 0 se a
respectiva unidade de alocao estiver disponvel e 1 se tiver ocupada.
A figura a seguir mostra parte da memria e o mapa de bits correspondente.
a) Uma parte da memria com cinco segmentos alocados a processos e trs segmentos de memria
livre.
b) Mapa de bits correspondente.
c) As mesmas informaes dos bits correspondente em uma lista encadeada.
Principal problema dessa tcnica: Quando se decide carregar na memria um processo com k
unidades, o gerenciador de memria precisa encontrar no mapa de bits uma seqncia de k bits
consecutivos em 0.Essa operao de busca muito lenta.
Cada elemento dessa lista encadeada especfica um segmento de memria disponvel (H), ou um
segmento de memria utilizado por um processo (P), o endereo onde se inicia o segmento e o
ponteiro para o prximo elemento da lista.
Nesse exemplo, a lista de segmentos mantida ordenada por endereo. Essa ordenao apresenta a
vantagem de permitir uma utilizao rpida e simples da lista sempre que um processo terminar sua
execuo ou for removido da memria.
First fit (o primeiro que couber): o algoritmo mais simples. O gerenciador de memria procura
ao longo da lista de segmentos de memria por um segmento livre que seja suficientemente grande
para esse processo.
Esse segmento quebrado em duas partes, uma parte alocado ao processo e a parte restante
transforma-se em um segmento de memria livre de tamanho menor.
Next fit: Uma pequena alterao no algoritmo First fit resulta no algoritmo next fit (o prximo que
couber). Este algoritmo funciona da mesma maneira que o algoritmo First fit, exceto pelo fato de
sempre memorizar a posio em que encontra um segmento de memria disponvel de tamanho
suficiente.
Memria Virtual
H muitos anos, os programadores j eram obrigados a lidar com programas muito maiores que a
memria disponvel.
A soluo geralmente adotada era dividir o programa em mdulos (programao modular),
denominados overlay. Por exemplo, o overlay 0 seria o primeiro a ser executado.
Esse quando terminasse, ele chamaria outro overlay, que seria carregado em seu lugar na memria.
A idia bsica desse conceito que o tamanho total do programa, ou seja, seu cdigo mais seus
dados e pilha, pode exceder a quantidade de memria fsica disponvel para ele.
Paginao
A maioria dos sistemas com memria virtual utiliza uma tcnica de paginao. Em qualquer
computador existe um conjunto de endereos de memria que os programas podem gerar ao serem
executados.
Por exemplo, quando um programa executa a instruo:
MOV, REG 1000
Ele deseja copiar o contedo do endereo de memria 1000 para o registrador REG, (ou ao
contrrio, dependendo do computador.)
Os endereos podem ser gerados com o uso de indexao, de registradores base, registradores de
segmento ou outras tcnicas.
Esses endereos gerados pelo programa so denominados endereos virtuais, e constituem o
espao de endereamento virtual.
Suponha que, um computador pode gerar endereos virtuais de 16 bits, ou seja de 0 a 64k. Porm,
esse computador tem somente 32K de memria fsica.
Nesse caso, possvel escrever um programa com 64K de tamanho, porm, ele no poder ser
alocado inteiramente na memria fsica para ser executado.
Uma cpia completa do cdigo do programa deve estar presente em disco, de modo que partes
possam ser carregadas dinamicamente na memria quando necessrio.
As pginas e os frames so sempre do mesmo tamanho. Em nosso exemplo, as pginas tem 4K. Com
64K de memria virtual, e 32K de memria fsica, podemos ter:
16 pginas virtuais;
8 frame pages;
6
MMU
Memria Virtual
Memria Fsica
As transferncia entre memria e disco so feitas em unidades de uma pgina. Quando o programa
tenta acessar o endereo 0, por exemplo, usando a instruo:
MOV REG, 0
o endereo virtual 0 enviado para MMU, a qual detecta que esse endereo virtual situa-se na
pgina virtual 0 (de 0 a 4095), que, de acordo com seu mapeamento, corresponde ao frame 2 (de
8192 a 1228).
8K - 12K
6
0K - 4K
0 - 4095
8192- 12287
2
MMU
Memria Virtual
Memria Fsica
Neste exemplo, somente oito pginas virtual podero ser mapeados para a memria fsica. Imagine o
que aconteceria quando um programa executasse a seguinte instruo:
MOV REG, 32780
Esse endereo corresponde ao pgina virtual 8 (que se inicia em 32768).
A MMU constata que esta pgina no est mapeada (o que indicado por um X na figura) e fora o
desvio da CPU para o sistema operacional. Esse interrupo (trap), denominada de falta de pgina
(page fault).
O sistema operacional ento escolhe um frame pouco usado e o salva em disco, ou seja reescreve seus
dados de volta no disco. Em seguida ele carrega a pgina virtual referenciada pela instruo no frame
recm-liberado.
Por exemplo, imagine se o frame escolhido seja o frame 1. Com isso, a pgina virtual 8 seria
carregada a partir do endereo 4K e duas alteraes sero feitas na MMU:
1 O sistema operacional ir marcar, na tabela de pgina virtuais, a entrada da pgina virtual 1 como
'no mapeada'.
2 Marcar a pgina virtual 8 como mapeada. Substitui o 'X' por um '1'.
7
X
36K - 40K
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
0 - 4095
MMU
Memria Virtual
Memria Fsica
32780
pgina 8
Incio
na
X
36K - 40K
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
0 - 4095
Memria Virtual
MMU
Memria Fsica
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
0 - 4095
Memria Virtual
MMU
Memria Fsica
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
Memria Virtual
MMU
Memria Fsica
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
Memria Virtual
MMU
Memria Fsica
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
Memria Virtual
MMU
Memria Fsica
X
36K - 40K
32K -36K
28K -32K
28K -32K
24K -28K
24K -28K
20K -24K
20K -24K
16K -20K
16K -20K
12K -16K
12K -16K
8K - 12K
8K - 12K
4K - 8K
4K - 8K
0K - 4K
0K - 4K
Memria Virtual
MMU
Memria Fsica
O funcionamento da MMU.
A figura ao lado mostra o
mapeamento da MMU:
Endereamento = 16, onde:
4 bits = nmero de pgina
12 bits = Deslocamento
O nmero de pgina usado como
ndice para a tabela de pgina.
4 bits = Nmero de
pgina
Endereamento de: 0
at 7
4 bits = Nmero de
pgina
ndice dos frames da memria fsica.
0
0101
0100
0110
3
.
.
7
1010
1000
Tabela de pgina do
processo
4 bits = Nmero de
pgina
Exemplo:
4 bits = Nmero de
pgina
15
.
.
0000
0000
0110
0001
4K
0010
4K
Tabela de pgina
Exemplo:
Endereo lgico de 16 bits
0
Exemplo:
Endereo lgico de 16 bits
0
0101
0100
0110
1000
Tabela de pgina do
processo
Exemplo:
Endereo lgico de 16 bits
0
0101
0100
0110
1000
Tabela de pgina do
processo
Exemplo:
Endereo lgico de 16 bits
0
0101
0100
0110
1000
Tabela de pgina do
processo
10
01
Exemplo:
Endereo lgico de 16 bits
0
0101
0100
0110
1000
Tabela de pgina do
processo
10
01
Exemplo:
Endereo lgico de 16 bits
0
0101
0110
1001
1000
Tabela de pgina do
processo
Endereo Fsico
Prof. Dr. Mrcio Andrey Teixeira Sistemas Operacionais
Tabela de Pginas
No caso mais simples, o mapeamento de endereos virtuais em endereos fsicos feito da maneira
que foi descrito.
O endereo virtual dividido em nmero de pginas virtuais (bits mais significativos) e
deslocamento (bits menos significativos).
O nmero da pgina virtual usado como um ndice dentro da tabela de pgina para se encontrar a
entrada dessa tabela associada a pgina virtual em questo.
A partir dessa entrada, chega-se ao nmero da moldura da pgina fsica (frame) caso ela exista.
O nmero do frame conectado aos bits de deslocamento, substituindo assim o nmero da pgina
virtual pela pgina fsica (frame).
O objetivo da tabela de pginas mapear pginas virtuais em pginas fsicas. Matematicamente, a
tabela de pagina uma funo que usa o nmero da pgina virtual como argumento e retorna o
nmero da pgina fsica.
Tabela de Pginas
Apesar desse mtodo ser bastante simples, dois pontos impotentes devem ser considerados:
1 A Tabela de pgina pode ser extremamente grande;
2 O mapeamento deve ser rpido;
O primeiro ponto conseqncia do fato de os modernos computadores utilizarem endereos
virtuais de 32 bits.
Com uma pgina de 4K, teremos um milho de pginas virtuais. Neste caso, a tabela de pgina ter
um milho de entrada;
Cada processo mantm sua tabela prpria tabela de pginas, pois o mesmo possui seu endereo
virtual;
O segundo ponto advm do fato do mapeamento virtual-fsico ser efetuado a cada referncia de
memria. Isso poder gerar um gargalo no sistema, caso esse tempo seja muito grande.
Tabela de Pginas
A necessidade de se ter tabelas de pginas enormes e ao mesmo tempo mapeamento rpido uma
restrio significativa.
O projeto mais simples (conceitualmente) ter uma nica tabela de pginas que consista em um
vetor de registradores rpidos em hardware, com uma entrada para cada pgina virtual indexado
pelo nmero da pgina virtual.
Quando um processo for executado, sistema operacional carregar esses registradores a partir de
uma cpia da tabela de pginas desse processo mantida na memria.
Problema, custo !!!!! Quanto maior a tabela de pginas, mais caro a implementao.
No outro extremo tem-se toda a tabela de pgina na memria. Todo o hardware necessrio se
resume em um nico registrador, que aponta para o incio da tabela de pginas.
Esse mtodo apresenta a desvantagem de requerer muitos acessos a tabela de pgina durante a
execuo das instrues;
0
1
2
3
:
:
:
:
no referenciada, no modificada.
no referenciada, modificada.
referenciada, no modificada.
referenciada, modificada.