Você está na página 1de 26

SISTEMA OPERACIONAL II PARTE 2

4) COMO CONSEGUIR EXECUTAR UM PROCESSO EM UM ENDEREO QUALQUER


DE MEMRIA?

5) Correo de endereos em tempo de carga


6) Registrador de base
7) Uso de endereamento relativo a instancia atual
8) Segmentao
9) Paginao

5) O USO DE ENDEREO RELATIVO

A INTEL tem Registrador de base e Endereamento relativo a instancia atual. Ela tem estes tipos de
endereamento somente para alguns tipos de instrues. Precisamos saber: O que a memria contm?
O que armazenado na memria?

A memria possui dois tipos de coisas: Cdigo executvel que est na memria e Variveis Globais,
Locais e Dinmicas. A CPU s executa coisas que esto na memria. Cada processo tem cdigos
executveis e variveis. Esta a diviso bsica.

6) REAS DE MEMRIA DE UM PROCESSO (INTRODUO SEGMENTAO)

As variveis mudam de valor. No existem processos que no usem variveis. Embora o cdigo
executvel no tenha muita diferena entre eles. As variveis possuem uma diviso importante dentro
delas.

Existem diversas formas de se usar uma varivel em um programa de linguagem de auto nvel como
Delfi ou C. As formas de se usar a varivel determinam como elas sero armazenadas dentro da rea
de cdigo do processo.

Existem trs formas de se armazenar a varivel dentro da rea de cdigo do processo: Global, Local e
Dinmica.

reas de Um Processo: Cdigo, Dados (variveis locais) e rea de pilha (cada processo tem a sua). A
amarrao das variveis locais feita em tempo de execuo.

7) VARIVEIS GLOBAIS

As variveis Globais existem o tempo todo no processo que est em execuo e geralmente qualquer
parte do processo consegue usar, alterar e consultar esta varivel. Quando o programa comea ela
passa existir e quando o programa termina ela deixa de existir.

Durante a compilao do programa o compilador verifica quantas variveis Globais existem e qual o
tamanho de cada uma delas. E coloca no cabealho do arquivo executvel para informar ao processo
durante sua execuo a quantidade de KB necessrios para as variveis Globais.

8) VARIVEIS LOCAIS

As variveis Locais s podem ser usadas dentro de uma sub-rotina. Elas so declaradas em uma sub-
rotina, por exemplo, uma funo. O problema maior que ocorre com as variveis Locais est dentro
de funes recursivas, como mostra o exemplo abaixo:

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 1
SISTEMA OPERACIONAL II PARTE 2

function FAT(n: integer): integer;


begin
if n = 1 then
FAT := 1
else FAT := n * FAT(n-1);
end;

program principal;
var FAT: integer;
begin
FAT := 1;
for i := 1 to n do
FAT := FAT * i;
End.

A remoo a complicao desta alocao de varivel local em uma funo recursiva, pois no existe
uma nica varivel n na memria existem vrios n. Para resolver este problema utilizada uma pilha
de execuo. Na pilha de execuo temos o seguinte funcionamento, supondo n = 4:

Aloca-se no sentido de cima para baixo a varivel n. Assim existem quatro variveis de
nome n na memria, criada a cada chamada da funo recursiva: n = 4, n = 3, n = 2, n = 1;

Quando desaloca na ordem inversa da alocao, de baixo para cima, que sero feitos os
clculos do fatorial: n = 1, n = 2, n = 3, n = 4.
Pilha
4
3 alocando desaloca
2
1
As variveis Locais possuem algumas particularidades e se assemelha muito ao parmetro de uma
funo. Por exemplo, a funo FAT (N: Integer) dos exemplos 2 e 3 abaixo, calcula o fatorial de um
nmero. O parmetro tambm se assemelha muito a varivel local porque s usado em um
determinado local.

Exemplo 1 Exemplo 2 - Delfi Exemplo 3 - Pascal

Procedure P; Function Function


Var I = Integer FAT(N:Integer); FAT(N:Integer);
Begin Var A, I:Integer Begin
For I=1 to 10 Do Begin If N>1 Then
Begin A:=1; Return FAT(N-1)*N
For I:=1 to N Do Else
End; A:=A*I; Return 1
End; End; End;
FAT:=A //Return A
End;

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 2
SISTEMA OPERACIONAL II PARTE 2

Anlise da varivel N na memria: A varivel N um parametro, ou seja, uma varivel local. Ela
tem particularidades. Que particularidades so estas? A memria contm ao mesmo tempo vrios N
diferentes.

Digamos que chamamos a subrotina, ou seja, a funo: J:=FAT(3). O que vai acontecer? Em alguma
parte da memria temos a varivel N que um parametro com o valor inicial 3.

n 3 fat (3) = fat ( 3 ) * 3 = 6

n 2 fat (2) = fat ( 1 ) * 2 = 2

n * 20 fat (1) = 1

O ltimo "n" ser sempre o ativo, marcado por um indicador. Qualquer nova atribuio do valor ser
feito na ltima.

Entra na subrotina FAT(N:Integer) e verifica que 3 > 1. O then da funo chama recursivamente a
funo FAT, mas agora o parametro mudou para N=2. No podemos simplismente trocar o N que
est com o valor 3 pelo valor 2.

Por que no podemos fazer isto? Porque depois que calcula o fatorial de 2 falta multiplicar por N
cujo o valor original era 3. O valor original de N no pode mudar o valor do parametro N.

O que acontece? Na memria criado outro N com o valor 2. Como a funo sabe qual N utilizar?
Ela sabe porque tem indicao externa que diz qual o N vlido naquele momento. Neste caso, o
N=2. Executa-se mais uma vez a funo FAT, mas agora o valor de N=1.
Memria
N=3
FAT(3) = FAT(2)*3 = 6
N=2 FAT(2) = FAT(1)*2 = 2
FAT(1) = 1
N=1

Quando for fazer o clculo do fatorial de 3 ao criar o N a seta vai descendo ao utilizar o N no clculo a
seta vai subindo. Este o jeito de persistir na memria vrios valores do N, pois s assim possvel
fazer o clculo.

