Introdução à gestão de memória

Propaganda
Programação de Sistemas
Introdução à gestão de memória
Programação de Sistemas
Gestão de memória : 1/16
Introdução (1)
•
A memória central de um computador é escassa.
– [1981] IBM PC lançado com 64KB na “motherboard”, podendo
ser expandida com 3 cartas de memória 64KB cada – ao todo
256KB de memória central!!!
– [2007] PCs possuem, tipicamente, 2GB de memória central!
•
A memória é hierarquizada a 4 níveis:
A. Memória virtual, residente em disco
B. Memória central RAM, actualmente formada por módulos
montados em circuitos com sockets de 30,72 e 168 pinos.
C. Cache, colocada entre CPU e a memória central (parte reside no
chip do CPU, parte na “motherboard”).
D. Registos do CPU
Aumento de custo,
Diminuição no tempo acesso e de capacidade
Programação de Sistemas
Gestão de memória : 2/16
Introdução (2)
CPU
registos
•
Tipo
Registo
Cache
RAM
Disco
Espaço
<1KB
1 MB
2 GB
300 GB
Tacesso
3 ns
6 ns
60 ns
8 ms
Largura banda
100GB/s
10GB/s
2GB/s
50MB/s
Gerido por
Compilador
CPU
SO
SO
Ao longo dos anos a memória RAM aumentou, mas o
espaço do SO e número/espaço de programas também!
Programação de Sistemas
Gestão de memória : 3/16
Introdução (3)
Programação de Sistemas
Gestão de memória : 4/16
Divisão de memória central (1)
A. Para um sistema operativo monoprocesso, a memória
central é dividida apenas entre o SO e o processo.
Arquitecturas possíveis de divisão de memória central:
Figura 4-1, Modern Operating Systems
Programação de Sistemas
Gestão de memória : 5/16
Divisão de memória central (2)
B. Nos SO multiprocesso iniciais, na memória central eram
criadas partições fixas à partida (não necessariamente
todas de tamanho igual).
Partições:
• pequenas-1 e 4,
• média-2
• grande-3
Figura 4-2, Modern Operating Systems
Programação de Sistemas
Gestão de memória : 6/16
Divisão de memória central (3)
Estratégias de distribuição de partições pelos processos:
a) O processo lançado colocado na fila de espera da partição
que tenha espaço suficiente para as necessidades.
– Inconveniência: um processo que gasta pouco espaço pode ficar à
espera numa partição ocupada, enquanto outras partições maiores
se encontram livres.
b) Em alternativa, a fila de espera é única com 2 estratégias
de alocação
– Atribuída partição ao processo à frente na lista (pode resultar em
desperdício).
– Logo que uma partição fique livre, ela é atribuída ao maior
processo que nela caiba (os processos de reduzida dimensão
ficam prejudicados).
Programação de Sistemas
Gestão de memória : 7/16
Divisão de memória central (4)
C. Nos actuais sistemas operativos multiprocessamento, a
memória central é dividida por
– Sistema operativo
– Vários processos (total ou parcialmente residentes na memória
central)
•
Frequentemente, a dimensão do processo (programa e
dados) é maior que a fatia de RAM disponível. Para que
o processo possa ser executado são usadas 2 técnicas:
– Paginação ou segmentação: o programa/dados são dividos por
várias páginas, ou por segmentos.
– Permutação (“swapping”), que troca páginas entre disco e RAM.
Programação de Sistemas
Gestão de memória : 8/16
Divisão de memória central (5)
• A alocação de memória atribuída a um processo pode ser
alterada pelo SO, quando for necessário arranjar espaço
para outro processo acabado de ser lançado.
Exemplo: localização do processo A deslocada
Figura 4-5, Modern Operating Systems
Programação de Sistemas
Gestão de memória : 9/16
Problemas no acesso em multiprocessamento
1. Relocação
– Um programa não sabe a zona de memória onde efectivamente
reside (essa é tarefa reservada ao SO). O CPU deve garantir que:
1. Os endereços de saltos e rotinas são relativos.
Nota: no Intel Pentium, os saltos condicionais são relativos a 8
bits (±127 B de endereço) e os dados /saltos incondicionais/
rotinas são endereçados a 32 bits.
2. Os endereços de código e dados são virtuais. O endereço efectivo
de memória é calculado pelo CPU, somando ao endereço virtual
um valor base (este pode ser alterado pelo SO durante a vida do
processo).
2. Protecção
– Um processo não pode aceder ao espaço de outro processo.
O CPU deve garantir a observação de limites nos acessos.
Programação de Sistemas
Gestão de memória : 10/16
Objectivos do gestor de memória
• O sistema de gestão de memória deve:
– assegurar que cada processo dispõe da memória que precisa.
– garantir que cada processo só acede à memória a que tem direito
(protecção).
– optimizar (i.e. minimizar) as transferências de informação em
memórias organizadas hierarquicamente.
– tornar o mais rapido possível o acesso aos dados em memória
central.
Como os processos vêm o PS e o MM:
• O PS (escalonamento de processos) decide quando o
processo corre.
• O MM (gestor de memória) determina onde o processo é
armazenado.
Programação de Sistemas
Gestão de memória : 11/16
Gestão de memória central (1)
•
A gestão de memória central adopta 3 modelos, por
ordem crescente de sofisticação
A. Sobreposição (“overlay”): as zonas de memória,
definidas estaticamente, são ocupadas sucessivamente
por partes de programas.
Os dados intermédios são guardados em disco.
Programa
principal
(residente)
Nota: a sobreposição, usada nos SO antigos quando
a memória central era escassa, caiu em desuso.
Overlay 1
Overlay 2
Memória principal
Programação de Sistemas
Overlay 3
Gestão de memória : 12/16
Gestão de memória central (2)
B. Partições dinâmicas : o sistema operativo determina
que bloco de memória é atribuído ao processo.
As partições dinâmicas podem ser implementadas em 2
formas, de acordo com a estrutura de dados usada para
representar os blocos disponíveis.
i. Lista: em que o SO executa um algoritmo de procura linear de
um bloco que permita encaixar o pedido.
Vários algoritmos “fit” foram identificados.
ii. Baseadas em árvore: em que os blocos são divididos e
recombinados numa estrutura baseada em árvore.
Programação de Sistemas
Gestão de memória : 13/16
Gestão de memória central (3)
C. Memória virtual (VM-”virtual memory”) : o programa
referencia sempre endereços virtuais (lógicos) e o gestor
de memória mapeia esses endereços para o endereço real
(físico).
A memória virtual pode ser implementada em 2 formas:
i. Paginação: em que o programa é dividido em páginas e num
dado instante apenas algumas estão em memória.
O SO encarrega-se do carregamento e da permuta (“swap”) de
páginas, bem como a transcrição do endereço virtual para o
endereço real.
Nota: paginação foi implementada pela primeira vez em 1962 no
computador Atlas, da Universidade Manchester/UK.
Programação de Sistemas
Gestão de memória : 14/16
Gestão de memória central (4)
–
A gestão de memória por paginação baseia-se em dois factos:
•
•
–
A dimensão dos programas é frequentemente maior que a área de
memória central disponibilizada ao processo.
Durante a maior parte da vida de um processo, ele passa o tempo a
aceder apenas uma pequena fracção de todo o espaço do programa
(ex: código-execução de um ciclo, dados-acesso a elementos de
uma tabela).
A página só é trazida para memória central quando for
referenciada (“page-demand”).
A página de memória central é enviada para disco apenas se tiver
sido modificada.
•
•
Menor gasto de RAM.
Menos I/O.
Programação de Sistemas
Gestão de memória : 15/16
Gestão de memória central (5)
–
–
A técnica de paginação é extensivamente usada nos SO
modernos (excepto em sistemas limitados, como sistemas
embebidos).
Este capítulo foca maioritariamente as técnicas de paginação.
ii. Segmentação: as secções de um programa (código, dados, pilha)
são armazenadas em áreas possivelmente distintas.
•
•
A segmentação, usada pela primeira vez no Multics, da Honeywell
635, foi adoptada no Intel x86 por forma os 16 bits poderem
endereçar 1MB.
Nos µP actuais da Intel, a segmentação pura é mantida apenas em
modo de endereçamento real.
Em geral, o Pentium e Core usam a combinação de segmentação e
paginação no modo de endereçamento protegido.
Programação de Sistemas
Gestão de memória : 16/16
Download