Sie sind auf Seite 1von 8

GERENCIAMENTO DE MEMRIA

Aline Rocha Leo, Renan Felipe Toshiaki Bieszczad Ikeda


Universidade Tecnolgica Federal do Paran UTFPR
Campus Campo Mouro CM
Coordenao de Engenharia Eletrnica COELE
BR 369, km 0,5 Caixa Postal: 271,
CEP 87301-006, Campo Mouro - PR - Brasil
e-mail: aline05_leao@hotmail.com , renanikeda@gmail.com
Resumo Este trabalho apresenta um estudo sobre o
gerenciamento de memria e todas as suas principais
caractersticas, como paginao, algoritmos de troca de
pginas, entre outras. Tambm apresentado um
simulador de gerenciamento de memria, no qual foram
implementadas funes para verificar a falta de pgina e
traduzir um endereo virtual para um endereo fsico.
1.

2.

SEM ABSTRAO DE MEMRIA

Os programas simplesmente visualizam toda a memria


fsica, no existe uma abstrao de memria. Apesar disso
existem certa diversidade de modelos de organizao. Alguns
deles podem ser observados na figura abaixo:

INTRODUO

A memria um dos recursos mais importantes de um


computador, ela que faz com que seja possvel executar os
programas que so utilizados no dia-dia. As memrias
tendem a ser cada vez maiores, porm os programas tambm
tendem a ocupar espaos cada vez maiores de memria,
idealmente, a memria deveria ser rapida, no volatil e de
tamanho grande, entretanto, com as tecnologias disponveis
atualmente, ainda no possvel criar uma memria com
essas caracteristicas. Como no vivel se ter a memrial
ideal, utiliza-se a chamada hierarquia de memorias. A
hierarquia de memria nada mais do que a juno das
caractersticas desejadas da memria ideal, essas
caractersticas so divididas em 3 tipos de memria, uma que
denomidada de memria cache, onde possvel se obter
uma velocidade boa, com a contrapartida do tamanho
pequeno e de ela ser voltil, outro tipo de memria que se
encontra na hierarquia, a memria RAM, a qual apresenta
tamanho e velocidade razoveis, mas tambm volti, por
ltimo vem a memria de armazenamento (HD's), as quais
no so volateis e so grandes, porm so lentas.
Um sistema possui uma parte especfica que faz o
controle da memria, a qual denominada de gerenciador de
memrias. O gerenciador deve fazer as manipulaes
necessrias na memria para que ela trabalhe de maneira
eficiente.
Este trabalho tratar exclusivamente da parte do
gerenciador de memria principal (RAM), deixando de lado
a parte que gerencia a memria cache e a memria de
armazenamento.
Outro ponto apresentado so os resultados referentes ao
desenvolvimento de um simulador de gerenciamento de
memria, onde foi desenvolvido um algoritmo que verifica
falta de pgina e faz a traduo de endereos.

Figura 1 - Modelos de organizao


Existe uma forma de organizao onde possvel executar
programas de maneira simultnea, mesmo no modelo sem
abstrao, ela pode ser denomidada de swapping. Ele
consiste em o sistema gravar em um arquivo uma copia do
que esta sendo executado na memria, podendo assim dar
lugar para outro programa.
3.

ESPAOS DE ENDEREAMENTO

Noes de espao de endereamento


O espao de endereamentos a soluo para o fato de
no ser possvel executar dois programas ao mesmo tempo,
um espao de endereamentos um conjunto de endereos
onde o processo pode usar para enderear a memria.
Registradores base e registradores limite
Os registradores base e limite so utilizados na realocao
dinnica quando ela feita de maneira simplificada, eles
limitam o endereamento de um processo e possuem a
desvantagem de possuirem a necessidade de executar uma
adio, uma comparao e, cada referncia a memria.
A figura 2 nos mostra um esquema dos registradores base
e limite, os quais so resposveis, basicamente, por dar a
cada processo um espao de enderaamento independente.

Figura 2 - Esquema de registradores base e limite


Troca de memria
Nem sempre existe memria suficiente para todos os
processos do sistema, dessa forma preciso utilizar alguns
recursos disponveis, como o swapping e a memria virtual.
A alocao e a desalocao de processos pode criar
buracos na memria, eles podem ser combinados com a
compactao de memria, porm nao podem ser usados
devido ao alto tempo de processamento. O tamanho de
espao de alocao varia de acordo com as propriedades do
processo, se o mesmo for de tamanho fixo, o tamanho fixo,
caso o processo for de tamanho varivel, o tamanho
varivel.
As figuras a seguir correspondem a um esquema de troca
de memria.

Figura 4 - (a) alocao de espao para um segmento de


dados em expanso. (b) Alocao de espao para uma
pilha e um segmento de dados em crescimento
Gerenciando a memria livre
Existem 2 modos de gerencia de memria quando ela
atribuda dinamicamente, o mapa de bits e as listas
encadeadas.
O mapa de bits possui um tamanho inversamente
proporcional ao tamanho da unidade de alocao, em caso de
uma unidade de locao muito grande, uma grande
quantidade de memria desperdiada. Ele possui uma
limitao relacionada a busca de bits livres, ela se torna
muito lenta em alguns casos.
Outra forma de gerencia de memria livre, a lista
encadeada. Ela uma lista com posies de memria livre, as
quais so controladas atravs de algoritmos de busca, dentre
eles o First Fit (primeiro encaixe), Next Fit (prximo
encaixe), Best Fit (melhor encaixe), Worst Fit (pior encaixe).
Todos eles poderiam ser mais rpidos se houvessem listas
separadas, para isto criou-se mais um algortimo, o Quick Fit,
ele mantm listas separadas p/ alguns tamanhos de memria
mais solicitados.
4.

Figura 3 - Alocao de memria. As regies mais escuras


correspondem aos espaos no utilizados

MEMRIA VIRTUAL

Cada programa possui seu prprio espao de


endereamento, o qual dividido em blocos chamados
pginas. Essas pginas so mapeadas na memria fsica, mas
nem sempre se encontram na memria fsica, porm isso no
impede a execuo do programa.
Paginao
Na paginao, a memria principal e a secundria so
divididas em paginas de mesmo tamanho, essas paginas na
verdade so uma unidade bsica para a transferncia de
informao.
Para auxiliar na paginao, existe um elemento chamado
tabela de pginas. As tabelas so responsveis por armazenar
informaes sobre as pginas virtuais, como o argumento de
entrada e o argumento de sada.
Um hardware, denominado MMU, o responsvel por
mapear os endereos virtuais em endereos fsicos, o
funcionamento do MMU pode ser compreendido mais
claramente atravs da ilustrao a seguir:

Figura 5 - Esquema de funcionamento da MMU


A estrutura da tabela de pginas pode ser visualizada na
imagem a seguir:

Figura 6 - Esquema da tabela de pginas


5.

ALGORITMOS DE SUBSTITUIO DE
PGINAS

Alguns algoritmos foram desenvolvidos com o objetivo de


otimizar a substituio de pginas quando ocorre falta de
pginas e alguma deve ser removida. Pois escolhendo uma
pgina aleatria para ser removida pode aumentar o esforo
da mquina, j que ela pode ser uma usada com grande
frequncia tendo que ser trazida de volta rapidamente. Os
tipos de algoritmos esto caracterizados abaixo:
Algoritmo timo
Se uma pgina ser referenciada depois de 10000
instrues e outra aps 5000 instrues, o ideal seria que,
numa falta de pgina, a primeira fosse substituda. Porm
impossvel o SO saber quando uma pgina ser acessada
novamente, logo no h como implementar um algoritmo
que se baseie nessa ideia.
Em simulaes possvel utilizar esse algoritmo, j que
executando uma vez o programa, possvel guardar todas as
referncias de pginas e assim, aplicar o algoritmo em uma
segunda execuo.
Algoritmo de substituio de pgina no usada
recentemente (NRU)
A maioria dos SOs possuem 2 bits associados a cada
pgina: bit R que indica se uma pgina foi referenciada ou
no e o bit M que indica se uma pgina foi modificada. Com
base nesses bits criado um algoritmo de substituio.
Pode-se formar uma tabela como demonstrado na tabela1
separando as pginas em 4 categorias, assim, na falta de
pgina, o SO remove aleatoriamente uma pgina da categoria
de ordem mais baixa.
Tabela 1 - grupos de pginas
R M
Grupo
Descrio
0 0
Grupo 0
No
referenciada
e
no
modificada
0 1
Grupo 1
No referenciada e modificada
1 0
Grupo 2
Referenciada e no modificada

Grupo 3

Referenciada e modificada

O grupo 1 a primeira vista parece ser impossvel de


acontecer, mas ocorre pelo fato de que periodicamente o bit
R zerado para diferenciar as pginas que foram usadas
recentemente, mas o estado de M deve ser mantido para
saber se a informao deve ou no ser reescrita em disco.
Portanto, quando ocorre isso com alguma pgina do grupo 3,
ela mandada para o grupo 1.
Esse algoritmo possui como principal vantagem o fato
de ser fcil
de ser entendido e implementado, alm do
que possui um desempenho satisfatrio.
Algoritmo Primeiro a entrar, primeiro a sair
(FIFO)
Esse algoritmo funciona da seguinte maneira: o SO
mantm uma lista encadeada de todas as pginas utilizadas
na memria da mais antiga para a mais recente, assim,
quando h falta de pgina, retirada a pgina do comeo da
lista.
um algoritmo de baixo custo, porm no eficiente, j
que uma pgina antiga muito utilizada pode ser retirada da
lista.
Algoritmo da segunda chance (SC)
Esse algoritmo serve para evitar a retirada constante de
pginas muito utilizadas do algoritmo anterior. Diferencia-se
do FIFO apenas pelo fato de antes de eliminar uma pgina, o
SO analisa o estado do bit R. Se o bit R estiver em 0, ento a
pgina retirada. Se o bit R estiver em 1, ele zerado e
dado uma segunda chance para esta pgina, enviando-a
para o final da lista.
Algoritmo de pgina do relgio
Esse algoritmo basicamente uma forma diferente da
aplicao do algoritmo de segunda chance, j que o SC
desnecessariamente
eficaz
por
ficar
colocando
constantemente pginas ao final de uma lista.
Diferente da SC, as pginas so colocadas em uma lista
circular com um ponteiro apontando para a pgina mais
antiga (primeiro da lista no algoritmo anterior), e toda vez
que h falta de pgina, analisada a pgina apontada pelo
ponteiro e analisado o estado de R. Se o bit for 0, a pgina
retirada e o ponteiro vai para a prxima posio, seno ele
zera o R e pula pra prxima posio at encontrar alguma
pgina com um R zerado.
Algoritmo de pgina usada menos recentemente
(LRU)
Esse algoritmo se baseia na seguinte ideia: Uma pgina
muito utilizada em instrues recentes, provavelmente ser
utilizada em instrues futuras, logo no deve ser retirada
numa falta de pginas.
o algoritmo que mais se aproxima do timo, porm sua
aplicao cara, j que criada uma lista encadeada da
pgina mais utilizada at a menos utilizada e cada vez que
uma pgina referenciada, a lista deve ser atualizada.
Esse tipo de algoritmo pode ser aplicado tanto por
software como por hardware, porm nem sempre as
mquinas possuem suporte para realiz-lo por hardware.
H duas maneiras de implementao por hardware, porm
nesse estudo ser analisado apenas o modelo mais simples.
Neste, deve ser incrementado um contador de 64 bits C, no
qual a cada atualizao de pgina esse contador

incrementado e o valor armazenado numa tabela de


pginas, assim, cada vez que houver falta de pginas, o SO
analisa essa tabela e a com o menor valor ser a pgina
retirada.
Por software existem 2 maneiras que sero analisadas:
NFU (no usada frequentemente) e Aging (envelhecimento).
As duas esto caracterizadas abaixo.
NFU: Para aplicar esse algoritmo deve-se criar um
contador para cada pgina. Assim, a cada
atualizao no relgio da mquina so analisadas as
pginas para saber se foram referenciadas ou no
para ir incrementando o seu contador de
referncias e ir atualizando a lista de pginas. O
problema com esse algoritmo que ele nunca
esquece nada, assim se em uma pgina foi muito
utilizada em uma determinada funo, ela sempre
estar na frente da lista, mesmo que no esteja
sendo utilizada mais e pginas com contador baixo
podem ser retiradas, mesmo se ainda estiverem
sendo usadas.
Aging: Para resolver o problema existente no
algoritmo anterior este foi criado. Nesse, alm de
analisar quantas vezes a pgina foi utilizada,
tambm analisada quando ela foi utilizada. Ele se
consiste nos seguintes passos: A cada interrupo
do relgio o bit R rotacionado para a direita e o
novo estado de R colocado a sua esquerda, assim,
se aps vrias interrupes uma pgina no for
referenciada, ela ter em seus bits mais
significativos o valor 0 e ser retirada em caso de
uma falta de pgina. Um exemplo dessa aplicao
est demonstrado na figura 7, no qual mostra o valor
do contador de 6 pginas aps algumas interrupes
de relgio.

possuir 2 ou mais nveis, e quanto maior for a quantidade de


nveis, mais flexvel a tabela vai ser. A figura a seguir mostra
a estrutura de uma tabela multinvel:

Figura 7 - Exemplo de aplicao do Aging

Figura 9 - Esquema de uma tabela invertida

Figura 8 - Estrutura de tabela multinvel


Tabelas em hash
Elas so comuns em espaos de endereamento maiores
que 32 bits, nela o nmero de pgina virtual dividido em
tabelas. Essas tabelas do origem a uma cadeia de elementos
que se traduzem para o mesmo local. Nesse tipo de tabela, os
nmeros de pagina virtual so comparadados em busca de
uma combinao, em caso de existir uma, o quadro fsico
correspondente extrado.
Tabela de pgina invertida
Nas tabelas de pginas invertidas existe uma entrada para
cada pgina real da memria. A entrada consiste em um
endereo que esta armazenado nesse local da memria real
com informaes sobre o preocesso que possui essa pgina.
Esse tipo de tabela diminuiu a quantidade de memria
necessria para armazenar cada tabela de pginas, entretanto,
aumenta o tempo necessrio para pesquisar a tabela quando
ocorre uma referncia de pgina. Ela utiliza a tabela hash
para limitar a busca a uma ou, no mximo, algumas entradas
de tabela de pginas.
A ilustrao a seguir mostra um esquema de uma tabela
invertida.

7.
6.

ESTRUTURAS DE TABELAS DE PGINA

Tabelas de pginas hierrquicas ou multinvel


Nas tabelas hierrquicas, o espao de endereamento
dividido em mltiplas tabelas de pgina. As tabelas podem

RESULTADOS

Um algoritmo que simula requisies de processos para a


memria foi implementado utilizando a linguagem C. Nesse
algoritmo, uma estrutura de tabela de pginas de dois nveis
foi implementada. Essa estrutura foi simulada com o auxlio

de struct e vetores. A estrutura, assim como a declarao dos


vetores pode ser observada no cdigo em anexo.
As requisies memria foram simuladas atravs de um
arquivo, o qual possuia 3 nveis, o primeiro representa o
ndice pra primeira tabela, a qual possue na posio indicada
pelo ndice uma varivel que faz a relao dessa primeira
tabela com o indce de uma segunda tabela. Nessa segunda
tabela, o segundo nvel do arquivo utilizado para buscar a
posio correspondente a ele, nessa posio encontram-se
informaes que relacionam com um determinado frame de
memria fsica. Por fim, o terceiro nvel do arquivo
representa o deslocamento dentro do frame indicado pela
segunda tabela.
Todas essas informaes auxiliam no desenvolvimento do
algoritmo que faz a traduo de endereo virtual para
endereo fsico, o qual basicamente utiliza apenas as
informaes do frame e do deslocamento, que se encontra no
nvel 3 do arquivo.
Para se fazer o algoritmo de traduo, o valor relacionado
ao frame multiplicado por 4096. Soma-se a esse valor, o
deslocamento encontrado no nvel 3 do arquivo. Para
exemplificar, sendo o frame 34866 indicado pela requisio:
34 50 120, onde o 34 indica a posio da primeira tabela que
relaciona a mesma a segunda, o 50 o valor do deslocamento
na segunda tabela e 120 o deslocamento na memria fsica,
pode-se chegar no endereo fsico real da seguinte maneira:
(34866*4096)+120 = 142811256
O cdigo com esse algoritmo de traduo encontra-se em
anexo.
Outra simulao desenvolvida foi a verificao de falta de
pgina, a qual foi simulada utilizando-se um flag na tabela
de segundo nvel, o qual seria 1 se a pgina estivesse alocada
e 0 se a pgina no estivesse alocada. Uma verificao foi
feita no flag, em caso de 1, uma mensagem de falta de pgina
foi exibida, caso contrrio, uma mensagem indicando que a
requisio foi completada foi exibida e o flag passou a ter o
valor 1, visto que a pgina foi alocada na requisio.
8.

CONCLUSO

Com o estudo do gerenciamento de memria e todas as


suas caractersticas, foi possvel compreender o
funcionamento da memria de um computador. A memria
um dos elementos mais importantes do computador, pois
nela que se executam todos os processos, j estudados
anteriormente. Conhecendo as tcnicas envolvidas no
gerenciamento de memria, possvel desenvolver um
hardware eficiente e que vai funcionar da melhor maneira
possvel.
Com o estudo terico relacionado as propriedades do e o
desenvolvimento, mesmo que de forma parcial de um
gerenciador de memria, foi possvel reforar os contedos
aprendidos anteriormente em sala de aula.
9.

REFERNCIAS

TANENBAUM, A. S. Sistemas Operacionais Modernos. 3. ed. So


Paulo: Pearson Prentice Hall,2009.

Anexos
Estruturas utilizadas (memoria.h)
struct indice_tabela2 {
unsigned long pos_real; //relaciona a uma posicao de
memoria fisica
};
struct pagina1{
int pos_real1; //relaciona o primeiro nivel de tabela com
uma posicao da tabela 2
};
typedef struct indice_tabela2 ELEMENTO2;
struct frame{ //tabela 2 (segundo nivel)
int flag; //0 se a pag esta livre, 1 se esta ocupada
int tempoChegada;
int tempoUsada;
int vezesUsada;
ELEMENTO2 elemento_t2[1024]; //lista de 1024
elementos que se relacionam com a memoria fisica
};
struct tabela {
int mais, menos, desloc; //tabela que faz a leitura das
requisicoes de um arquivo
};
typedef struct tabela TABELA;
typedef struct frame FRAME;
typedef struct pagina1 FRAME_EXT;

Parte de funes e cdigos


#include <stdio.h>
#include <stdlib.h>
#include "memoria.h"
int TAM = 1024;
typedef char *string;
FRAME frame_2[1024];
TABELA tabelaPag[10];
FRAME_EXT frame_1[1024];
void alocaPagina();
void carregaArq(string arq){
FILE *arquivo;
arquivo = fopen(arq, "r");
int i=0;
while (!feof(arquivo)){
fscanf(arquivo, "%d %d %d\n", &tabelaPag[i].mais, &tabelaPag[i].menos, &tabelaPag[i].desloc);
i++;
}
fclose(arquivo);
};
void frame1(){
int i;
for(i=0; i<TAM; i++){
frame_1[i].pos_real1 = i;
}
}
void MMU(TABELA *tabelaPag, FRAME *frame, FRAME_EXT *frameExt){ // representando a memoria fisica, com um
10^3 a menos do que deveria ser, pois nao foi possivel representar
int mais, menos, desloc, aux, i;
unsigned long pos;
for (i=0; i<10; i++){
mais = tabelaPag[i].mais;
menos = tabelaPag[i].menos;
desloc = tabelaPag[i].desloc;
aux = frame[frameExt[mais].pos_real1].elemento_t2[menos].pos_real;
pos = (aux*4096)+desloc;
printf("End. fisico da requisio requisio %d %d com deslocamento %d: %lu", tabelaPag[i].mais, tabelaPag[i].menos,
tabelaPag[i].desloc, pos);
printf("\n");
}
}
//deixando a primeira pagina de cada frame ocupada e tambem setando o frame de memoria fisica que cada frame virtual
aponta
void pageDefault(){
int i, j, k;
double aux;
aux = 0;
for (i=0; i<TAM; i++){
//frame_2[i].flag = 1;
for (j=0; j<TAM; j++){
frame_2[i].elemento_t2[j].pos_real = aux;
aux++;
}

}
}
void verificaFaltaDePagina(){
int i, mais, menos, desloc;
int tempo;
for (i=0; i<10; i++){
mais = tabelaPag[i].mais;
//menos = tabelaPag[i].menos;
if (frame_2[frame_1[mais].pos_real1].flag == 1){
printf("Falta de pagina para a requisio %d %d com deslocamento %d", tabelaPag[i].mais, tabelaPag[i].menos,
tabelaPag[i].desloc);
printf("\n");
//return 1;
}
else{
frame_2[frame_1[mais].pos_real1].flag = 1;
printf("Requisio %d %d com deslocamento %d foi alocada com sucesso", tabelaPag[i].mais, tabelaPag[i].menos,
tabelaPag[i].desloc);
printf("\n");
//frame_2[frame_1[mais].pos_real1].tempoChegada = tempo;
//return 0;
}
}
}
/*void alocaPagina(){
int i, mais, menos;
int aux = verificaFaltaDePagina();
for (i=0; i<10; i++){
if (aux==1) {
printf("Page fault. \n");
}
}
}*/
int main(){
int i, j;
carregaArq("teste.txt");
frame1();
pageDefault();
verificaFaltaDePagina();
//printf("%d\n", frame_2[0].flag);
//printf("%d\n", frame_2[frame_1[30].pos_real1].pagina[45].flag);
/*for (i=0; i<10; i++){
printf("%lud %d\n", frame_2[tabelaPag[i].mais].elemento_t2[tabelaPag[i].menos].pos_real, tabelaPag[i].desloc);
}*/
MMU(tabelaPag, frame_2, frame_1);
//verificaFaltaDePagina();
//alocaPagina();
/*for (i=0; i<TAM; i++){
for(j=0; j<TAM; j++)
printf("%d \n", frame_2[i].pagina[j].pos_real);
}*/
//printf("%d %d %d", tabelaPag[0].mais, tabelaPag[0].menos, tabelaPag[0].desloc);
}

Das könnte Ihnen auch gefallen