A varivel local diferente da varivel Global. A varivel Global s tem uma para o programa inteiro. A
local no para a mesma sub-rotina tem vrias variveis na memria com valores diferentes.

No entanto, em um determinado momento de tempo somente uma varivel estar sendo utilizada.
diferente a forma de se guardar as variveis Globais e Locais.

Variveis Locais tem mais de uma a medida que necessite, por exemplo, se o N for igual a 100. Quantas
variveis Locais teramos na memria? 100. Ento no se sabe a priori quantas variveis locais sero
necessrias. Este nmero descoberto na execuo.

A varivel Global criada no incio do programa e a varivel Local criada durante a execuo do
programa. Enquanto que a varivel Local criada dinamicamente depois que a rotina acaba as variveis
so destrudas dinamicamente deixando de ocupar espao na memria.
Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 3
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Antes de se chamar a sub-rotina funo FAT, no existe N na memria ao chamar a FAT passa a alocar
o 1 N na memria o 2 N e o 3 N. Ao retornar o valor do 3 N ele apagado. Assim sucessivamente at
o 1 N.

A primeira varivel local a ser destruda e a ltima que foi criada e a ltima a ser destruda a primeira
que foi criada. A varivel local criada e destruda no momento da execuo. A varivel local ativa
sempre a ltima da execuo no momento.
Memria
N=3

N=2

N=1

O N=1 est ativo ao executar a funo FAT do cdigo a seguir:

Function FAT (N:Integer);


Begin
If N>1
Then
Return FAT(N-1)*N
Else Begin
N:=33;
Return 1;
End;
End;

Ao entrar no Else a primeira coisa que feita atribuir 33 ao N. O N ativo que era igual a 1 mudou para
33. Mudou o valor do N=2? No, pois ele no estava ativo no momento da execuo. Vai mudar? No,
pois quando o N for igual a 2 no se tem a atribuio de N:= 33. A varivel local alterada sempre a
que est ativa no momento.

A pilha a estrutura de dados perfeita para lgica de criao e destruio de variveis locais. A ltima
coisa a empilhar a primeira a desempilhar. A primeira coisa a empilhar a ltima a desempilhar.

A rea de dados das variveis locais uma pilha. Existe uma parte da memria que a parte da pilha e
dentro da pilha tem uma rea da pilha. Tem um pedao com as variveis j criadas, abaixo rea livre e
no meio tem o topo da pilha conforme mostra a Figura 1.

Quando uma sub-rotina comea a executar criada uma varivel nova. Ento o topo da pilha
decrementado de forma a colocar na pilha um novo conjunto de variveis locais e parmetros. Por
exemplo, as variveis locais N=3, N=2 e N=1. Conforme mostra a Figura 2.

Quando a sub-rotina acabar de executar o que vai acontecer? Desalocao das variveis locais da sub-
rotina Funo FAT, ou seja, o topo incrementado e volta a ser como era antes da execuo dessa sub-
rotina. Onde estavam as variveis locais N volta a ser rea livre da memria da pilha. Conforme mostra
a Figura 3.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 4
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Assim alocar e desalocar na pilha. Voc aloca decrementando o topo e desaloca incrementando o topo.
A ideia de pilha para o processo poder executar uma coisa to importante e fundamental para as
variveis locais que as CPUs tem instrues especificas para trabalhar com as pilhas isto por causa das
variveis locais.

A Intel tem instrues para o uso da pilha. Push EAX empilha o valor do registrador EAX
decrementando o topo da pilha. Pop EBX pega o valor do topo da pilha, coloca no registrador EBX e
incrementa o topo da pilha. Existem mais instrues para lidar com a pilha. Estas so as mais bsicas de
todas. EAX e EBX so registradores. Isto acontece na passagem de parmetros.

Mov EAX, 3
Push EAX Exemplo 1 de Linguagem de Mquina
Call 500

Mov EAX, [1000] (Endereo da varivel X)


Push EAX Exemplo 2 de Linguagem de Mquina
Call 500 Endereo da Funo FAT

No caso da funo FAT o EAX ser o N. Ento a varivel local fica em uma rea de memria que
chamada de rea de pilha que diferente da rea das variveis Globais que uma rea separada. Uma
parte do processo o cdigo executvel, as variveis Globais, as variveis Locais e as variveis
dinmicas.

9) VARIAVEIS DINAMICAS

As variveis Dinmicas so criadas pela vontade do programador. Ele escreve um comando na


linguagem para criar a varivel. S depois que este comando executado que se pode utilizar a varivel
criada.

So alocadas utilizando a instruo NEW em Pascal e MALLOC em C. So variveis alocadas de


acordo com a programao feita utilizando as instrues descritas acima. O fato de o programador ficar
com esta responsabilidade, cria complicaes, pois, o compilador no sabe quando essas variveis sero
alocadas e desalocadas.

Na memria das reas ocupadas pelo processo tm a seguinte subdiviso: rea de dados, para as
variveis globais e dinmicas, rea de pilha, reservada para variveis locais e rea de cdigo.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 5
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Um processo contm: CDIGO, DADOS (variveis GLOBAIS, variveis LOCAIS e variveis


DINMICA). Cdigos, dados, variveis globais so alocados quando o processo comea a executar,
dados locais que usado na pilha, vai alocando os dados conforme o programa executa, quando
comeam a executar so alocados na pilha e variveis dinmicas.

Procedure X
Var P,Q,R : ^real;
Begin I := 5; new(P); new (Q); new (R); p^=3,8;

Onde: P, Q e R no so as variveis dinmicas, so os ponteiros que apontam para as variveis


dinmicas. A varivel dinmica s passa a existir depois que feito o loop. P, Q e R so variveis locais,
portanto esto na pilha de execuo. Nesse programa, existem 4 variveis locais I, P, Q e R, comeando
a pilha de execuo:

I 5 HEAP
P
Q
R 3,8

Quando fazemos new P : O que pode acontecer?


1) alocado um espao real na heap;
2) feito com que P aponte para esse espao;

Nota:
Heap: local onde so armazenadas as variveis dinmicas. A mesma coisa acontece com Q e R, quando
faz newQ e newR.

