Você está na página 1de 38

EAD

Gerenciamento de
Memória

3
1. OBJETIVOS
• Compreender conceitos importantes sobre o gerencia-
mento de memória realizado pelo sistema operacional
para melhorar a utilização da CPU e aumentar a velocida-
de de resposta aos usuários.
• Conhecer e discutir os conceitos fundamentais que envol-
vem o gerenciamento de memória e o gerenciamento da
memória em monoprogramação.
• Compreender, explicar, discutir, comparar e diferenciar
pontos importantes das técnicas de gerenciamento de
memória para multiprogramação, bem como suas carac-
terísticas fundamentais, vantagens e desvantagens.

2. CONTEÚDOS
• Introdução ao gerenciamento de memória executado
pelo sistema operacional.
104 © Sistemas Operacionais

• Conceitos de swapping, alocação de memória, paginação,


segmentação e segmentação com paginação.
• Memória virtual.

3. ORIENTAÇÕES PARA O ESTUDO DA UNIDADE


Antes de iniciar o estudo desta unidade, é importante que
você leia as orientações a seguir:
1) Nesta unidade, você compreenderá como acontece o
endereçamento dos programas e seus dados na memó-
ria do computador e, também, terá a oportunidade de
aprender a utilizar técnicas que facilitarão o gerencia-
mento da memória.
2) Você entenderá que os algoritmos e as técnicas para o
gerenciamento da memória são necessários devido às
limitações de tamanho e custo (preço elevado) das me-
mórias físicas (referimo-nos à memória principal).
3) Fique atento às técnicas de gerenciamento de memória
que apresentaremos, pois elas são úteis e necessárias
para conseguirmos uma abstração de expansão da me-
mória principal realmente existente. Você entenderá,
ainda, como o uso da memória secundária permite ao
usuário enxergar a memória principal maior do que ela
realmente é, permitindo, assim, a execução de vários
programas em paralelo, muitas vezes, programas maio-
res que o tamanho físico da memória.
4) Lembre-se de tirar suas dúvidas durante os estudos des-
ta unidade, pois elas podem parecer simples agora, mas
irão se tornar cada vez maiores. Na área de Computa-
ção, as tecnologias, os algoritmos e as técnicas evoluem
de forma muito rápida e, também, de maneira gradati-
va. Isso significa que é muito mais fácil você entender
o contexto histórico da evolução das técnicas de geren-
ciamento de memória que entender as técnicas utiliza-
das atualmente sem ter compreendido de onde elas se
originaram e o motivo dessa evolução, pois uma técni-
ca leva a outra e assim por diante. Dessa forma, recorra
© Gerenciamento de Memória 105

aos meios que você tem para construir o conhecimento


necessário neste curso e em sua vida acadêmica e pro-
fissional. Estude atentamente e com concentração este
material; consulte os livros indicados; fale com tutor pela
Sala de Aula Virtual; pesquise outras fontes na internet
e proponha grupos de estudo virtuais ou presenciais aos
seus colegas.
5) O que dissemos anteriormente vale para esta unidade.
Sistemas Operacionais possui uma abordagem teórica.
A princípio, ela poderá parecer pouco interessante, mas
isso será dessa forma até você realmente compreender
esses conceitos, que, por enquanto, são desconhecidos.
Quando você de fato compreender os assuntos aborda-
dos aqui, então, ele se tornará prazeroso, e você conse-
guirá entender melhor como os processos, a memória
e os programas funcionam dentro do computador, bem
como o que acontece quando uma função de seu código
em uma linguagem de programação qualquer é chama-
da e o modo que o computador lida com os diversos pro-
gramas que você executa de forma paralela.
Bons estudos e lembre-se de que você não estará sozinho!

4. INTRODUÇÃO À UNIDADE
Na unidade anterior, você teve a oportunidade de compreen-
der como o sistema operacional controla o gerenciamento dos pro-
gramas em execução por meio do gerenciamento de processos.
Na memória principal de um computador, encontram-se to-
dos os programas e dados que serão executados ou referenciados
pelo processador. A memória principal é um recurso que possui
capacidade limitada e custo elevado se comparado com as me-
mórias secundárias de armazenamento permanente, como, por
exemplo, disco rígido, CD-ROM, DVD e pen drive. Assim, o projeto
de sistemas operacionais, por meio do gerenciamento da memó-
ria, busca alternativas para minimizar a ocupação da memória e,
ao mesmo tempo, otimizar sua utilização.

Claretiano - Centro Universitário


106 © Sistemas Operacionais

O gerenciamento da memória é feito pelo sistema operacio-


nal, mais especificamente por um componente dele conhecido como
gerenciador de memória, cujas tarefas incluem: os monitoramentos
sobre quais partes da memória estão sendo utilizadas e quais estão
disponíveis; a alocação e liberação da memória para os processos; e o
gerenciamento de swapping de processos entre a memória principal
e o disco, que consiste na troca de processos que ocorre, normalmen-
te, durante o uso do sistema operacional, quando a memória princi-
pal não comporta todos os processos ao mesmo tempo.
Os esquemas de gerenciamento de memória podem ser divi-
didos, basicamente, em duas classes: os que mantêm os processos
fixos em memória principal e os que movem os processos entre a
memória principal e a memória secundária (normalmente disco)
durante a execução, nesse caso, utilizando-se, especialmente, de
técnicas de swapping ou paginação.
Nesta unidade, você estudará os principais esquemas de orga-
nização e gerenciamento da memória principal em uma sequência
quase evolutiva, relacionando suas vantagens e suas desvantagens.

5. CONCEITOS FUNDAMENTAIS PARA O GERENCIA-


MENTO DE MEMÓRIA
Estudamos, na Unidade 1, que houve uma grande evolução
das máquinas e, consequentemente, dos softwares que as geren-
ciam. Os sistemas operacionais modernos evoluíram com a multi-
programação, com os sistemas de tempo real, com os sistemas de
tempo compartilhado (time sharing) e com os sistemas multiusuá-
rios. Para que esses sistemas possam funcionar de forma satisfató-
ria, necessitam oferecer tempo rápido de resposta para aplicações
interativas, e isso está relacionado à quantidade de processos que
poderão ser executados paralelamente.
A princípio, os programas e os seus dados, que serão exe-
cutados pelo processador, estão no disco. No entanto, como vi-
© U3 - Gerenciamento de Memória 107

mos, o disco é uma memória secundária e não pode ser acessado


diretamente pelo processador. Dessa forma, é necessário que os
programas e os seus dados sejam carregados para a memória prin-
cipal antes de serem executados. Assim, as estratégias usadas no
gerenciamento de memória também exercem grande influência
na quantidade de processos que podem executar paralelamente.

