SISTEMAS OPERACIONAIS Gerência de Memória Apostila 7

Propaganda
SISTEMAS
OPERACIONAIS
Gerência de Memória
Apostila 7
UNIBAN
Sistemas Operacionais
1.0
– INTRODUÇÃO
Historicamente, a memória principal sempre foi vista como um
recurso escasso e caro. Uma das maiores preocupações dos
projetistas
foi
desenvolver
ocupassem
muito
espaço
otimizassem a utilização
Sistemas
de
Operacionais
memória
e,
ao
que
mesmo
não
tempo,
dos recursos computacionais. Mesmo
atualmente, com a redução de custo e consequente aumento da
capacidade da memória principal, seu gerenciamento é um dos
fatores mais importantes no projeto de Sistemas Operacionais.
Enquanto nos sistemas monoprogramáveis a gerência da
memória não é muito complexa, nos sistemas multiprogramáveis
essa gerência se torna crítica, devido à necessidade de se maximizar
o número de usuários e aplicações utilizando eficientemente o espaço
da memória principal.
1.1
- Funções Básicas
Em
geral
programas
são
armazenados
em
memórias
secundárias, como discos ou fitas, por ser um meio não-volátil,
abundante e de baixo custo. Como o processador somente executa
instruções localizadas na memória principal, o Sistema Operacional
deve sempre transferir programas da memória secundária para a
memória principal antes deles serem executados. Como o tempo de
acesso à memória secundária é muito superior ao tempo de acesso à
memória principal, o Sistema Operacional deve buscar reduzir o
número de operações de E/S à memória secundária, para evitar
problemas de desempenho do sistema.
A gerência de memória deve tentar manter na memória
principal
o
maior
número
possível
de
processos
residentes,
permitindo maximizar o compartilhamento do processador e demais
recursos computacionais.
sistema
deve
permitir
Mesmo na ausência de espaço livre, o
que
novos
processos
sejam
aceitos
e
executados. Isto é possível através da transferência temporária de
Gerência de Memória
2
UNIBAN
processos
Sistemas Operacionais
residentes
na
memória
principal
para
a
memória
secundária, liberando espaço para novos processos. Este mecanismo
é conhecido como swapping.
Outra preocupação na gerência de memória é permitir a
execução de programas
que sejam maiores que a memória física
disponível, implementando técnicas como overlay e memória virtual.
Em um ambiente de multiprogramação, o sistema operacional
deve proteger as áreas de memória ocupadas por cada processo,
além da área onde reside o próprio sistema. Caso um programa tente
realizar algum acesso indevido à memória, o sistema de alguma
forma deve impedí-lo. Apesar de a gerência de memória garantir a
proteção de áreas da memória, mecanismos de compartilhamento
devem ser oferecidos para que diferentes processos possam trocar
dados de forma protegida.
2.0 - ALOCAÇÃO DE MEMÓRIA
Simples
Contígua
Particionada Estática(Fixa) / Dinâmica
Alocação
Paginação
Não-Contígua
Segmentação
(Memória
Virtual)
Segmentação com Paginação
2.1 - Alocação Contígua Simples
Foi implementada nos primeiros Sistemas Operacionais, porém
ainda está presente em alguns sistemas monoprogramáveis. Nesse
tipo de organização, a memória principal é subdividida em duas
áreas: uma para o sistema operacional e outra para o programa do
usuário.
Dessa forma, o programador deve desenvolver suas
Gerência de Memória
3
UNIBAN
Sistemas Operacionais
aplicações, preocupado, apenas, em não ultrapassar o espaço de
memória disponível, ou seja, a diferença entre o tamanho total da
memória principal e área ocupada pelo Sistema Operacional.
Figura 1 - Alocação Contígua Simples
 Esquema em que o usuário tem controle sobre toda a memória
principal, inclusive a área do Sistema Operacional.
 Implementa controle de proteção do sistema através de
registrador que delimita a área do Sistema Operacional.
 Fácil implementação e código reduzido, porém não utiliza os