Se (ponteiro)P = 3,8, P est referenciando o ponteiro e est usando o valor 3,8 na varivel dinmica
apontada por P. Quando acabar acontecer que o programador poder desalocar as variveis em
qualquer ordem, ele no precisa fazer isso na mesma ordem que alocou.

A varivel dinmica normalmente usada em linguagens de programao mais sofisticadas. Em


linguagem orientada a objetos tipicamente um objeto uma varivel dinmica. Exemplo, uma lista
encadeada de empregados. A seguir o cdigo 1:

Type
Emp = Relor
Matricula: Integer;
Nome: String;
Prox: ^Emp; //Ponteiro para o prximo registro de Empregado
Emp

Procedure
Var
P:^Emp; // Criao de um ponteiro para P
Begin
New(P); //Cria a varivel dinmica do tipo Emp e a varivel local P passa a apontar para

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 6
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Esta varivel dinmica criada.

P^.Matricula = 123;
P^.Nome = Joo

As vezes se confundi varivel dinmica com varivel ponteiro. P varivel ponteiro ele aponta. P
dinmico ele local fica na pilha. O comando new cria a varivel dinmica que no est na pilha e faz a
varivel local que o P apontar para a dinmica. O que apontar? guardar o endereo de memria da
varivel.

Temos a memria e dentro da memria temos o processo. Dentro do processo temos a rea de pilha e
tem outro pedao que rea da varivel dinmica que se chama Heap.

Conforme mostra a Figura 4 o P uma varivel local por ser local ele fica onde? Na Pilha. Em algum
lugar na Pilha tem o valor de P. Qual o valor de P? O endereo. Quando executar o comando o que
acontece? Na Heap onde ficam as variveis dinmicas alocado em um pedao dela uma varivel
dinmica do tipo Empregado.

Digamos que na Pilha a varivel local P guarde o endereo 2000. O comando New no apenas reserva
uma rea da memria do Heap para varivel dinmica do tipo Emp, mas tambm atribui o valor desta
varivel ao ponteiro P. O que atribuir o valor da varivel ao ponteiro? O que apontar para
empregado? colocar o endereo para varivel empregado. Isto apontar.

O comando New faz duas coisas: primeiro aloca um pedao da Heap para a varivel dinmica e em
seguida coloca na varivel ponteiro o endereo onde foi alocada a varivel dinmica. Ento assim que
criada a varivel dinmica.

Alm da varivel ponteiro e a varivel local tem outra varivel que fica na Heap que a varivel
dinmica. A varivel dinmica no tem nome. O ponteiro que aponta para esta varivel dinmica que
tem nome. Para se usar um campo do Empregado tem fazer isto com o a varivel ponteiro P.

Em P.Matricula e P.Nome estou atribuindo valores a varivel dinmica. Como ela no tem nome temos
que usar o ponteiro para os campos da varivel dinmica. No caso de linguagens orientadas a objetos. O
objeto uma varivel dinmica, mas mais escondido.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 7
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

As variveis dinmicas no tm nome, e so armazenadas numa rea chamada HEAP. Ao utilizar um


comando de alocao de memria, uma varivel local (p) aponta para uma varivel dinmica contida na
rea de HEAP. P uma varivel local armazenada na pilha.

A rea de HEAP seria a quarta rea de um processo em muitos SO, como o Win 3.1. No UNIX, h
somente 3 reas: Variveis globais, HEAP (locais e dinmicas) e cdigo.

As reas de um processo podem estar aglutinadas num s bloco numa rea de memria, ou separadas e
espalhadas na memria. A rea de cdigo de um processo no muda, pois foi carregado totalmente e
compilado na memria. Porm, na rea de dados h alteraes em valores de endereos, pois as
variveis precisam ser amarradas.

Na rea de pilha, o topo vai consumindo espaos livres para armazenar dados, at chegar ao limite
inferior da rea de pilha. Quando isto acontece, o HW gera uma interrupo, e podem ocorrer 2 eventos
de acordo com o SO.

Abortamento do processo ou/e deixar o topo continuar descendo para expanso da rea de pilha. Essa
expanso s possvel se, abaixo da rea de pilha, houver rea livre. A pilha, na CPU Intel, cresce para
baixo.

Uma outra alternativa para expanso da rea de pilha, seria a copia da rea de pilha para uma rea livre,
mas depender se o HW ter essa capacidade. Isso acarreta uma re-amarrao dos endereos em tempo
de execuo, e essa a ponte que depende do HW.

possvel fazer essa re-amarrao alterando-se o valor dos registradores base, como na CPU Intel para
que as instrues passem a acessar os novos endereos, sem que o processo seja incomodado. A HEAP
aloca as variveis a execuo de comandos do tipo NEW, mas s desloca aos comandos DISPODE.
Logo, possvel que haja espaos livres na heap, no meio da heap alocada.

O cdigo do comando de alocao quem percebe que a heap est cheia. No Pascal, quando se tenta
alocar uma varivel na heap cheia, a rotina de alocao percebe a exausto da heap e aborta o processo.
No Unix, quando a heap esta cheia ou com espaos muito pequenos para alocao de processos, o
processo faz uma chamada ao sistema para aumentar a rea de dados. A rea de heap cresce para cima,
ela no cresce invadindo a rea de variveis globais.

No Windows 3.1, se a heap est cheia pode-se alocar outra rea de dados para servir como uma segunda
heap. Os dados na heap so alocados numa certa seqncia, porm, nem sempre as variveis ficam
alocadas seqencialmente.

As reas de cdigo contem uma parte resultante do cdigo-fonte do processo e uma parte que j
pronta, que contem as rotinas das bibliotecas do compilador. A parte que vem da biblioteca no vai toda
para a rea de cdigo, somente as partes da biblioteca utilizadas pelo processo.

Ao se carregar o programa na memria, no se sabe onde ficaro as reas de cdigos dos processos, nem
a rea de cdigo da biblioteca compartilhada. A partir do momento em que se sabe a posio do cdigo
da biblioteca, se faz a correo dos endereos das chamadas as rotinas da biblioteca. A correo desses
endereos de biblioteca diferente da correo de cdigo comum. As instrues que contem referencias
a rotinas da biblioteca so marcadas pelo executvel para correo de endereo, e tem marcado o
numero da rotina sendo chamado na biblioteca. Ao carregar a biblioteca na memria, o linker passa a

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 8
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