Compreendendo a memória
As memórias evoluíram com relação à capacidade de arma-
zenamento, ao software de gerenciamento e, também, à acessibi-
lidade. Podemos dizer que, atualmente, as memórias são baratas
se comparadas àquelas de alguns anos atrás, mas continuam caras
se levarmos em conta os preços de memórias secundárias. Mesmo
com a evolução da memória principal, a capacidade ainda não é su-
ficiente para suportar uma quantidade significativa de programas
que possam rodar em paralelo. Essa "quantidade significativa" po-
deria ser substituída por uma "quantidade que atenda às exigências
e às necessidades dos usuários".
Como a evolução das aplicações e dos serviços aos usuários
se torna cada vez maior – lembrando que, para uma aplicação es-
tar em execução, é preciso que esteja na memória principal –, o
gerenciamento da memória principal disponível faz-se necessário.
As memórias de um computador moderno são, usualmente,
divididas em uma hierarquia, conforme apresentado na Figura 1.

Claretiano - Centro Universitário



108 © Sistemas Operacionais

 
 
 
 

  
 


 

 

 
 
 
 
 

Fonte: adaptado de Deitel, Deitel e Choffnes (2005, p. 241).
Figura 1 Organização da hierarquia de memória.

Observe
 que há três níveis de memória: a cache, a memória
principal
 e o nível de memórias secundárias e terciárias.
A memória cache é a mais rápida da hierarquia. Tem custo
elevado e, por isso, está disponível em menor quantidade, pouco
espaço de armazenamento e baixo tempo de acesso. Consideran-
do sua velocidade de acesso, ela armazena os dados que são aces-
sados pelo processador com maior frequência sem a necessidade
de ficar esperando pela liberação dos dados pela memória RAM,
melhorando o desempenho do sistema.
A memória principal, por sua vez, é utilizada para armazenar
os programas e os dados que estão sendo utilizados pelo proces-
sador no momento da execução.
Já a memória secundária é utilizada para o armazenamento per-
manente de programas e dados que não são acessados com muita fre-
quência. Como você pôde observar na Figura 1, esse tipo de memória
é mais barato e, por isso, encontra-se disponível em maior quantidade.
A atribuição de endereços de memória para os programas e
os dados é chamada de address binding e pode ser realizada em
três situações:
© U3 - Gerenciamento de Memória 109

• Em tempo de compilação: nesse caso, o endereço de me-


mória é conhecido previamente, e a atribuição de ende-
reços é feita pelo próprio compilador.
• Em tempo de carga: nesse caso, não se conhece previa-
mente o endereço em que o programa será carregado.
Para que a atribuição de endereços seja feita, o compila-
dor gera um código realocável que pode ser carregado em
qualquer endereço que esteja disponível no momento.
• Em tempo de execução: ocorre quando um processo
pode ser deslocado de um endereço de memória para
outro durante a sua execução. Nesse caso, utiliza-se um
intervalo possível de endereços para locação, por meio de
registradores base e limite.

Registradores
Nas primeiras arquiteturas de computadores, cada progra-
ma podia ser carregado em um único endereço de memória, o que
dificultava a programação de aplicações e o compartilhamento de
memória. Uma técnica desenvolvida mais tarde permitiu a utili-
zação de registradores no hardware, em que os processos pos-
suem um par de registradores, chamados de registrador base e
registrador limite, que indicam endereços de memória mínimo e
máximo, respectivamente. Dentro desse intervalo mínimo e máxi-
mo, os programas podem utilizar qualquer endereço de memória.
Os valores dos registradores base e limite podem ser alterados de
acordo com a disponibilidade de memória no momento.

Gerenciador de memória
Até aqui, você estudou alguns conceitos importantes, tais
como: a evolução e os tipos de memória e os registradores, que serão
utilizados para explicar os novos conceitos apresentados nos próxi-
mos tópicos. Lembre-se do significado de gerenciamento de memória
e do porquê de ele ser necessário, pois isso facilitará os seus estudos.
De acordo com Deitel, Deitel e Choffnes (2005, p. 239):

Claretiano - Centro Universitário


110 © Sistemas Operacionais

[...] gerenciador de memória é um componente do sistema opera-


cional que se preocupa com o esquema de organização da memó-
ria do sistema e com as estratégias de gerenciamento de memória.

O gerenciamento de memória pode ser dividido em dois


tipos: o gerenciamento simples e o gerenciamento com troca de
processos e paginação.
No gerenciamento simples, também conhecido como geren-
ciamento de memória sem swapping, os processos a serem execu-
tados ficam armazenados na memória principal. No gerenciamento
com swapping, há transferência de processos entre a memória prin-
cipal e o disco durante a execução do sistema. Para ambos os casos,
há técnicas que auxiliam no gerenciamento da memória.
O gerenciamento de memória com troca de processos e pa-
ginação é uma técnica que pode ser utilizada para os casos em
que a memória principal não é suficiente para armazenar todos os
processos em execução simultaneamente. No dia em que a me-
mória principal não tiver mais problema de capacidade de arma-
zenamento, caso isso algum dia aconteça, essas técnicas não serão
mais necessárias.

6. MONOPROGRAMAÇÃO, OU GERENCIAMENTO DE
MEMÓRIA SEM SWAPPING OU PAGINAÇÃO
Nos esquemas de gerenciamento de memória mais antigos,
que utilizavam esquemas simples, a memória era compartilhada
entre o programa e o sistema operacional. Esse esquema, chama-
do de sistemas de usuário único, ou monoprogramação, era em-
pregado em computadores de grande porte e minicomputadores,
porém, hoje, não é mais utilizado.
Nesse esquema, somente um processo pode ser executado a
cada instante: o sistema operacional carrega o programa solicitado
do disco na memória e executa-o; ao chegar ao final do processo,
o sistema operacional mostra, na tela, um aviso e espera um novo
© U3 - Gerenciamento de Memória 111

comando. Esse novo comando carregará o novo programa no mes-


mo espaço de endereçamento ocupado pelo programa anterior.
A Figura 2 exemplifica três maneiras simples de organizar a
memória.

Fonte: Tanenbaum (2003, p. 140).


Figura 2 Três maneiras de organizar a memória.

Por ser um esquema simples, a monoprogramação não é


muito utilizada atualmente, estando presente apenas em alguns
sistemas embarcados.

7. MULTIPROGRAMAÇÃO
Os sistemas modernos possibilitam que vários processos se-
jam executados de forma simultânea por meio da multiprograma-
ção, utilizando os conceitos de estados de processos, que apresen-
tamos na Unidade 2. Dessa forma, um processo bloqueado que
aguarda por uma operação de entrada e saída poderá ceder lugar
para que outro processo ocupe a CPU, melhorando o desempenho
e a utilização do processador. A multiprogramação pode utilizar-
-se de algumas técnicas para o gerenciamento de memória, tais
como: o gerenciamento com partições fixas, o gerenciamento de
memória com partições variáveis, o gerenciamento por swapping,
entre outros.

Claretiano - Centro Universitário


112 © Sistemas Operacionais

Multiprogramação com partições fixas


Para direcionar a multiprogramação, foram criadas as partições
fixas com tamanhos diferentes dentro da memória principal. Atual-
mente, os sistemas modernos permitem a execução de múltiplos pro-
cessos, de forma que, no momento que um processo for bloqueado,
outro processo utiliza a CPU. Observe, na Figura 3, a demonstração
das filas de entrada de tarefas separadas para cada partição.
Múltiplas filas de entrada
800 K
Partição 4
700 K

