Post on 15-Oct-2018
SISTEMAS
OPERACIONAIS
Gerência de Memória
Apostila 7
UNIBAN Sistemas Operacionais
Gerência de Memória 2
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 Sistemas Operacionais que não
ocupassem muito espaço de memória e, ao mesmo tempo,
otimizassem a utilização 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. Mesmo na ausência de espaço livre, o
sistema deve permitir que novos processos sejam aceitos e
executados. Isto é possível através da transferência temporária de
UNIBAN Sistemas Operacionais
Gerência de Memória 3
processos 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
UNIBAN Sistemas Operacionais
Gerência de Memória 4
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.
UNIBAN Sistemas Operacionais
Gerência de Memória 5
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
UNIBAN Sistemas Operacionais
Gerência de Memória 6
Os 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.
UNIBAN Sistemas Operacionais
Gerência de Memória 7
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.
UNIBAN Sistemas Operacionais
Gerência de Memória 8
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
UNIBAN Sistemas Operacionais
Gerência de Memória 9
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.
UNIBAN Sistemas Operacionais
Gerência de Memória 10
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.
UNIBAN Sistemas Operacionais
Gerência de Memória 11
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.
UNIBAN Sistemas Operacionais
Gerência de Memória 12
Figura 11 – Exemplo de Uso das Estratégias de Alocação de Partição