saber a posio das rotinas na memria, ento ele checa a posio da rotina sendo chamada e substitui
na chamada.

10) DIFERENA ENTRE VARIVEIS LOCAIS E DINMICAS

As Variveis locais tem um seqenciamento muito claro de alocao e desalocao quando a rotina
comea a rodar, so alocadas todas as variveis locais para essa rotina, quando a rotina acaba de rodar,
so desalocados na mesma ordem em que foram alocadas.

Nas variveis dinmicas o programador pode escolher a ordem de desalocao, no seguem a ordem de
pilha como nas locais. No d para usar uma pilha para alocar variveis dinmicas. A grande diferena
o sequenciamento.

O ponteiro guarda o endereo na memria. A varivel aquilo para qual o ponteiro aponta. O ponteiro
contm o endereo e esse endereo aponta para a varivel dinmica alocada na heap. A varivel
dinmica aquilo que foi alocado na heap. O grande ponto: a heap no uma pilha. A heap a 3 rea
diferente de dados.

11) DIFERENCIAO ENTRE O PONTEIRO E A VARIVEL DINMICA EM UMA


LINGUAGEM OO TRADICIONAL

Type
L_Emp = Class
Public
Matricula: Integer;
Nome: String;
Prox: L_Emp
End;

Procedure X;
Var
E: L_Emp;
Begin
E:= New L_Emp; // A varivel E um ponteiro para o endereo da varivel L_Emp
E.Matricula:= 123;
E2:=E; // Neste caso ambas as variveis esto apontando para o mesmo endereo 2000
E2.Matricula:= 567;

Na linguagem OO no temos o ponteiro explcito. A linguagem OO esconde o ponteiro. Embora a


linguagem OO no tenha o ponteiro como uma coisa explcita na linguagem o cdigo na linguagem de
mquina do cdigo 1 e 2 o mesmo. Nos dois casos voc tem uma varivel ponteiro.

Se for criada outra varivel, por exemplo E2 e atribuir ao E. Se alterar o valor de E2 altera o valor da
matricula do prprio E, pois o objeto um s. E e E2 so ponteiros que apontam para o mesmo
endereo.

Quando se atribui E ao E2. O que est acontecendo? Estou copiando o valor do E que 2000 para o E2.
Ambas as variveis apontam para o mesmo endereo 2000. Embora a linguagem OO no tenha
ponteiros explcitos eles esto l.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 9
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Type
Emp = Relo
Matricula: Integer;
Nome: String;
Prox:^Emp;
Emp

Procedure X;
Var
P1, P2:^Emp;
Begin
New(P);
P^.Matricula:= 123;
P^.Nome = Joo;
New(P2);
P2^.Matricula = 567;
...
Dispose(P) //Destruindo a varivel dinmica apontada por P

Em linguagem de programao mais antiga voc tem o comando de alocao/criao que o New e
voc tem tambm o comando de destruio da varivel dinmica. O que destruir a varivel dinmica
apontada por P? tornar a rea da Heap livre. O que est acontecendo? A Heap uma coisa diferente da
Pilha. A Heap pode ter lugres ocupados e lugares livres.

Ento, a rea da Heap funciona diferente. Voc obrigado ter reas diferentes para cada uma das
variveis. A Heap no tem ordem correta para alocao da variveis, pois depende do programador. Ele
vai determinar quando cria e quando destri a varivel dinmica. Ento pode ficar bagunado? No.
Fica uma coisa misturada.

Para as trs formas de se usar a varivel temos trs reas de memria do processo. Uma para as variveis
Globais, uma para as variveis locais e outra para as variveis dinmicas. Esta a forma mais completa
do processo.

Temos trs reas distintas rea de cdigo, rea de variveis globais, rea das variveis locais (Pilha) e
rea das variveis dinmicas (Heap). No caso do Unix eles simplificam um pouco isto. Ento no Unix
duas variveis esto condensadas em uma s rea. Existe uma rea de dados que igual as variveis
globais mais a Heap.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 10
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

D para ajuntar, pois no temos maiores problemas. As globais so bem comportadas. Como fica no
Unix? Fica conforme mostra a Figura 6, um exemplo de alocao sequencial do processo na memria.

Ento so trs reas: Cdigo, Dados e Pilha. Os dados condensam as Globais e a Heap. Uma coisa
importante que dentro dessas reas alm das variveis alocadas dinamicamente tem as reas livres.
Tanto na Heap quanto na Pilha. Voc tem dentro delas reas livres para alocao de variveis locais (no
caso a Pilha) e variveis dinmicas (no caso a Heap).

Mas, alm das reas livres internas no processo existem as reas livres externas ao processo. As reas
livres externas ao processo servem para alocao de novos processos. As reas livres internas ao
processo so para as variveis locais e dinmicas que o processo vai precisar. Assim a organizao dos
processos na memria. Este exemplo fala da alocao dos processos de forma continua a forma mais
fcil de fazer e mais simples.

As reas de memria do processo cdigo, Pilha e dados. Elas podem ser alocadas separadamente na
memoria conforme mostra a Figura 7, pois no precisam estar sequencialmente. Qual a vantagem de
alocar separadamente? mais fcil encontrar uma rea livre. Se existe uma regra que obrigue as reas
do processo serem alocadas juntas isto restringe um pouco a alocao.

Por exemplo, queremos alocar um processo de 300 KB mais fcil encontrar trs pedaos de 100 KB de
rea de memria livre do que um nico espao de 300 KB na memria. Ento exigir que as trs reas do
processo sejam alocadas juntas uma desvantagem, pois dificulta a alocao de processos.

uma vantagem alocar separadamente as reas dos processos. A outra vantagem de alocar dessa forma
que se tem mais chance de crescer as reas do processo quando necessrio se tiver rea livre. Se for
profissional o mdulo de alocao separado. Para uma questo didtica o modelo junto mais
utilizado, pois mais fcil.