Partição 3

400 K

Partição 2

200 K
Partição 1
100 K
Sistema
operacional
0
Fonte: Tanenbaum (2003, p. 141).
Figura 3 Partições fixas de memórias com filas separadas.

De acordo com a Figura 3, para cada partição de tamanho


fixo, pode-se ter uma fila de processos que são alocados conforme
o tamanho de partição que necessitam.
Com o tamanho de partições fixas, todo espaço não utilizado
por uma tarefa é perdido, o que se caracteriza como uma desvan-
tagem dessa técnica. Outra desvantagem é quando a fila para uma
partição grande fica vazia, enquanto as filas para partições meno-
res ficam cheias. Como exemplo, podemos citar as filas 1 e 3 da
Figura 3. Nesse caso, um processo pequeno deverá aguardar a li-
beração da memória para sua fila, mesmo havendo bastante espa-
© U3 - Gerenciamento de Memória 113

ço desocupado em outras filas de espaços maiores. Esse problema


não existia no esquema de monoprogramação, pois o tempo todo
apenas uma tarefa estava presente na memória principal.
Para minimizar o problema com o desperdício de espaço, surgiu
uma alternativa para trabalhar com as partições fixas tendo uma única
fila de processos. Essa técnica é chamada de multiprogramação por
partição fixa com código realocável. Nesse caso, os programas po-
dem ser executados em qualquer partição disponível que seja grande
o suficiente para comportá-los, conforme ilustra a Figura 4.
Nesse esquema de partição fixa com código realocável, cada
partição é delimitada pelos registradores base e limite. Quando um
novo processo (Px) solicita alocação de memória, os registradores
são consultados, e o tamanho do espaço de cada partição (diferença
entre registradores limite e base) é calculado; se couber o processo
(Px) na partição consultada, então, o espaço será ocupado por ele.
800K
Partição 4
700K

Fila Única
Partição 3

400K

Partição 2

200K
Partição 1

100K
SO

Fonte: Tanenbaum (2003, p. 141).


Figura 4 Partições fixas de memórias com fila única.

Claretiano - Centro Universitário


114 © Sistemas Operacionais

O gerenciamento de memória com partições fixas funciona


bem quando todas as tarefas a serem executadas pelo sistema são
do mesmo tamanho ou, ainda, quando os tamanhos são conheci-
dos antecipadamente.
Após diversas alocações de memória usando a técnica de
partições fixas, podemos observar um problema de fragmentação,
que consiste na subutilização de certas áreas da memória princi-
pal. A fragmentação ocasionada nesse esquema de multiprogra-
mação com partições fixas é chamada de fragmentação interna e
é ilustrada na Figura 5.
800K
Partição 4
700K

Partição 3
Memória não
utilizada

Memória
utilizada 400K

Partição 2

200K
Partição 1

100K
SO
0
Fonte: adaptado de Deitel, Deitel e Choffnes (2005, p. 249).
Figura 5 Fragmentação em um sistema de multiprogramação por partição fixa.

Observe, ao analisar a ilustração da Figura 5, que, após o uso


das partições 1, 2 e 3, sobrou alguma memória sem utilização. Isso
acontece porque os processos que foram acomodados em cada
um desses blocos de memória não necessitavam de todo o seu ta-
manho, mas, como tinham de ser alocados em um espaço suficien-
© U3 - Gerenciamento de Memória 115

te o bastante para acomodá-los, foi necessário escolher partições


maiores do que o necessário, causando fragmentação interna.
As partições fixas podem, por um lado, ser pequenas demais;
assim, não são suficientes para tarefas muito grandes e, por conse-
guinte, são rejeitadas ou têm de esperar uma partição maior. Por ou-
tro lado, se as partições forem grandes demais, haverá um desperdí-
cio de memória, gerando o problema da fragmentação interna.
No geral, o uso de partições fixas pode atender aos sistemas
de processamento em lote (batch), mas não aos sistemas de tem-
po compartilhado (time sharing), em razão do maior número de
processos mantidos em memória e, consequentemente, da menor
tolerância aos problemas de desperdício de espaço que esses sis-
temas possuem.

Multiprogramação com partições variáveis


Quando o esquema da multiprogramação por partições fixas
se tornou mais custoso que útil para atender às solicitações, surgiu
um novo conceito de gerenciamento de memória por meio do uso
de partições variáveis. Nesse esquema, a ideia inicial considera
apenas uma partição livre, sem demarcações. Conforme os pro-
cessos solicitam alocação na memória, o sistema operacional de-
marca uma nova partição com o tamanho exato requisitado pelo
processo.
A Figura 6 ilustra o esquema da multiprogramação com par-
tições variáveis.

Claretiano - Centro Universitário


116 © Sistemas Operacionais

….
P5 precisa de 14MB.

P4 precisa de 25MB.

P3 precisa de 10MB.

P2 precisa de 20MB.

P1 precisa de 15MB.

Partição
Partição Partição Livre =
Livre = Livre =
Partição
Livre = 50MB
Partição
85MB 75MB
Livre = P4 – 25MB
105MB
120MB P3 – 10MB P3 – 10MB
P2 – 20MB P2 – 20MB P2 – 20MB
P1 – 15MB P1 – 15MB P1 – 15MB P1 – 15MB

S.O. S.O. S.O. S.O. S.O.

Fonte: adaptado de Deitel, Deitel e Choffnes (2005, p. 250).


Figura 6 Demarcações de partições iniciais na programação por partição variável.

Nesse esquema de alocação de espaço por meio do geren-


ciamento com partições variáveis, à medida que os processos che-
gam, o espaço livre da memória principal é particionado, e uma
partição com o tamanho do processo que deverá acomodá-lo é
criada. Observe, na Figura 6, que havia, inicialmente, 120MB dis-
poníveis; quando o processo P1 solicitou alocação de memória, o
espaço livre foi dividido, e uma partição do tamanho exato de P1
(15MB) foi criada. O mesmo aconteceu com P2, P3 e os demais
processos.
© U3 - Gerenciamento de Memória 117

É possível concluir que, à medida que os processos são execu-


tados e concluídos, as partições vão sendo liberadas e é possível que
cheguem novos processos de tamanhos diferentes daquelas parti-
ções já demarcadas, que, portanto, não poderão ser alocados. Supo-
nha que os processos P1, P2 e P4 terminem sua execução e liberem
as partições que ocupavam, com 15MB, 20MB e 25MB, respectiva-
mente. Suponha, ainda, que chegue um novo processo, P5, que ne-
cessita de 75MB para que possa ser executado; ele não encontrará
uma partição livre, contígua, grande o suficiente para o comportar e
não poderá ser carregado. A Figura 7 ilustra esse problema.

….
P5 precisa de 75MB.

P4 precisa de 25MB.

P3 precisa de 10MB.

P2 precisa de 20MB.

P1 precisa de 15MB.

Partição 50 MB 50 MB
Partição
Livre = Livre =
Partição
Livre =
85MB 75MB
P4 – 25MB 25MB
105MB
P3 – 10MB P3 – 10MB P3 – 10MB
P2 – 20MB P2 – 20MB P2 – 20MB 20MB