recursos computacionais de forma eficiente, pois apenas um
usuário/aplicação pode dispor deste recurso.
2.2 - Técnia de Overlay
Na alocação contígua simples, todos os programas estão
limitados ao tamanho da área de memória principal disponível para o
usuário. Uma solução encontrada para o problema é dividir o
programa em módulos, de forma que seja possível a execução
independente de cada módulo, utilizando uma mesma área de
memória. Essa técnica é chamada de overlay.
Gerência de Memória
4
UNIBAN
Sistemas Operacionais
Figura 2 - Técnia de Overlay
 A técnica de overlay utiliza uma área de memória comum, os
os módulos “não-carregados” poderão compartilhar esta área
de memória (área de overlay).
 Sempre que um módulo “não-carregado” for referenciado pelo
módulo principal, o módulo será carregado da memória
secundária para a área de overlay. No caso de uma referência
a um módulo já carregado, a carga não será realizada.
 A definição das áreas de overlay é função do programador,
através
de
comandos
específicos
das
linguagem
de
programação utilizada.
 O tamanho da área de overlay é estabelecido a partir do
tamanho do maior módulo.
 Esta técnica tem a vantagem de permitir ao programador
expandir os limites da memória principal, porém deve ser
utilizada com cuidado, pois pode trazer sérios problemas de
desempenho, devido a possibilidade de transferência excessiva
dos módulos entre a memória principal e a secundária.
2.3 - Alocação Contígua Particionada
Gerência de Memória
5
UNIBAN
Os
Sistemas Operacionais
Sistemas
Operacionais
evoluiram
no
sentido
de
proporcionar melhor aproveitamento dos recursos disponíveis. Nos
sistemas monoprogramáveis, o processador permance grande parte
do tempo ocioso e a memória principal é subutilizada. Os sistemas
multiprogramáveis
jão
são
muito
mais
eficientes
no
uso
do
processador, necessitando assim, que diversos programas estejam
na memória principal ao mesmo tempo e que novas formas de
gerência da memória sejam implementadas.
2.4 - Alocação Contígua Particionada Fixa (Estática)
Nos primeiros sistemas multiprogramáveis, a memória era
dividida em pedaços de tamanho fixo, chamados partições. O
tamanho das partições, estabelecido na fase de inicialização do
sistema, era definido em função do tamanho dos programas que
executariam no ambiente. Sempre que fossem necessárias alterações
do tamanho de uma partição, o sistema deveria ser reinicializado
com a nova configuração.
Figura 3 - Alocação Contígua Particionada Fixa (Estática) - Absoluta
 Inicialmente, os programas só podiam ser carregados e
executados em apenas uma partição específica, mesmo se
outras estivessem disponíveis.
Gerência de Memória
6
UNIBAN
Sistemas Operacionais
 Esta limitação se devia aos compiladores e montadores, que
geravam apenas código absoluto.
 No exemplo acima, supondo que os programas A e B estivesem
sendo executados, os programas C e E não poderiam ser
processados na terceira partição, mesmo esta estando livre.
 A esse tipo de gerência chamou-se alocação particionada
estática absoluta.
Com a evolução dos compiladores, montadores, ligadores e
carregadores, o código gerado deixou de ser absoluto e passou a
ser relocável. No código relocável, todas as referências a
endereços no programa são relativas ao início do código e não a
endereços físicos de memória. Desta forma, os programas
puderam ser executados a partir de qualquer partição.
Figura 4 - Alocação Contígua Particionada Fixa (Estática) Relocável
 Supondo que na partição 1 esteja o programa C, na partição 2
o programa A e na partição 3 o programa B. Caso os
programas A e B terminassem, o programa E poderia ser
executado tanto na partição 2 quanto na partição 3.
Gerência de Memória
7
UNIBAN
Sistemas Operacionais
 Para manter o controle sobre as partições alocadas, a gerência