Uma questo que deve ser resolvida pelo Sistema Operacional a questo de alocao dos novos
processos. Esta questo existe tanto no caso de alocao do processo junto quanto no caso separado.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 11
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

A alocao no sequencial do processo na memria melhor do que a alocao sequencial porque


mais fcil encontrar reas livres de memria.

12) CONCLUSO

Quatro tipos de rea diferentes de um processo:


- rea onde est o cdigo executado;
- rea onde esto os variveis globais (que mais so utilizadas);
- rea de variveis locais que so alocados dinamicamente;
- Variveis dinmicas.

No caso do UNIX juntou duas e agora so trs reas:


- rea do cdigo executvel;
- rea de pilha (que contm a pilha e variveis locais);
- rea de dados (contm varivel global e a heap. Juntou globais e dinmicas).
A partir do conceito acima podemos concluir que o processo fica todo contido na memria e podemos
ter o mesmo processo em vrias partes da memria.
SO
//////
D1
P1
3 reas do processo P1
P2
C2
3 reas do processo P2
C1
D2

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 12
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Como essas reas sofrem alterao?

rea de Cdigo

Faz sentido ser modificado? Sim, durante a execuo do programa. Esses programas geram cdigos que
so incorporados a eles mesmos. Mas isso no muito comum.

Os programas automodificveis eles precisam ter alterao na rea de cdigo, uma vez que o programa
carregado na memria e vira processo essa rea vem a ser modificada e por causa disso que desde que
o hardware permita, essa rea fica inibida, impedindo que o processo faa modificao nessa rea e se o
processo tentar fazer ele abortado. Ento, geralmente, a resposta pergunta acima No.
proibida a modificao dessa rea. Se o prprio processo ou outro tentar alterar a rea de cdigo o SO
abortar a execuo desse processo.

rea de Pilha

Sofre modificao? Sim, pois as varveis locais podem ser modificadas. A rea de pilha altervel. No
apenas isso. Dentro da rea de pilha tem um ponteiro que aponta para um lugar dentro da rea que esse
ponteiro se chama topo da pilha e no caso da Intel que tudo que est abaixo dos outros est livre, s a
parte de cima tem variveis.

Quando uma rotina se inicia (o que significa alocao? Significa que descer um pouco do topo), quando
a rotina acaba, solto o topo da pilha, quer dizer que a rotina acabou. A CPU de 30 anos pra c, tem
uma funo especfica para manipular o topo da pilha (mais bsicas: paste e copy).

Nessa rea de pilha o valor muda, muda a rea total, vai mudar o valor de dentro. Outra coisa , pode ter
um programa que tenha um tempo de execuo muito grande, ou um programa que tenha variveis
locais muito grandes, pode acontecer quando a rotina entra o topo desce, se uma rotina muito
recursiva, cada vez que tem uma recurso o topo desce um pouco e assim por diante tem uma hora que o
topo da pilha vai bater no limite dela, ento aborta o processo, isso o stack overflow.

Nos SOs mais sofisticados, antes de abortar um processo o SO tenta aumentar a rea da pilha, se
conseguir crescer no aborta o processo se crescer no tem jeito (ex: Unix). Altervel medida que so
includas/excludas/alteradas as variveis locais nessa pilha.

Se uma rotina tem muita recurso, pode acabar com o espao na pilha, causando o estouro da pilha (a
maioria dos SOs abortam o processo ex.: Windows 3.1). O Unix tenta aumentar o tamanho da pilha ao
perceber que o espao disponvel da pilha chegou ao fim.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 13
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Topo
Viso de uma pilha da arquitetura Intel:
Variveis

rea livre

Tentativa de liberar espao para pilha:

Topo Topo Topo


Variveis
rea livre
Variveis
rea livre
rea livre

Topo Topo
Variveis
Variveis

Nova rea
livre
rea de dados

/////// heap
globais

No Unix essa rea contm variveis globais e dinmicas (heap): Conforme o programa vai sendo
executado vai sendo alocados e desalocados variveis dinmicas, ou seja, ser feito o new no Pascal ou
malloc no C/C++, e dispose no Pascal ou free no C/C++ respectivamente.

Se o programa utilizar muitas variveis dinmicas, em algum momento, possvel que no tenha mais
espao para alocar essas variveis, nesse caso, pode abortar ou tentar crescer o tamanho da rea, ou seja,
o SO pode tentar crescer a rea de pilha.

1) Quem sabe se a heap tem ou no espao o processo, o SO no se envolve.


2) O Windows pode ter mais de uma heap.
3) Na rea de pilha e de dados do Unix, elas so alterveis (contedo) e o tamanho tambm.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 14
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

2) P
////
Processo 1
D
C

No Unix ao invs de abortar o processo, provocando o erro de stack overflow, ele aumenta a rea de
pilha, caso no consiga ocorre o erro descrito anteriormente. Desse tipo de concepo foi inventada uma
forma de organizar a memria, a quantidade de reas que o processo possui. Essa forma de organizar a
memria chamada segmentao. Se houver muitas variveis dinmicas, pode ser que cause falta de
espao na heap.

O que pode acontecer?


- Aborto do processo
- Tentativa de expanso da rea da heap atravs de uma solicitao da rotina new (no Pascal) ou malloc
(no C), que percebem a falta de espao na heap (Unix).

O Unix pode reservar inicialmente um espao livre em comum para a pilha e/ou dados usarem medida
que elas forem precisando. O processo no se divide na memria.

Pilha P 1

rea livre para


Pilha/Dados
P1 Processo 1
Dados P 1

Cdigo P 1

Quando um processo chega e precisa de memria, feita uma busca no conjunto por um bloco que seja
grande o suficiente para o processo. Se o bloco for grande demais, ele ser dividido em dois: uma parte
alocada ao processo que chega; a outra devolvida para o conjunto de blocos.

O problema de alocao de memria dinmica consiste em como atender a um pedido de tamanho n de


uma lista de blocos de memrias livres. As estratgias de first-fit, best-fit e worst-fit so as mais
comumente usadas para selecionar um bloco de memria livre do conjunto de blocos disponveis.

13) FRAGMENTAO DA MEMRIA (PROBLEMA DA ALOCAO DE MEMRIA)