P1 – 15MB P1 – 15MB P1 – 15MB P1 – 15MB 15MB

S.O. S.O. S.O. S.O. S.O.

Fonte: adaptado de Deitel, Deitel e Choffnes (2005, p. 250).


Figura 7 Programação com partições variáveis – problema da fragmentação externa.

Claretiano - Centro Universitário


118 © Sistemas Operacionais

Esse fenômeno observado na Figura 7 se chama fragmen-


tação externa, ou seja, há espaços suficientes disponíveis na me-
mória para acomodar processos maiores, mas eles estão divididos
em partições menores que, separadas, não têm capacidade para
acomodar os novos processos que chegam.
Existem algumas formas para solucionar esse problema da
fragmentação externa; uma delas é conhecida como coalescência.
De forma bem simples, a coalescência consiste na união de espa-
ços de memória que sejam vizinhos (contíguos) para formar blocos
maiores, que podem acomodar processos maiores.
No exemplo apresentado na ilustração da Figura 7, a técni-
ca de coalescência poderia unir a partição liberada pelo processo
P4 de 25MB, que, após sua execução, se torna uma partição livre,
com a partição de 50MB, formando uma única partição de 75MB,
necessários para acomodar o processo P5 e corrigir o problema da
fragmentação externa.
Mesmo após a utilização da técnica de coalescência, ainda
pode haver diversas partições pequenas espalhadas (não contí-
guas) pela memória principal, o que se pode tornar um prejuízo
grande e subutilizar o espaço disponível.
Outra solução para a fragmentação externa é a compacta-
ção das áreas livres de memória. Essa técnica consiste na realo-
cação dos espaços de memória que se encontram livres e espa-
lhados (não contíguos) em um único bloco contíguo de memória
capaz de armazenar processos maiores, que necessitam de maior
espaço.
© U3 - Gerenciamento de Memória 119

50MB

110MB
25MB

P3 – 10MB
20MB

15MB P3 – 10MB
S.O. S.O.

Figura 8 Programação com partições variáveis – compactação de áreas livres de memória.

A Figura 8 ilustra a técnica da compactação de memória. Ob-


serve que há a necessidade de realocação dos processos em exe-
cução, que ocuparão outros endereços de memória, nesse caso, o
P3. É, ainda, importante mencionar que essa técnica de realocação
corrige, de forma razoável, o problema da fragmentação externa,
mas o custo é alto, pois exige recursos do sistema, que pode ficar
lento durante a realocação, gerando uma sobrecarga significativa.
Assim, a melhor alternativa é procurar evitar o problema da
fragmentação externa antes de encontrar soluções para corrigi-lo.
Deitel, Deitel e Choffnes (2005) apresentam três estratégias
de posicionamento de memória, que têm como função possibilitar
ao sistema operacional escolher a melhor posição de memória a
ser ocupada por cada novo processo que solicita alocação.
A primeira estratégia é chamada de First-Fit – Primeiro (es-
paço) que Couber – e consiste na escolha do primeiro bloco livre
de tamanho suficiente encontrado que acomode o processo que
acaba de chegar. Por ser simples de utilizar, não exige muitos re-
cursos do sistema na busca do espaço livre. Essa técnica é a que
apresenta menor custo para o sistema.

Claretiano - Centro Universitário


120 © Sistemas Operacionais

A segunda estratégia é conhecida por Best-Fit – Melhor (es-


paço) que Couber – e consiste na escolha do bloco que deixar o me-
nor espaço livre após acomodar o processo na tentativa de utilizar
a maior quantidade de espaço livre disponível, reduzindo as perdas.
As simulações demonstram que essa técnica desperdiça muito es-
paço, pois tende a criar muitos "buracos" pequenos na memória,
que serão inúteis e não poderão alocar outros processos.
A terceira estratégia é chamada de Worst-Fit – Pior (espaço)
que Couber – e consiste na escolha do bloco que deixar o maior
espaço não utilizado possível. A princípio, parece ser uma técnica
ruim, mas a ideia é ocupar o maior espaço livre possível, utilizando
o menos possível dele, e, com isso, deixar livre algum espaço que
pode acomodar um novo processo. De forma conclusiva, as simu-
lações apresentadas na literatura demonstram que essa técnica
não apresenta bons resultados.
Todas as estratégias apresentadas consistem em algoritmos,
mais simples ou mais complexos, que realizam cálculos na tentati-
va de encontrar a melhor forma de alocar processos na memória
com o menor prejuízo. As três técnicas apresentadas podem cau-
sar fragmentação interna ou externa.

Multiprogramação por troca de memória: swapping


A técnica de organizar a memória em partições fixas é bem
simples. Enquanto conseguirmos manter a CPU sempre ocupada,
não há necessidade de utilizar outra técnica mais complicada.
Entretanto, em sistemas de tempo compartilhado, a situa-
ção é diferente. Muitas vezes, não existe memória principal para
todos os processos, de forma que alguns devem ser mantidos em
disco para, posteriormente, serem executados. Outra dificuldade
que surge é que a memória principal pode não ser suficiente para
acomodar todos os processos em execução.
Por isso, duas técnicas de gerenciamento de memória po-
dem ser utilizadas para resolver esse problema. A mais simples é
© U3 - Gerenciamento de Memória 121

chamada de troca de memória, ou troca de processos (swapping),


e a outra, de memória virtual.
Para que você compreenda o funcionamento da troca de
memória (swapping), acompanhe, passo a passo, a Figura 9, que
resgata o princípio da realocação em partições variáveis.
Tempo 

C C C C C

B B B B
A

A A A
D D D

S.O. S.O. S.O. S.O. S.O. S.O. S.O.

(a) (b) (c) (d) (e) (f) (g)

Fonte: adaptada de Tanenbaum (2003, p. 145).


Figura 9 Alocações de memória à medida que processos entram e saem.

Analise o processo de alocação de memória na Figura 9 e


observe que, no início, somente o processo A está na memória.
Logo em seguida, são trazidos do disco (memória secundária) até a
memória principal os processos B e C. Na Figura 9(d), o processo A
é devolvido ao disco (memória secundária); note que uma lacuna
é deixada na memória principal. Agora, o processo D é carregado
na memória, e o B é retirado, conforme a Figura 9(e, f). Por fim, na
Figura 9(g), o processo A é carregado novamente do disco para a
memória principal, porém, em uma localização diferente da ante-
rior. Os endereços são realocados via software, durante a carga na
memória, ou via hardware, durante a execução do programa.

Claretiano - Centro Universitário


122 © Sistemas Operacionais

Observe que o algoritmo utilizado para exemplificar a téc-