de memória mantém uma tabela com o endereço inicial de
cada partição, seu tamanho, e se está em uso ou não.
Figura 5 – Tabela de Alocação de Partições
 A esse tipo de gerência chamou-se alocação particionada
estática relocável.
 Neste esquema de memória, a proteção baseia-se em dois
registradores, que indicam os limites (inferior e superior) da
partição onde o programa está sendo executado.
Figura 6 – Proteção na Alocação Particionada
Tanto nos sitemas de alocação absoluta quanto nos de
alocação relocável, os programas, normalmente, não preenchem
Gerência de Memória
8
UNIBAN
Sistemas Operacionais
totalmente as partições onde são carregados, deixando área de
memória livre. Este problema é conhecido como fragmentação
interna.
Um exemplo de sistema operacional que implementou esse tipo
de gerência de memória é o OS/MFT (Multiprogramming with Fixed
Number of Tasks) da IBM.
2.5 - Alocação Contígua Particionada Dinâmica
Na alocação particionada dinâmica ou variável, foi eliminado o
conceito de partições de tamanho fixo. Nesse esquema, cada
programa utilizaria o espaço necessário, tornando essa área sua
partição. Como cada programa utiliza apenas o espaço que necessita,
o programa de fragmentação interna não ocorre.
Um outro problema começará a ocorrer, conhecido como
fragmentação externa. Ele ocorre quando os programas forem
terminando e deixando espaços cada vez menores na memória, não
permitindo o ingresso de novos programas.
Figura 7 - Alocação Contígua Particionada Dinâmica
Existem duas soluções para este problema. O primeiro método
indica que, conforme os programas terminem, apenas os espaços
livres
adjacentes
sejam
reunidos,
produzindo
áreas
livres
de
tamanho maior.
Gerência de Memória
9
UNIBAN
Sistemas Operacionais
Figura 8 - Primeira Solução para Fragmentação Interna
A segunda solução envolve a relocação de todas as partições
ocupadas, eliminando todos os espaços entre elas e criando uma
única
área
livre
contígua.
Para
que
esta
solução
possa
ser
implementada, é necessário que o sistema tenha a capacidade de
mover os diversos programas na memória principal, ou seja, realizar
a relocação dinâmica.
Figura 9 - Segunda Solução para Fragmentação Interna
 Esta técnica de gerenciamento é conhecida como alocação
particionada dinâmica com relocação.
 Reduz em muito o problema da fragmentação, porém aumenta
a complexidade do algoritmo e o consumo de recursos do
sistema (processador e área de disco).
 Exemplo de implementação: OS/MVT (Multiprogramming with a
Variable Number os Tasks) da IBM.
Gerência de Memória
10
UNIBAN
Sistemas Operacionais
2.6 - Estratégias de Alocação de Partição
O Sistemas Operacionais implementam, basicamente, três
estratégias para determinar em qual área livre um programa será
carregado para execução. A melhor estratégia depende de uma série
de fatores, como o tamanho dos programas a serem processados.
Independente do algoritmo utilizado, o sistema possui uma lista das
áreas livres, com o endereço e o tamanho de cada área.
Figura 10 - Estratégias de Alocação de Partição
Qual partição livre alocar a um processo que pede por um
tamanho X ?
 FIRST-FIT: a primeira partição livre onde caibam X bytes é
escolhida;
o A procura pode começar sempre no início da lista, ou a
partir do último bloco alocado (“next-fit”).
 BEST-FIT: a partição livre de tamanho mais parecido com X
bytes é escolhida (sendo igual ou maior do que X);
o Pode se aproveitar da ordenação da lista de área livres.
o Pode aumentar o problema de fragmentação.
 WORST-FIT: a maior a partição livre é escolhida;
o Diminui o problema de fragmentação, pois deixa espaços
livres maiores.
Gerência de Memória
11
UNIBAN
Sistemas Operacionais
Figura 11 – Exemplo de Uso das Estratégias de Alocação de Partição
Gerência de Memória
12
Download