Você está na página 1de 27

 Memória é o segundo recurso de maior importância dentro da

arquitetura de um sistema computador.

 A disponibilidade e o gerenciamento deste recurso é vital


para o desempenho do sistema.

 Fatores como a quantidade de memória disponível, tempo de


acesso e custo são capitais na sua especificação e aquisição.
É evidente que o desejado é poder-se ter memória de maior capacidade,
que seja bastante rápida e cujo custo seja no mínimo compatível com o
dos demais componentes do computador. Como era de esperar, existe
uma relação de compromisso (trade-off) entre estes três fatores, na
realidade o que ocorre é que:

◦ memórias mais rápidas apresentam maior custo por bit


armazenado;

◦ memórias de maior capacidade apresentam menor custo por bit; e

◦ quanto maior a capacidade da memória mais lenta ela será.


 a) Registradores
Localizados no interior da UCP, servem de memória (buffer) para as
operações internas a UCP e são de acesso exclusivo ao processo
corrente.

 b) Cache
É uma memória RAM de tamanho reduzido e com velocidade de
acesso bem mais elevada do que a da memória principal. É utilizada
com o objetivo de acelerar a execução dos processos possibilitando
acesso mais rápido àquelas palavras mais freqüentemente
referenciadas.
c) Memória Principal
É constituída por um determinado número de células, cada uma
podendo armazenar uma quantidade fixa de informação e sendo
individualizada por um endereço único. A célula representa a
unidade de acesso à memória, isto é, a menor quantidade de bits
que pode ser individualmente endereçada e acessada. O tamanho
(quantidade de bits) de cada célula depende da arquitetura física do
computador.
Ao sistema operacional é destinada a função de coordenar e gerenciar a
utilização dessas memórias de forma eficiente. Este serviço é
implementado pelo sistema operacional através do gerenciador de
memória.

O gerenciador de memória controla quais partes da memória estão sendo


utilizadas e quais não estão. Além disso, ele é responsável por alocar
espaço em memória aos processos que serão executados e liberar as
posições de memória ocupadas quando os processos são finalizados.
A MMU é um módulo de hardware que faz o mapeamento entre os
endereços lógicos (end. da memória virtual) e os endereços físicos
da memória (RAM), ou seja, é um dispositivo que transforma
endereços virtuais em endereços físicos.

Para isso, a MMU normalmente traduz número de páginas virtuais para


número de páginas físicas utilizando uma cache chamada
Translation Lookaside Buffer (TLB).
Memória física -> é aquela que existe de verdade quando olhamos
para dentro do computador. Ela é endereçada conforme a
quantidade de espaço que fornece para o armazenamento das
informações.

Este endereçamento físico só


faz sentido para a unidade de
gerência de memória, que é
uma espécie de mini
processador instalado no
computador para transformar
esses endereços físicos
contínuos em endereços
lógicos.

Os endereços lógicos, sim, são acessíveis


para o carregamento dos processos e seus
dados de trabalho.
Podemos classificar os gerenciadores de memória em dois tipos:

 os que permitem as trocas de processos entre a memória


principal e o disco (troca de processos e paginação, mais
complexos);

 e os que não permitem (muito mais simplificados e limitados).


 Este é o esquema mais simples de gerenciamento de memória.
Neste caso a memória é compartilhada entre o sistema operacional e
o programa usuário.

O modelo apresentado em (a) foi utilizado em computadores de grande porte mas


não é mais empregado. Já a segunda organização (b) ainda é utilizada em alguns
palmtops e em sistemas embarcados. A estratégia ilustrada em (c) esteve presente
nos primeiros computadores pessoais, onde a parte do sistema operacional contida
em ROM é denominada BIOS (Basic Input Output System)
 As partições fixas representam a forma mais simples de divisão e
gerência da memória principal. Este é um esquema antigo,
empregado nos primeiros computadores multiprogramados. Nele,
tanto o número de processos como o espaço reservado a cada um
era projetado durante sua construção. Logo, ou o processo cabia
dentro de uma das partições, ou ele não poderia executar no
referido computador.
Se um processo necessita apenas 20
kilobytes, a ele será dada, provavelmente
a partição 2. Ainda assim, sobrarão 30
kbytes. A este desperdício se dá o nome
de fragmentação interna.