nica de swapping é o mesmo que aprendemos na alocação de
memória com partições variáveis. A novidade introduzida por
essa técnica é que os processos que entram em estado de blo-
queado podem ser devolvidos para o disco, memória secundária,
até que sua solicitação seja atendida; são, então, realocados na
memória principal, possivelmente em endereço diferente do an-
terior, para finalizar sua execução. Assim, um processo não preci-
sa, necessariamente, permanecer na memória principal durante
toda a sua execução.
Dessa forma, podemos enxergar uma parte da memória se-
cundária (disco) como uma expansão da memória principal que
pode ser utilizada durante a execução de processos para armaze-
nar os processos bloqueados até que sua solicitação seja atendida
e eles possam voltar à memória principal (e ao processador) para
finalizar sua execução.
Com o tempo, são criadas lacunas na memória principal,
como vimos na utilização dessa técnica de alocação com partições
variáveis. Lembre-se de que é possível unir todos os processos em
um único espaço contíguo utilizando a técnica de compactação de
memória, que vimos anteriormente.
No geral, os processos podem não ter tamanhos fixos, mas
seria ótimo se tivessem, pois a alocação seria bem mais fácil. No
entanto, é possível que, durante sua execução, a área de dados de
um processo cresça em tamanho, influenciando na alocação do
espaço de memória para aquele processo.
Algumas linguagens de programação permitem a alocação
de memória heap como espaço temporário de expansão, o que
possibilita que a área de dados de um processo cresça durante a
execução do programa. Isso é algo muito comum e pode ser um
problema, pois não saberemos o tamanho exato que um processo
necessitará para concluir sua execução, e sua área de dados pode-
rá crescer.
© U3 - Gerenciamento de Memória 123

Se houver espaço livre disponível adjacente ao processo,


ótimo, ele poderá crescer alocando espaço ao lado do processo.
No entanto, pode ocorrer de o espaço adjacente já estar ocupado;
então, o processo poderá ser movido para uma área de memória
grande o suficiente para contê-lo.
Se quisermos que, em um sistema, a maioria dos processos
cresça durante a execução, uma boa ideia seria a criação dessa pe-
quena área de memória extra para expansão (heap) ao se realizar
a transferência de um processo, a fim de reduzir o trabalho asso-
ciado à sua movimentação que não cabe mais na memória alocada
(reservada) a ele, como mostra a Figura 10.

Espaço para expansão

Sistema
operacional

Fonte: Tanenbaum (2003, p. 146).


Figura 10 Espaço para uma área de dados em expansão.

A Figura 10 ilustra os processos A e B com suas respectivas


áreas de expansão alocadas para crescimento dos processos. É im-
portante deixar registrado que, na transferência dos processos em
execução para a memória secundária, somente o espaço de me-
mória efetivamente em uso é transferido, e não o espaço extra de
expansão, a fim de reduzir custos e desperdício.

Claretiano - Centro Universitário


124 © Sistemas Operacionais

Memória virtual
Existe outra técnica que você poderá utilizar para resolver os
problemas de programas maiores que a memória principal dispo-
nível: a memória virtual.
De acordo com Tanenbaum (2003), quando não existia a téc-
nica de memória virtual, geralmente, o programa era dividido em
módulos chamados de overlays (sobreposição). O overlay 0 seria
o primeiro a ser executado. Quando terminasse a execução, outro
seria chamado para a memória e assim sucessivamente. Embora o
trabalho real de troca de um overlay do disco para memória e vice-
-versa fosse realizado pelo sistema operacional, caberia ao progra-
mador a divisão do programa em módulos, e isso era uma tarefa
trabalhosa.
Mais tarde, essa atribuição de divisão começou a ser reali-
zada pelo computador, que, desse modo, ficou conhecido como
memória virtual. De uma maneira simples, memória virtual utiliza
o disco (memória secundária) como extensão da memória princi-
pal e pode executar programas maiores que a memória principal
fisicamente disponível. Isso dá a ilusão de que a memória princi-
pal é maior do que ela realmente é. As partes ativas do programa
encontram-se na memória, e todas as partes inativas em determi-
nado momento da execução ficam armazenadas em disco.
Suponha um programa de 32MB; ele pode ser executado em
uma máquina com apenas 8MB por meio de uma escolha cuida-
dosa feita pelo sistema operacional em que 8MB serão mantidos
ativos na memória em cada instante, dinamicamente, dando a ilu-
são de que o programa inteiro está na memória.
Quando trabalhamos com memória virtual, além do endere-
ço físico, também chamado de endereço real, ou endereço prin-
cipal, utilizado para referenciar a localização de um processo na
memória e em execução, existe o endereço virtual, igualmente
chamado de endereço lógico.
© U3 - Gerenciamento de Memória 125

Para compreender a diferença entre esses dois conceitos de


endereçamento de memória, considere a instrução apresentada
a seguir, em mnemônicos, de um trecho escrito em pseudolin-
guagem de máquina. Esse exemplo foi adaptado de Tanenbaum
(2003, p. 149).

MOV REG1 [1000]


Considere que essa instrução deverá mover o valor de uma
variável qualquer, armazenado no endereço de memória 1000,
para o registrador chamado Reg1. Esse endereço de memória utili-
zado pelo programador para passar instruções para o computador,
1000, é o endereço virtual. O processo de tradução de endereço é
realizado pelo sistema operacional em conjunto com o hardware,
e isso é feito de forma transparente para o usuário.
Dessa forma, os endereços que o usuário pode enxergar e
acessar por meio da programação são os endereços virtuais. Os
endereços físicos são aqueles conhecidos pelo sistema operacio-
nal e não manipulados diretamente pelo usuário. Considere, nesse
caso, que usuário é o desenvolvedor de sistemas.
A maioria dos sistemas que trabalham com memória virtual
utilizam uma técnica chamada de paginação.
Paginação
Conforme vimos, os programas, ao serem executados, ge-
ram um conjunto de endereços de memória que é denominado
endereço virtual. Nos sistemas com memória virtual, os endere-
ços virtual e físico não são os mesmos, e os dados não são coloca-
dos diretamente no barramento de memória, mas, sim, enviados
a uma unidade de gerenciamento de memória MMU – Memory
Management Unit –, que realiza o mapeamento de endereços vir-
tuais em físicos, conforme mostra a Figura 11.

Claretiano - Centro Universitário


126 © Sistemas Operacionais

A CPU envia endereços
Chip da CPU virtuais à MMU

CPU
Unidade de Memória Controlador de
gerenciamento de Disco
memória (MMU)

MMU envia endereços


físicos à memória

Fonte: adaptado de Tanenbaum (2003, p. 150).


Figura 11 Localização e função de uma MMU.

Observe, na Figura 11, que, no exemplo apresentado, a uni-