Conforme mostra a Figura 10, os espaos de rea livre que sobram ao alocar um processo pelo algoritmo
de alocao so chamados de Fragmentao.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 15
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

O First Fit tem esta caracterstica embora ele seja muito rpido ele pode gerar fragmentos.

Tenho uma memria disponvel tem que alocar a memria dentro dessa memria disponvel e o pedao
alocado tem que ficar indisponvel. Com isso, cria situaes que podem gerar o impedimento do
surgimento de processos. Se tiver muitas alocaes e desalocaes o que pode acontecer que ter
muitas reas disponveis pequenas e separadas umas das outras, se eu precisar alocar uma nova rea que
seja maior que qualquer rea dessa eu no vou conseguir, apesar da soma de cada rea ser maior do que
a rea que eu quero alocar. Esse problema se chama Fragmentao de Memria.

Se houver muitas alocaes/desalocaes na memria, pode acabar causando o surgimento de vrias


reas disponveis na memria mas pequenas demais para caber os segmentos de um processo apesar da
soma dessas reas serem, muitas vezes, maiores que o espao que um processo precisa. Esse problema
chamado de fragmentao.

Como se resolve esse problema?


1) Utilizar compactao;
2) Evitar que acontea.

1 soluo: deslocar as reas livres e ocupadas de forma que as reas livres fiquem todas juntas
(compactao).
50000 50000 Problema: A
SO SO
45000 45000 movimentao das
rea livre Processo 3
40000 40000 reas dos processos
Processo 2 Processo 2
35000 34000 depende do HW.
rea livre
32000 Processo 1
31000 rea livre
Processo 3
25000 rea livre
22000
Processo 1
20000 rea livre
0 0
Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 16
Na segmentao pode
Antes da compactao Depois da compactao
ser feita a
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

2a soluo: Tentar evitar que a fragmentao ocorra.

Para isso deve ser usada um algoritmo de alocao de rea a um processo de forma que as reas livres
sejam poucas e as menores possveis.
50000
SO Um processo novo precisa de uma rea de memria
45000
Processo 5 de tamanho 3500.
39000
rea livre
35000
Processo 4
31000 Qual das reas livres pode ser escolhida?
rea livre
25000
Processo 2
21000
rea livre
O algoritmo Best Fit escolhe a rea que tem o
20000
Processo 3 tamanho igual ou um pouco maior do que a rea
10000
rea livre
necessria para o processo.
5000
Processo 1
2000 rea livre
0 Nesse exemplo, a rea livre escolhida por esse

algoritmo seriarea
a rea que comea noexemplo,
endereo a35000
O Algoritmo Worst Fit o algoritmo que escolhe a maior disponvel. Nesse rea livre
escolhida por esse algoritmo seria a rea que comea no endereo 25000 e termina no endereo 31000
(que tem umotamanho
processodeX,
4000).
(tamanho 6000). Ao alocar os 3500kb necessrios para sobraria 2500 Kb para outro
processo utilizar.
Note que nesse caso causaria uma fragmentao pois
Mas esse algoritmo pode causar o seguinte problema: Se um processo precisar de 6000 kb para ser
utilizando
alocado na memria, vai acabar no conseguindo, pois uma
no rea de 3500
h uma reanadesse
rea de tamanho
tamanho para ele. A
soluo seria fazer uma compactao.
4000, vai acabar sobrando 500, rea essa
O Worst Fit tem uma variao: se existir uma rea com o tamanho exato, ela ser usada. Se no tiver,
use a que tem o maior tamanho. possivelmente pequena para a insero de um novo

O 3o algoritmo o First Fit que utiliza a 1a rea


processo.
grande o suficiente para caber o processo. No exemplo
acima, a rea livre que o SO utilizaria para alocar o processo seria a que comea no endereo 5000 (que
tem um tamanho de 5000).

O First Fit tem uma variao: o Next Fit ou Circular Fit verifica a 1 a rea livre grande o suficiente para
alocar o processo a partir da posio de memria alocada para o ltimo processo.

Todos os trs algoritmos verifica todas as reas disponveis para ver qual rea se adequa melhor ao
algoritmo. A verificao pode demorar se houver muitas reas livres. O SO mantm uma lista de todos

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 17
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

as reas livres disponveis na memria (ordenado pelo endereo inicial) com seu endereo inicial e
tamanho.

0 3000

End. Ponteiro
Tam.
Inicial para a 4000 1000
da
da prximo
rea
rea item da
Livre Livre lista
9000 3000

Se for alocado/desalocado um ou mais espaos livres (por inteiro ou no), o SO deve atualizar a lista dos
espaos livres para refletir o estado da memria.

Uma soluo para o problema da fragmentao externa a compactao. A meta trocar de posio o
contedo da memria para reunir toda a memria livre em um grande bloco. Se a relocacao esttica e
for feita no momento de montagem ou carga, a compactao no poder ser feita. A compactao s
ser possvel se a relocacao for dinmica e for feita em tempo de execuo. Quando a compactao
possvel, devemos determinar o seu custo. O algoritmo de compactao mais simples consiste em mover
todos os processos em direo a um lado da memria; todos os blocos livres se movem na outra direo,
gerando um grande bloco de memria disponvel. Outra soluo possvel para o problema de
fragmentao externa permitir que o espao de endereamento lgico de um processo seja no
contguo, possibilitando que um processo receba memria fsica onde ela estiver disponvel. Soluo:
Paginao e segmentao.

14) ALGORITMO DE ALOCAO (Para evitar a Fragmentao da Memria)

Ento o problema que tenho mais de uma rea livre. Em qual rea livre irei usar para alocar o
processo? Tem vrios algoritmos de alocao. Veremos alguns tipos de algoritmos de alocao.

A Figura 8 a seguir mostra os processos 1 de 100 KB, o processo 2 de 200 KB, e o processo 3 de 80 KB,
o processo 4 de 100 KB e a rea livre de 200 KB. Quando o processo acaba sua execuo a rea de
memria que ele ocupava fica livre.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 18
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Digamos que os processos 1 e 3 acabaram sua execuo e liberaram a memria. Ento temos trs reas
livres (100 KB, 80 KB e 200 KB). Temos agora um processo 5 com 80 KB. Temos que fazer uma
escolha. Onde alocar o processo 5? Temos trs reas livres de memria. Esta escolha feita pelo
algoritmo de alocao.