Se um processo necessita apenas 160


kilobytes, não caberá neste arranjo de
memória. Há um total de 310 k
(150+50+110) de memória, entretanto
esse potencial está disperso nas 3
partições independentes, definidas no
tempo de fabricação do computador.
Neste caso, o processo fica impedido de
ocupar a memória principal devido ao
que se chama fragmentação externa.
 Fila única para todas as partições: (exemplo IBM OS/360)
◦ (+) simples de implementar
 Filas de entrada separadas:
◦ (-) processos menores não podem ser colocados em partições grandes
disponíveis.
 Escolha da partição com Fila única:
◦ – Seleção “First-Fit”, “Best Fit”, “Worst Fit”
 Neste esquema de organização a quantidade e o tamanho dos
processos na memória podem variar dinamicamente com o passar
do tempo, o tamanho das partições é ajustado dinamicamente às
necessidades exatas dos processos.

Uma das grandes vantagens desta


estratégia é que a flexibilidade obtida
melhora bastante a utilização da
memória, evitando desperdícios de
espaço.

Por outro lado, a gerência dos espaços


vazios é mais complicada, bem como a
alocação e liberação das partições.
 O sistema operacional mantém uma lista de espaços livres na memória física.
Sempre que um novo processo é criado esta lista é percorrida e será usada uma
lacuna maior ou igual ao tamanho do processo em questão. O espaço que
ultrapassar o tamanho do processo pode dar origem a uma nova partição. Existem
algumas formas de percorrer esta lista:

1. first-fit: inicia a procura a partir da primeira página de memória (parte baixa) e


vai varrendo a memória até encontrar a primeira lacuna suficientemente grande
para armazenar o processo.

2. best-fit: varre toda a memória e escolhe a página mais ajustada ao tamanho do


processo.

3. worst-fit: varre toda a memória e escolhe a página menos ajustada ao tamanho do


processo.

4. next-fit: segue a mesma idéia do first-fit, mas somente a primeira busca é


iniciada na parte baixa da memória (primeira página), as outras iniciam onde
terminou a última. Usa-se uma lista circular para permitir que, eventualmente,
toda a memória seja percorrida.
 01. Qual a função da MMU na gerência de memória?

 02. O que é o TLB?

 03. Explique a importância do TLB no desempenho da MMU.

 04. Qual o tipo de fragmentação apresentado pelos métodos de gerência


de memória baseados em partições fixas e por partições variáveis?

 05. Qual a diferença entre endereço físico e virtual?

 06. Considerando partições fixas de memória de 100K, 500K, 200K,


300K e 600K (nessa ordem), como cada um dos algoritmos first-fit,
best-fit e worst-fit colocaria processos de 212K, 417K, 112K e 426K
(nessa ordem)? Calcule a quantidade de espaço desperdiçado em cada
algoritmo.
 Em sistemas com compartilhamento de tempo (timesharing), a
memória principal pode não ser suficiente para todos os processos.

 Criar espaços no disco rígido para estender memória principal


(Criação de mais endereços lógicos do que a memória física poderia
suportar).

 Ideia básica: usar espaço em disco como extensão da memória RAM,


e colocar lá os processos enquanto estão bloqueados, carregando-
os de volta para a memória assim que são desbloqueados

 Duas alternativas:
◦ Copiar a imagem inteira (swapping)
◦ Permitir que processo fique parcialmente em memória, e parcialmente em disco
(paginação)
 Quando um processo é bloqueado (espera por E/S) ele pode ser swapped out, e
depois swapped in para memória principal.

 Permite manter um número maior de processos ativos, aumentando a utilização


da CPU.

Fig.: Sequência de alocação de memória usando swapping para 4 processos.

 Pode acarretar:
◦ Buracos de memória não utilizada de tamanho qualquer (fragmentação de
memória)
◦ Um mesmo processo pode ocupar diferentes partições ao longo de sua
execução
 Principal problema do swapping com partições de tamanho variável:
◦ Manter a informação sobre espaços não utilizados (livres)
◦ Evitar uma fragmentação externa da memória (= muitos espaços
pequenos não utilizados)

Uma das formas de eliminar tais buracos é