dade de gerenciamento de memória (MMU) se localiza, de forma
integrada, no chip da CPU e tem a função de receber os endereços
virtuais da CPU e convertê-los em endereços físicos de memória,
que poderão ser acessados pelo barramento.
A Figura 12 mostra um computador que pode gerar endere-
ços virtuais de 16 bits, de 0 a 64K. No entanto, esse computador
tem somente 32KB de memória física, e um programa de 64KB não
pode ser totalmente carregado na memória para ser executado.
Assim, partes desse programa serão carregadas, dinamicamente,
na memória quando necessário.
A técnica de paginação consiste em dividir o espaço de ende-
reçamento virtual em unidades, que recebem o nome de páginas
(pages). As unidades correspondentes a essas páginas na memória
física são chamadas de molduras de páginas (page frames) e têm
o mesmo tamanho das páginas. As páginas da memória virtual são
mapeadas em molduras da memória física.
Analisando o exemplo da Figura 12, notamos que são apresen-
tadas apenas oito molduras de páginas físicas, ou seja, apenas oito
páginas virtuais serão simultaneamente carregadas na memória fí-
sica. As outras páginas, indicadas com um X, não estão mapeadas.
Se um programa tentar usar uma página virtual não mapeada, o sis-
tema operacional escolhe uma moldura de página pouco utilizada e
salva-a em um disco – chamamos essa operação de falta de página
© U3 - Gerenciamento de Memória 127

(page fault). Em seguida, ele carregará a página virtual referenciada


pela instrução na moldura de página recém-liberada e atualizará o
mapeamento de tabela de páginas. Esse mapeamento informa se a
página está ou não fisicamente presente na memória.

Fonte: Tanenbaum (2003, p. 151).


Figura 12 Relação entre endereços virtuais e físicos de memória.

8. ALGORITIMOS DE SUBSTITUIÇÃO DE PÁGINAS


Quando ocorre uma falta de página, o sistema operacional es-
colhe uma para ser removida da memória, a fim de liberar espaço
para uma nova página. Seria bem melhor se substituíssemos uma

Claretiano - Centro Universitário


128 © Sistemas Operacionais

página que não estivesse sendo muito utilizada que escolher uma
aleatoriamente, pois, se uma página que está sendo muito utilizada
for substituída, logo terá de ser trazida de volta, ocasionando um
trabalho extra a ser realizado pelo sistema operacional.
Veja, a seguir, alguns algoritmos importantes de substituição
de páginas que alcançam um desempenho melhor do sistema de
gerenciamento de memória.

Algoritmo de substituição de páginas FIFO


No algoritmo FIFO (First-In-First-Out), a página que está há
mais tempo no sistema é substituída, ou seja, o sistema classifica
a ordem em que as páginas entram na memória e escolhe a que
estiver há mais tempo na memória para ser retirada e dar espaço
para o carregamento de outra página.
Apesar de ser um algoritmo bem simples e de baixo custo de
implantação, ele apresenta uma desvantagem quando comparado
a um sistema de tempo compartilhado. Imagine a possibilidade de
escolher uma página que é intensamente utilizada. Essa seria uma
má escolha, pois ela teria de ser chamada novamente a ocupar a
memória principal, causando, assim, um aumento da taxa de falta
de páginas e ocasionando, ainda, um desperdício de recursos ao
ter de transferir a página novamente para a memória.
Veja o algoritmo FIFO na Figura 13. Observe que, na quarta
linha da tabela apresentada na figura, quando a página A foi refe-
renciada, ela já existia; portanto, a falta de página não foi acusada.
A entrada da página D na quinta linha faz que uma página seja es-
colhida para dar espaço. No caso, a primeira página que entrou, ou
seja, a página A, foi substituída. Em seguida, esta teve de retornar
à memória principal. Novamente, obedecendo à fila de entrada, a
página escolhida para ser substituída foi a página B, agora de acor-
do com a sexta linha.
© U3 - Gerenciamento de Memória 129

Fonte: Deitel; Deitel; Choffnes (2005, p. 311).


Figura 13 Substituição de páginas FIFO.

Algoritmo LRU (Least-Recently-Used), ou MRU (Menos-


Recentemente-Usada)
O algoritmo LRU (Least-Recently-Used) utiliza como base a
localidade temporal de uma página na memória. A ideia básica é
que páginas que foram muito utilizadas nas últimas instruções têm
grandes chances de serem utilizadas novamente, enquanto pági-
nas que foram pouco utilizadas nas últimas instruções têm gran-
des chances de continuarem não sendo referenciadas.
O sistema realizará a substituição da página que passou o
maior tempo na memória sem ser referenciada, ou seja, será reti-
rada da memória aquela que ficou muito tempo sem uso.
As páginas que não são utilizadas vão para o final de uma lis-
ta. Quando uma página tiver de ser substituída, o sistema procura-
-a no final dessa lista e remove-a.
A Figura 14 exemplifica o funcionamento do algoritmo que
implementa a técnica LRU.

Claretiano - Centro Universitário


130 © Sistemas Operacionais

Fonte: Deitel, Deitel e Choffnes (2005, p. 313).


Figura 14 Substituição de páginas LRU.

Analise, agora, o funcionamento do algoritmo ilustrado na


figura e observe que, na linha 1, a página A é referenciada e, por-
tanto, ocupa o topo da lista de páginas mais utilizadas, lembrando
que essa lista comporta até as três últimas páginas mais utilizadas.
Na segunda linha, chega a página B, que passa a ocupar o topo da
lista. Na terceira linha, a página C ocupa o topo da lista por ser a
última referência de instrução.
Na quarta, quinta e sexta linhas, as mesmas páginas que se
encontram na lista de últimas referenciadas são acessadas, apenas
trocando de posições. Na sétima linha, chega uma nova página, D,
que, até então, não tinha sido referenciada e que, portanto, não
estava na lista das mais utilizadas. O sistema operacional, utilizan-
do a técnica de substituição de páginas, deverá selecionar uma das
três páginas da lista, a última referenciada (que está no fim da lis-
© U3 - Gerenciamento de Memória 131

ta), e removê-la para ceder lugar à nova página que está chegando,
D, que ocupará o topo da lista.
Se continuarmos a analisar o mesmo exemplo, observamos
que, na linha 8, houve uma nova referência à página A, que deverá
ocupar, novamente, o topo da lista. Na linha 9, o mesmo acontece
com a página B, que é referenciada e passa a ocupar o topo da lista.
Na linha 10, chega uma nova página, F, que, até agora, não ti-
nha sido referenciada e que não se encontrava na lista das últimas
acessadas. Nesse caso, a página D é removida do fim da lista, e a
página F é inserida no topo. Para finalizar o algoritmo, a página B
é acessada, mas, como já é uma das três últimas e se encontra na
lista, há apenas uma realocação para que esta ocupe o topo.
Apesar de o LRU oferecer melhor desempenho em relação
ao FIFO, ele exige mais processamento do sistema, ficando um
pouco mais sobrecarregado.

Algoritmo LFU (Least-Frequently-Used), ou MFU (Menos-


Frequentemente-Usada)
O algoritmo LFU (Least-Frequently-Used) tem como base
uma página não intensivamente referida; provavelmente, ela não
será referida no futuro, ou seja, o sistema substituirá a página que
for menos usada. Observe que, no LRU, as páginas mantidas em
memória eram as últimas utilizadas, isto é, aquelas que eram utili-
zadas recentemente. Já nesse algoritmo, são mantidas em memó-
ria as páginas mais utilizadas, ou seja, aquelas que são utilizadas
frequentemente, enquanto as não tão utilizadas são substituídas.
O LFU é implementado ao se utilizar um contador, que é
atualizado toda vez que uma página é referenciada. Esse contador
é incrementado a cada referência de página. Durante esse proces-
so, é possível que ocorra uma sobrecarga no sistema.
É bem possível que ocorra, também, um erro na escolha de
páginas ao se utilizar o LFU, uma vez que a página menos usada