14.1) ALGORITMO DE ALOCAO FIRST FIT

Aloca o bloco na primeira rea livre que encontrar. No procura reas livres na memria. Assim mais
rpido. Porm gera reas livres de tamanho variado na memria. Comea a procurar no espao seguinte
ltima alocao.

Utilizando o algoritmo de alocao First Fit ele vai alocar aonde? No primeiro lugar que encontrar de
rea livre que caiba o processo (ou uma das reas do processo). Ento alocar no 100 KB, ou seja, onde
estava o processo 1. O processo 5 ocupar 80 KB e sobrar 20 KB de rea livre que no ser utilizada.
Isto um desperdcio conforme mostra a Figura 9.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 19
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Alocar uma rea e deixar um pedao livre no muito interessante, pois muitas vezes o pedao pequeno
no o suficiente para alocar um novo processo. A rea que sobra neste caso, 20 KB fica sem uso
porque nada novo consegue ser alocado nela.

14.2) ALGORITMO BEST FIT

Existe outro algoritmo que mais sofisticado que se chama Best Fit que tenta alocar na rea de tamanho
mais prximo ao que se quer inserir na memria.

Este algoritmo pesquisa entre as reas livres de memria o espao mais adequado para alocar o
processo. Exemplo, alocar o processo 5 de tamanho 80 KB. Tem um espao adequado para alocar 80
KB? Tem. A rea de 80 KB ao invs de alocar na rea de 100 KB. Conforme mostra a Figura 11.

Agora digamos que o processo 5 tenha 60 KB. Onde alocar este processo? Este processo ser alocado
onde melhor se adeque, ou seja, na rea livre de 80 KB. Conforme mostra a Figura 12. Neste caso, sobra
20 KB que um desperdcio (fragmento).

First Fit pesquisa a partir do zero da memria e o Next Fit a partir da ltima alocao na memria.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 20
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

14.3) ALGORITMO WORST FIT

A ideia do Worst Fit a seguinte aloca-se a rea de tamanho exato se existir. Se no existir uma rea de
tamanho exato ento ele aloca a maior rea encontrada. Este algoritmo tenta alocar na rea de tamanho
mais afastado do que se quer inserir na memria. Faz o worst se no existir espao de tamanho exato.
Comea a procurar rea livre no incio da memria.

Conforme mostra a Figura 13, queremos alocar um processo de 60 KB. Como no existe uma rea de
memria com este tamanho exato. O Worst Fit aloca a maior rea livre de memria encontrada que de
200 KB sobrando 140 KB de rea livre.

O Worst Fit no gera fragmento porque quando ele no encontra uma rea de memria de um tamanho
exato ele aloca a maior rea e o que sobra um tamanho grande. Embora ele seja bom ele no to bom
assim. Por qu? Digamos que se tenha um processo 7 de 150 KB.

Ele poderia ser alocado na rea livre de 200 KB e sobraria 50 KB, mas como o Worst Fit j matou a rea
livre de 200 KB (a rea maior) o processo 7 no poder ser alocado neste espao. E o Worst Fit pior
para este caso.

Ento no d para dizer de forma eficiente qual destes algoritmos o melhor. O que d para dizer que
o First Fit o mais rpido para executar e implementar do que os outros algoritmos Best e Worst.

No caso de alocar o processo por reas separadas temos o mesmo problema e utiliza-se os mesmos
algoritmos de alocao. E este mesmo problema existe dentro da rea de Heap, pois tem espao livre e
alocado. Na Heap alocado as variveis dinmicas, mas temos o mesmo problema de alocar memria s
que o espao menor.

Quem controla o espao da Heap a prpria linguagem de programao e no o Sistema Operacional. O


Windows at tem suporte para isto, mas normalmente a prpria linguagem de programao que gera o
cdigo de alocao executa internamente o algoritmo segundo o fabricante da linguagem escolheu para
implementar.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 21
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

14.4) CONCLUSO

Memria
SO
2000

4000

8000

5000

3000

No esquema acima tm cinco reas livres, cada uma com os seguintes tamanhos: 3000, 5000, 8000,
4000, 2000 respectivamente. Se o processo alocar uma rea de 4000 na memria no haveria
fragmentao, pois ele ocuparia a rea livre de tamanho 4000. O problema se tentar alocar um bloco
de 3500, pois sobrar um espao de 500, pequeno demais para poder ser alocado por outro bloco, o
que o algoritmo Best Fit faz.

O que pode ser feito tentar alocar em um bloco maior e assim sobrar um pedao maior para que possa
ser alocado por outro bloco, por exemplo, alocar no bloco de 8000 sobrando 4500, que o que o
algoritmo Worst Fit faz. Mas, agora se quiser alocar um processo de 6000, por exemplo, no tem mais
rea com tamanho maior ou igual para este processo, o que vai ter que fazer a compactao. No
existe um algoritmo prtico para alocao.

Pode ser uma coisa custosa procurar o espao que melhor se adapta. Por isso, existe outro algoritmo que
coloca o processo no primeiro espao livre encontrado que couber este processo. Este algoritmo o
First Fit.

Dentro do sistema operacional existe uma lista encadeada com os espaos livres da memria para
controlar esses espaos livres. Como mostra o esquema abaixo: O endereo de incio 0 e tamanho 3000
aponta para o endereo inicial 10000 de tamanho 5000 e este aponta o endereo inicial 25000 de
tamanho 8000 e este aponta para o endereo inicial 40000 de tamanho 4000 e por ltimo o endereo
inicial 60000 de tamanho 2000.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 22
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Incio Tamanho Prximo


0 3000

Incio Tamanho Prximo


10000 5000

Incio Tamanho Prximo Incio Tamanho Prximo


25000 8000 40000 4000

Incio Tamanho Prximo


60000 2000

Os problemas e as solues da alocao de memria so utilizados tanto para processos como para
variveis dinmica, onde quem controla isto o sistema operacional e a biblioteca padro, e nesta ltima
contm as informaes sobre o que foi alocados na heap e etc.

