Gerenciamento de Memória - LAC

Propaganda
Gerenciamento de Memória
- Capítulo 7 Sistemas Operacionais
Prof. Dr. José Carlos Becceneri
Luciana Sêda Cardoso
Sumário
Definição
Requisitos
Técnicas de Gerenciamento de Memória
Gerenciamento de Memória
Principal operação – trazer programas para dentro da
memória principal para ser executados pelo
processador.
Dividir dinamicamente a parte “User” da memória
principal de forma que acomode vários processos.
Alocar a memória de forma eficiente para empacotar
tantos processos na memória quanto possível para
evitar que o processador fique ocioso.
Deve ser capaz de rodar um programa em que seu
tamanho seja maior que o disponível pela memória
real.
Requisitos
Relocação
Proteção
Compartilhamento
Organização lógica
Organização física
Requisito - Relocação
Capacidade de mover um programa de uma
região da memória principal para uma outra
sem invalidar as referencias de memória
dentro do programa;
O programador não sabe onde o programa é
colocado na memória quando ele é executado
O hardware do processador e o SO devem ser
capazes de traduzir os endereços de
referencia de memória no código do
programa para o endereço físico da memória.
Técnica de Endereçamento -> Imagem do Processo
Requisito - Proteção
Cada processo deve ser protegido contra
interferências não desejáveis de outros
processos de forma acidental ou intencional
Processos não devem ser capazes de referenciar
localizações de memória de outro processo sem
permissão;
O hardware é responsável por fazer a verificação,
caso a violação ocorra, o mesmo deve abortar
tais instruções no ponto da execução;
O SO não pode prever todas as referencias de
memória que o programa fará (custo muito alto).
Requisito - Compartilhamento
Permitir que vários processos acessem a
mesma área de memória principal
É vantajoso, que :


processos que são executados em um mesmo
programa acessem a mesma cópia do programa e
Processos que estão cooperando em uma mesma
tarefa compartilhem acesso a uma mesma
estrutura de dados
Deve permitir o compartilhamento sem
comprometer o requisito de proteção
Requisitos - Organização Lógica
Capacidade de manipular com programas e dados do
usuário organizado em módulos
 Memória -> seqüências de Bytes e palavras
 Programas -> módulos
Vantagens:



Módulo podem ser escritos e compilados
independentemente, as referencias de um módulo
para o outro são resolvidas em tempo de
execução;
Com um overhead adicional, diferentes graus de
proteção (read only, execute only) podem ser
dados para diferentes módulos
É possível introduzir mecanismo de
compartilhamento entre módulos
Requisito – Organização Física
Organização da memória do computador:

Dois níveis:
 Memória principal -> mais rápida, volátil e custo alto
 Memória secundária -> lenta, armazenamento
permanente e barata
Capacidade de mover informações entre os 2
níveis de memória
Técnicas de Gerenciamento de Memória
Partição de memória



Partição fixa
Partição dinâmica
Sistema Buddy
Paginação simples
Segmentação simples
Paginação de Memória Virtual
Segmentação de Memória Virtual
Partição Fixa
Memória principal é dividida dentro de um no.
de partições estáticas (tamanho igual ou
diferente). O processo é carregado dentro de
uma partição de tamanho = ou >.
Ponto forte: Simples de implementar, pouco
overhead no sistema
Ponto fraco: Fragmentação interna -> Uso
ineficiente da memória principal. Qualquer
programa, não importando o quanto pequeno
é, ocupa uma partição na memória.
Algoritmo de Locação
Partição de tamanho igual: todas as
partições com o mesmo tamanho, não
importa qual partição é usada;
Partição de tamanho diferente:

Dois caminhos:
 Uma fila para cada partição -> Processos são
atribuídos de forma a minimizar o desperdício de
memória na partição
 Uma única fila para todas as partições ->Os
processos são atribuídos a partição de menor tamanho
disponível no momento.
Partição Fixa
(cont.)
Desvantagens:


No. de partições especificadas no tempo de
geração do sistema -> limita o no. de processos
ativos dentro do sistema
Tamanho das partições são setadas no tempo de
geração do sistema -> jobs pequenos utilizam os
espaços das partições de forma ineficiente
Usada com sucesso: Mainframe da IBM e
Os/MFT(Multiporgramação com no. fixo de
tarefa)
Partição Dinâmica
Partições são criadas dinamicamente, de
forma que cada processo é alocado dentro da
partição do mesmo tamanho do processo
Ponto forte: Não tem fragmentação interna
e usa de forma mais eficiente a memória
Ponto fraco: Uso ineficiente do processador
por necessitar de compactação para
solucionar a fragmentação externa
(memória vai ficando cheia de vários buracos)

Usada com sucesso: Mainframe da IBM e
Os/MFT(Multiporgramação com no. variável de
tarefa)
Algoritmo de Locação
O SO deve decidir qual bloco livre a ser alocado ao
processo de forma eficiente.
Três algoritmos podem ser usados:



First-fit : Procura dentro da memória a partir o inicio e
escolhe o primeiro bloco que é grande o suficiente para o
processo a ser alocado;
Next-fit: Inicia a procura a partir do local onde foi feito a
ultima locação e escolhe o bloco que é grande o suficiente
para o processo a ser alocado
Best-fit: Escolhe o bloco que mais se aproxima do tamanho
requerido;
Qual deles é o melhor?
First-fit :


Mais rápido e o melhor
Ele gera no inicio da memória pequenas partições livres
que necessitam ser pesquisadas a cada passo subseqüente
do first-fit
Next-fit:



Freqüentemente aloca blocos livres no fim da memória
Como resultado, blocos grandes de memória são quebrados
rapidamente em blocos menores
Compactação mais freqüente é requerida para obter grandes
blocos no fim da memória
Best-fit:



Tem a pior performance
Procura pelo menor bloco que satisfaça o requisito
Como resultado, a memória principal é rapidamente
quebrada em blocos muito pequenos que não podem
satisfazer um pedido de alocação, exigindo assim uma
compactação freqüente
Sistema Buddy
O espaço disponível total da memória é tratado como um
único bloco de 2U (bloco de maior tamanho que pode ser
alocado)
Se um pedido de tamanho s é tal que
2U-1 < s ≤ 2U,


Então: o bloco completo 2U é alocado
Senão: O bloco é divido em 2 “buddies” iguais. A divisão continua
até que o bloco encontrado seja > ou = ao s requerido.
Uma forma modificada deste sistema é usada para
alocação de memória no kernel do UNIX. Também tem sido
usado em aplicações de sistemas paralelos (alocação e
liberação de programas paralelos).
Paginação Simples
A memória é divida em pequenos pedaços de tamanho igual
chamados frames. Cada processo é dividido em pequenos
pedaços de tamanho igual ao do frame chamado pages.
Quando um processo é carregado na memória, todas as suas
páginas são carregadas dentro dos frames disponíveis, e uma
tabela de página é setada. Os frames usados não precisam estar
em seqüência.
Ponto forte: Não tem fragmentação externa
Ponto fraco: tem uma pequena quantidade de fragmentação
interna.
Como o SO controla as páginas
alocadas e os frames livres?
O SO usa:
 Conceito de endereço lógico;
 Mantém ma tabela de frames livres ;
 Mantém uma tabela de pagina para cada processo, contendo
a localização do frame para cada pagina do processo.
Dentro do programa, cada endereço
lógico consiste: um número de pagina
+ um offset da pagina
Exemplo:
Endereço lógico= Page 1 e offset 478
0 0 0 0 0 1 0 1 1 1 0 1 1 1 1 0
Tradução do endereço lógico para o
endereço físico é feito pelo hardware do
processador , da seguinte forma:
0 0 0 0 0 1 0 1 1 1 0 1 1 1 1 0
Endereço lógico
Tabela de Página
0 0 0 0 1 0 1
10 0 0 1 1 0
20 1 1 0 0 1
Endereço físico
0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0
Segmentação Simples
Cada processo é dividido em um número de
segmentos de tamanho desigual (limitado
pelo tamanho máximo). Um processo é
carregado na memória, todos os seus
segmentos são carregados dentro de
partições dinâmicas que não necessitam ser
continuas.
Ponto forte: Não tem fragmentação interna
Ponto fraco: Tem uma pequena quantidade
de fragmentação externa
Exemplo de
Segmentação
1400
2400
3200
4300
4700
Segmento 0
Sub-rotina
Segmento 3
pilha
Segmento2
Programa principal
Segmento 4
Tabela de símbolos
Segmento 1
Variáveis Globais
5700
6300
6700
Como o SO controla os segmentos
alocados e blocos livres?
O SO mantém:



Conceito de endereço lógico
mantém uma tabela de blocos livres ;
mantém uma tabela de segmentos para cada processo,
contendo a endereço inicial na memória principal (base) +
o tamanho do segmento (limite).
Exemplo de uma
Tabela de Segmento
0
1
2
3
4
Base
1400
6300
4300
3200
4700
Limite
1000
400
400
1100
1000
Tradução do endereço lógico para o
endereço físico é feito pelo hardware do
processador , da seguinte forma:
Segmento
Offset
0 0 0 1 0 0 10 1 1 1 1 0 0 0 0
Endereço lógico
Tabela de Segmento
0 001011101110
1 011110011110
Limite
Endereço físico
0000010000000000
0010000000100000
Base
+
0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0
Memória Virtual - Paginação
É igual a paginação simples, exceto que não necessita ser
carregada todas as páginas do processo. Paginas não residentes
que são necessárias, são trazidas mais tarde automaticamente.
Ponto forte: Não tem fragmentação externa; Alto grau de
multiprogramação; Espaço para grandes processos virtuais.
Ponto fraco: Overhead no gerenciamento complexo de
memória.
Memória Virtual Segmentação
É igual a segmentação simples, exceto que não necessita ser
carregada todas os segmentos do processo. Segmentos não
residentes que são necessárias, são trazidas mais tarde
automaticamente.
Ponto forte: Não tem fragmentação interna; Alto grau de
multiprogramação; Espaço para grandes processos virtuais;
Suporte de proteção e compartilhamento.
Ponto fraco: Overhead no gerenciamento complexo de
memória.
Download