Claretiano - Centro Universitário


132 © Sistemas Operacionais

poderia ser uma página que acabou de ser trazida para a memória,
a qual foi utilizada apenas uma vez, enquanto as outras podem ter
sido utilizadas duas ou mais vezes. Então, o sistema poderá substi-
tuir essa página que acabou de chegar, causando um grave proble-
ma de desempenho caso ela seja usada imediatamente.
Podemos observar que tanto a técnica MRU quanto a MFU
geram sobrecarga no sistema, pois a MFU precisa atualizar o con-
tador de acessos, e a MRU precisa atualizar os ponteiros de uma
lista encadeada. Dependendo dos acessos, é possível que a MRU
gere uma sobrecarga maior pela utilização de ponteiros e lista en-
cadeada, mas isso dependerá dos tipos de programas acessados.

Algoritmo NRU (Not-Recently-Used) ou Não Usada Recentemente


O algoritmo NRU (Not-Recently-Used) trabalha com a substi-
tuição de páginas não usadas recentemente e busca minimizar os
custos do MRU. A técnica utiliza um algoritmo com dois bits para
cada página: o bit referenciado e o bit modificado. O bit referen-
ciado, ou bit acessado, recebe, inicialmente, o valor 0; ele sempre
terá esse valor até que a página seja referenciada e terá o valor 1
caso a página tenha sido referenciada. O bit modificado recebe o
valor 0 se a página não foi modificada e o valor 1 caso a página
tenha sido modificada.
O funcionamento do algoritmo seta, inicialmente, o valor 0
para o bit referenciado e para o bit modificado de todas as pági-
nas. Quando uma página for acessada, ela irá receber o valor 1 no
bit referenciado; quando for modificada, irá receber o valor 1 para
o bit modificado. Durante a substituição de páginas, o sistema
operacional irá procurar, em primeiro lugar, uma página que tenha
o valor 0 no bit referenciado e irá substituí-la pela nova página que
precisa ocupar a memória principal.
Caso não tenha nenhuma página com bit referenciado com
valor 0, o sistema operacional procurará uma página com bit mo-
dificado igual a 0, e ela será substituída pela nova página. Caso
© U3 - Gerenciamento de Memória 133

também não haja nenhuma página com bit modificado igual a 0, o


sistema operacional deverá escolher uma das páginas modificadas
para substituí-la. Nesse momento, outras técnicas podem ser utili-
zadas em conjunto com a NRU, ou então ela pode ser aprimorada
para facilitar a escolha da página a ser substituída.
A NRU é uma técnica utilizada, atualmente, com outras técnicas
e facilita a seleção de páginas pelo sistema operacional, as quais devem
ser retiradas da memória principal para dar lugar a outras páginas.

9. SEGMENTAÇÃO
Vimos que a implementação da paginação considera um seg-
mento linear da memória principal, determinado por endereços míni-
mo e máximo, e que há algumas técnicas que permitem a realocação e
união de blocos menores para formar blocos de memória maiores que
tenham condições de acomodar os programas. Entretanto, os espaços
que representam um bloco livre devem ser contíguos na paginação.
A segmentação é uma técnica que não utiliza os endere-
ços mínimo e máximo para delimitar o espaço contíguo em que
os programas e seus dados podem ser executados. Dessa forma,
a segmentação permite que os programas sejam executados em
endereços reais separados, segmentados. Cada segmento deve
ser indicado por um endereço mínimo e máximo permitido, mas a
união de vários segmentos espalhados pode armazenar um único
programa e seus dados. Isso facilita, também, a alteração do tama-
nho de um segmento, que pode ser aumentado e reduzido sempre
que houver necessidade, sem afetar os demais segmentos e sem
afetar o conjunto de segmentos que comportam um programa.
Diferentemente das páginas, os segmentos não são fixos, o
que implica uma implementação diferenciada para a técnica de
segmentação. Observe a ilustração da Figura 15, que mostra o fun-
cionamento dessa técnica.

Claretiano - Centro Universitário


134 © Sistemas Operacionais

Segmento 0 Segmento 0 Segmento 0 Segmento 0 Segmento 0


(4K) (4K) (4K) (4K) (4K)

Segmento 1 Segmento 7 Segmento 7 Segmento 7 Segmento 7


(8K) (5K) (5K) (5K) (5K)

(3K) (3K) (3K)


Segmento 2
(5K)
Segmento 2 Segmento 2 Segmento 2 Segmento 2
(5K) (5K) (5K) (5K)
Segmento 6
(4K)
Segmento 3 Segmento 3 Segmento 6
Segmento 3
(8K) (8K) (4K) Segmento 5
(8K)
(4K)
(4K)

Segmento 4 Segmento 4 Segmento 5 Segmento 5


(4K) (4K) (10K)
(7K) (7K)

(3K) (3K)

(a) (b) (c) (d) (e)

Fonte: adaptado de Tanenbaum (2003, p. 189).


Figura 15 Técnica utilizando segmentação: (a) – (de) desenvolvimento da fragmentação
externa. (e) – correção da fragmentação externa usando compactação.

A Figura 15 ilustra que os segmentos não necessitam estar contí-


guos. Em 15(a), há um exemplo em que a memória física contém cinco
segmentos, de 0 a 4, com seus respectivos tamanhos. Suponha que o
segmento 1, que possui 8K, deva ser removido, e o segmento 7, com 5K,
deva ocupar seu lugar; o resultado dessa operação é ilustrado na Figura
15(b). Haverá um espaço não utilizado de 3K entre o segmento 2 e o
segmento 7. Esse espaço de 3K restantes pode ser considerado um novo
segmento para acomodar novos "pedaços" de programas e seus dados.
Suponha, ainda, que um novo segmento, o 5, substitui o seg-
mento 4. Como o segmento 5 tem apenas 4K e ocupará um espaço
com 7K, serão liberados 3K, conforme ilustra a Figura 15(c). Em
© U3 - Gerenciamento de Memória 135

15(d), o segmento 3 é substituído pelo segmento 6, liberando mais


um espaço com 4K livres.
Após essas operações, observamos que a memória está toda
segmentada e, também, cheia de espaços livres espalhados, que
podem não ser muito úteis da forma como estão, pois a organiza-
ção da memória com muitos segmentos pode ter um custo alto de
operacionalização. Nesse caso, é possível utilizar a técnica de com-
pactação para realocar os segmentos existentes e unir os espaços
espalhados em um único segmento, maior, que possa acomodar
novos programas de forma mais eficiente.
De forma comparativa, podemos analisar a paginação e a
segmentação. Tanto uma técnica quanto a outra são úteis para
exceder o tamanho da memória física existente. Na paginação, é
utilizado apenas um espaço de endereço linear identificado por
mínimo e máximo, enquanto, na segmentação, são utilizados vá-
rios desses espaços para comportar o armazenamento de um pro-
grama e seus dados. Na segmentação, os programas e os dados
ocupam espaços de endereçamento independentes, e essa técni-
ca auxilia no compartilhamento e na proteção.