mover todos os processos para a parte
mais baixa da memória. Tal técnica é
conhecida como compactação de memória.
No entanto, perde-se muito tempo de
processamento para promover esta
organização (desvantagem), logo não é
adequado realizar esta tarefa
constantemente.

 Compactação de memória é muito cara


◦ – da ordem de segundos para alguns MBs de RAM
Como lidar com processos que crescem (em demanda de memória)?
 Tentar alocar uma partição para o processo que é vizinha de uma partição não
usada (nem sempre é possível)
 Alocar uma partição conjunta para a pilha e o heap, e fazê-los crescer em
sentidos opostos.
 Se processo usa todo espaço de memória disponível, fazer um swap out, e um
swap in em uma partição maior (mas, se disco de swap está cheio, processo
precisa ser terminado)
 Existem dois modos de gerenciar o uso da memória: com mapa
de bits ou com uma lista encadeada indicando os espaços
ocupados e os disponíveis.

 No primeiro modo, a cada unidade de alocação da memória é


atribuído um bit para dizer se a posição está livre ou ocupada.

 Assim, o conjunto de todos os bits é representado em uma


tabela, denominada mapa de bits, que mapeia todas as posições
de memória dizendo o estado de cada uma.

 O tamanho da unidade de alocação é muito importante e quanto


menor as unidades, maior será o mapa de bits. Como o mapa de
bits também é armazenado em memória seu tamanho ocupará
espaço útil e, consequentemente, uma parte da memória será
desperdiçada.
 Bit Map: armazenamento compacto e simples, mas busca por
determinado tamanho de lote livre pode envolver análise de várias
palavras
 Lista ligada: cada nó contém o endereço inicial e o tamanho de uma
partição ocupada ou livre
 Quando o processo é swapped out, a lacuna correspondente precisa
ser combinada com espaços vizinhos livres.
 Quando processo é swapped in, percorre-se a lista buscando um
espaço livre suficientemente grande (lista geralmente ordenada por
endereços de memória)

Fig: Quando X é swapped out: quatro combinações de nós na lista


Possíveis algoritmos de seleção de de espaço livre:

 First Fit – percorre a lista e aloca o primeiro espaço encontrado


 Next Fit – como first Fit, só que a partir da posição na lista onde foi
feita a alocação anterior
 Best Fit – percorre toda a lista e aloca o menor possível espaço pode
deixar fragmentos muito pequenos para alocação para outros
processos
 Worst Fit – percorre toda a lista e aloca o maior possível espaço

Em muitos sistemas, o overhead adicional exigido pelos Best/Worst Fit


não valem a pena para obter uma alocação mais efetiva.
Qualquer um dos algoritmo anteriores é mais eficiente se:
 Houverem 2 listas: lista de partições usadas + lista de espaços livres;
 Listas são mantidas ordenadas por tamanho (nr. de unidades de alocação)
Problema: há uma complexidade extra quando ocorre uma liberação de
memória. Precisa-se verificar se há espaços adjacentes livres e inserir o novo
espaço na posição correta da lista.
Alternativa:
Quick Fit: mantém listas separadas por tamanho do espaço livre (2K, 4K, 8K, etc.)
 Problema: ao liberar memória, o novo espaço criado precisa ser inserido na fila
correspondente (possivelmente, após combinação com áreas vizinhas)
1- Quais são as duas formas de gerenciamento de memória? Descreva-as.

2- Explique o que é a atividade de swapping e diga como ela pode prejudicar o


desempenho do sistema computacional.

3- Quando é mais interessante utilizarmos o algoritmo best-fit? E o worst-fit?

4- Qual é a proposta do algoritmo Quick Fit?

5- Considere um sistema cuja gerência de memória é feita através de partições


variáveis. Inicialmente, existem as seguintes páginas: 10K, 4K, 20K, 18K, 7K, 9K,
12K e 13K, nessa ordem. Desenhe a memória com suas páginas e mostre como as
páginas serão ocupadas pelos processos de tamanho: 5K, 10K, 15K, 8K, 3K, 7K e
6K. Considere essa ordem de solicitação. Simule os seguintes algoritmos:
a. First-fit
b. Best-fit
c. Worst-fit
d. Next-fit