15) COMPACTAO

Deslocamento de todas as reas para acabar com os buracos; Juntaria todas as reas e formaria um
espao livre maior capaz de ser alocado para um novo processo. Isso chamado de compactao.

Exemplo: A memria contm cinco processos (P1, P2, P3, P4 e P5) e entre eles tem uma rea livre. A
compactao vai juntar essas reas. Na tabela de segmento o incio do processo P5, que antes era 40000
passa a ser 32000, o seu tamanho permanece em 5000, assim como se trata do ltimo processo alocado
na memria, o endereo inicial da rea livre 37000.

Memria Memria Tabela de Segmento antes


da Compactao
SO SO
nicio Tamanho
45000 40000 5000
P5
40000
Compactao
P4
37000 Tabela de Segmento
P3 P5
32000 depois da Compactao
P4
P2 P3 nicio Tamanho
P2 32000 5000
P1 P1

o hardware que permite a compactao da memria. E esta compactao acionada quando um


processo deseja ocupar a memria e no tem rea disponvel, o SO toma a iniciativa da compactao da
memria.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 23
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

O mesmo problema ocorre para alocao de variveis dinmicas dentro de rea de heap de um processo.
E como soluo compactar a memria. Neste caso, para correo dos endereos tem que ser possvel
saber onde esto os ponteiros das variveis dinmicas. O Java consegue fazer isto, mas o C, Pascal no
conseguem.
Heap
Pilha

Dados
Cdigo
A vantagem da segmentao poder fazer a compactao e apenas trocar o endereo inicial do
segmento na tabela de segmento, pois o deslocamento e o tamanho so os mesmos. Para se chegar ao
endereo final da posio da memria o hardware tem somar o incio do segmento mais deslocamento.

Problemas da compactao:
1) Mover memria;
2) Depende de o hardware mover a posio que a rea de determinado processo ocupa sem que o
processo saiba que isso aconteceu, nem sempre possvel de ser feito. No caso de
segmentao possvel, desde que todas as tabelas de segmentos reflitam a nova posio de
cada segmento.

A outra forma tentar evitar (2) que a fragmentao ocorra e para isso existem algoritmos, e cada um
tem seu objetivo, para a escolha de rea livre, que uma rea que minimize a fragmentao.

Conforme mostra a Figura 14. A compactao junta todos os processos e toda rea livre na parte de
baixo da memria e acima junta todas as reas livres. A compactao tem um problema que a
mudana dos endereos dos processos e das suas respectivas reas.

Digamos que o processo 7 tem uma varivel global que estava no endereo 65000 aps a compactao
seu endereo foi modificado. Ento a mera compactao simples no vai funcionar.

Figura 14

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 24
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

No adianta fazer somente a compactao. Precisamos alterar os ponteiros para os novos endereos de
memria. A compactao exige que se tenha mecanismos para modificar os endereos, pois seno dar
problemas.

O sistema operacional tem condio de corrigir o endereo perdido. Uma coisa que ele pode fazer
apontar o endereo de carga. Ele pode corrigir a carga e pode corrigir o endereo. O problema que os
sistemas operacionais de hoje em dia no sabem dentro da rea de memria do processo onde esto as
variveis do ponteiro.

O sistema operacional sabe na hora da execuo onde esto os endereos. Ele no sabe dentro da rea de
memria dos processos onde esto os ponteiros. Em um esquema como este a compactao no pode ser
usada, pois o sistema operacional no sabe corrigir a varivel de ponteiro.

A compactao nem sempre pode ser implementada. Neste caso no pode. Porm, existe outro caso que
o caso do registrador de base.

15.1) COMPACTAO COM O REGISTRADOR DE BASE

O endereo ser feito a partir do registrador de base. Durante a execuo o valor de deslocamento e
somando ao valor do registrador de base gerando o novo endereo. Assim, a compactao vai funcionar,
ou seja, com o registrador de base possvel compactar sem ele no possvel, pois no consegue
recuperar o endereo da varivel ponteiro.

Para o caso dos processos alocados por reas? A base no nica. Algumas CPUs permitem vrias
bases. A Intel permite trs bases. Uma base para rea de cdigo, uma base para rea de dados e outra
base para rea de Heap. Tem trs registradores de base diferentes um para cada rea.

16) FALTA DE MEMRIA

Quando o usurio quer executar processos que no cabem na memria da mquina. Isto pode acontecer
quando:
Um processo executado for maior do que a memria da mquina;
Ou a soma dos tamanhos de cada processo que se quer executar na mquina maior que a
memria desta mquina;
O tamanho total dos processos maior que o tamanho da memria que est disponvel.

17) MECANISMOS PARA LIDAR COM A FALTA DE MEMRIA

Existem casos que se tem memria livre, mas est separada. Digamos que temos uma memria com 200
KB livre. Criou um processo novo de 100 KB. Criou um processo de 80 KB. Ficou sobrando 20 KB.
Cria um processo novo de 100 KB. No vai d, pois sobrou s 20 KB. A memria est insuficiente para
rodar o processo de 100 KB.

Ento isto um problema? Em teoria . Hoje em dia temos memrias grandes (4 GB). Vai existir um
caso que os processos na memria a soma seja mais de 4 GB. Hoje em dia isto fica muito improvvel de
acontecer. O problema de memria insuficiente antigo e hoje em dia acontece muito menos. O
tratamento das imagens digitais s foi possvel a partir do momento que passamos ter mais memria na
mquina para guardar a imagem na memria.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 25
SISTEMA OPERACIONAL II REVISO PARTE 2 AULA 13/11/2012

Hoje em dia o caso que faz sentido de uso de muita memria a edio de vdeo. Neste caso a memria
pode encher e preciso ter um mecanismo para no d erro para voc. Ento, embora isto fosse mais
comum no passado importante ter hoje em dia. Isto pode acontecer no computador pessoal e no
servidor.

Resolve-se o problema de falta de memria atravs de mecanismos. Usa-se o disco ou gasta menos
memria.

Elaborado por Luciana SA Amancio Merge com material da Soraia 2013/01 Pgina 26