10. QUESTÕES AUTOAVALIATIVAS


Procure responder, discutir e comentar as questões a seguir
que tratam da temática desenvolvida nesta unidade.
1) Com relação à memória, a troca de processos, ou troca de memória, é co-
nhecida como:
a) Swapping.
b) Interrupção.
c) Memória secundária.
d) Memória primária.
e) Partição.
2) A memória virtual veio para resolver qual problema:
a) Para que fosse possível executar o sistema operacional, bem como os
aplicativos, sem que os computadores tivessem memória RAM.
b) Para que fosse possível executar programas maiores que a memória prin-
cipal disponível.

Claretiano - Centro Universitário


136 © Sistemas Operacionais

c) Para que fosse possível executar o sistema operacional sem a presença


de uma memória secundária.
d) Para que fosse possível instalar dois sistemas operacionais em um mes-
mo computador.
e) Para facilitar o gerenciamento da memória secundária, ou seja, a me-
mória física, permitindo a utilização de programas maiores do que seu
espaço disponível.
3) Considere a situação inicial da memória principal apresentada a seguir e su-
ponha que chegue um processo de 95KB para ser carregado. Com base nisso,
ilustre a situação final da memória após a alocação utilizando as três estraté-
gias apresentadas durante nosso estudo, a saber: First-Fit, Best-Fit e Worst-Fit.
Situação inicial:

110KB

P5 (70KB)

155KB

P3 (100KB)

135KB

P1(50KB)

S.O.

Gabarito
Confira, a seguir, as respostas corretas para as questões au-
toavaliativas propostas:
1) a.

2) b.
© U3 - Gerenciamento de Memória 137


3)  25KB 

110KB


110KB
  NOVO P (95KB)


  

P5 (70KB) P5 (70KB) P5 (70KB)


  

155KB 155KB 60KB


 

NOVO P (95KB)
 


P3 (100KB) P3 (100KB) P3 (100KB)

 40KB  
135KB 135KB
 NOVO P (95KB)

P1 (50KB) P1 (50KB) P1 (50KB)


S.O. S.O. S.O.

First -Fit Best-Fit Worst-Fit

11. CONSIDERAÇÕES
Nesta unidade, tivemos a oportunidade de estudar o geren-
ciamento de memória e os conceitos básicos que envolvem as téc-
nicas que auxiliam o sistema operacional a gerenciar a memória.
Compreendemos como é o funcionamento da memória fí-
sica de um computador e que ela pode ser dividida em: memória
cache, memória principal e memória secundária. Vimos, tamb­ém,
como os registradores facilitam o gerenciamento da memória.
Basicamente, o gerenciamento de memória é necessário de-
vido à limitação de espaço da memória, que não comporta todos os
programas que necessitam estar em execução ao mesmo tempo.
Também tivemos a oportunidade de aprender que todo pro-
grama em execução necessita estar na memória principal, mas esta
é limitada em tamanho e não tem condições de suportar todos os
programas que precisamos executar de forma paralela. Assim, al-

Claretiano - Centro Universitário


138 © Sistemas Operacionais

gumas técnicas surgiram com a finalidade de aproveitar melhor


a memória disponível e, também, de maximizar sua capacidade
com a utilização do disco rígido, que pode ser utilizado como uma
extensão da memória principal, permitindo, então, que utilizemos
um espaço de memória principal maior do que aquele que real-
mente temos disponível fisicamente.
Vimos, ainda, que a memória é dividida em endereços e que
os dados são armazenados fisicamente e referenciados pelos seus
endereços físicos. No entanto, o programador, visto, nesse caso,
como usuário final, não precisa conhecer todos os endereços físi-
cos de armazenamento, uma vez que o sistema operacional pode
estar usando técnicas de expansão da memória por meio do disco,
o que seria muito complexo para o usuário gerenciar. O que o pro-
gramador precisa, de fato, conhecer são os endereços virtuais. São
eles que podemos indicar em nossas instruções de códigos para
serem acessados e manipulados. Todo o trabalho de conversão
desses endereços virtuais para os endereços físicos, também cha-
mados de reais, ou principais, é realizado pelo sistema operacional
e torna-se algo transparente para os usuários.
A monoprogramação realiza um gerenciamento simples da
memória, em que cada processo é executado unicamente na me-
mória principal até sua conclusão, não havendo o gerenciamento
por swapping, ou paginação.
Já a multiprogramação permite a execução paralela de vá-
rios processos; portanto, a memória principal torna-se insuficiente
para comportar todos de uma vez. Dessa forma, o gerenciamen-
to faz-se mais necessário. Algumas técnicas apresentadas foram
a multiprogramação com partições de memória fixas, a multipro-
gramação com partições variáveis, a multiprogramação por troca
de processos (ou troca de memória) e as técnicas que trabalham
com memória virtual. Nesse último caso, o uso de memória vir-
tual possibilita a abstração de uma memória maior do que a que
realmente existe fisicamente. Vimos, também, alguns algoritmos
© U3 - Gerenciamento de Memória 139

que auxiliam no gerenciamento da memória virtual, tais como os


baseados em paginação e segmentação.
Aprendemos que um problema típico da multiprogramação
é a fragmentação da memória, que pode ser interna ou externa.
A fragmentação é um problema ocasionado pela realocação de
processos na memória, deixando "buracos" sem utilização que
poderiam ser utilizados por outros processos que necessitam de
alocação.
Para corrigir o problema da fragmentação, sugiram algumas
técnicas que têm o propósito de unir os pequenos "buracos" vagos
da memória para formar blocos maiores de espaços livres que pos-
sam ser utilizados por outros processos, tais como a coalescência,
que une espaços vazios contíguos; e a compactação de memória,
que une espaços não utilizados e não contíguos.
Com isso, encerramos esta unidade sobre o gerenciamento
de memória. É muito importante que você tenha compreendido
todos os conceitos apresentados e que não restem dúvidas. Su-
gerimos que consulte os livros indicados nas referências, pois são
obras clássicas, e esta unidade, assim como o restante deste ma-
terial, é fortemente embasada nesta literatura que apresentamos.
Caso você não se sinta seguro sobre os temas e conceitos
estudados, procure ajuda de seu tutor pela Sala de Aula Virtual.
Proponha discussões aos colegas e consulte outras fontes que po-
derão auxiliá-lo em seus estudos.

12. REFERÊNCIAS BIBLIOGRÁFICAS


DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R. Sistemas operacionais. 3. ed. São Paulo:
Pearson, 2005.
TANENBAUM, A. S. Sistemas operacionais modernos. 2. ed. São Paulo: Prentice Hall,
2003.
______. Sistemas operacionais modernos. 3. ed. São Paulo: Pearson, 2009.
SILBERSCHATZ, A. Sistemas operacionais com Java. 7. ed. Rio de Janeiro: Campus, 2008.

Claretiano - Centro Universitário


Claretiano - Centro Universitário