A memória - mundo maia

advertisement
Gerência de Memória
Prof.: Edwilian Maia
Nome: Paulo Henrique Maia
Mat: 19992021733
A memória

leitura só: ROM , PROM , EPROM , EEPROM

leitura e escrita: RAM, RAM com bateria
O boot
SunOS Release 5.4 Version generic [UNIX(R) System V Release 4.0]
Copyright (c) 1983-1994, Sun Microsystems, Inc.
pac: enabled
cpu0: TI,TMS390S10 (mid 0 impl 0x4 ver 0x1 clock 50 MHz)
mem = 49152K (0x3000000)
avail mem = 42496000
Ethernet address = 0:0:3b:80:38:48
root nexus = SUNW,Axil-220
...
Gerencia de memória

lado sistema: gerenciar toda a memória (central, de massa) para todos os
usuários.

lado usuário: ter a impressão de usar uma memória (virtual)
independente de seu suporte.
os problemas são :
 realizar a correspondência endereço virtual e endereço físico

realizar a gerência de memória física

realizar o compartilhamento das informações entre vários usuários

realizar a proteção mútua das informações
Organização da memória
INCLUDEPICTURE
"http://www.lasid.ufba.br/~jch/sys_operationnel/memoire/image/mem_lin_seg.gif" \*
MERGEFORMATINET
Segmentação hardware ou lógica. partições fixas = muita memória perdida
Como instalar um processo na memória
a tabela da memória: exemplo no sistema operacional tempo real os9:
Super: mdir -e
Addr
Size
Owner
Perm Type
-------- -------- ----------- ---- ---00004000
26570
0.0
0555 Sys
0000a7ca
386
0.0
0555 Sys
0000a94c
146
0.720
0555 Prog
0000a9de
334
0.720
0555 Sys
0000ab2c
308
0.720
0555 Sys
0000ac60
430
0.720
0555 Subr
0000ae0e
1930
0.0
0555 Fman
0000b598
2338
0.720
0555 Driv
0000beba
126
0.0
0555 Desc
0000bf38
124
0.0
0555 Desc
0000bfb4
124
0.0
0555 Desc
0000c030
124
0.0
0555 Desc
0000c0ac
172
0.0
0555 Driv
0000c158
118
0.0
0555 Desc
Revs Ed # Lnk Module name
---- ----- ----- -------------a000
66
2 kernel
8000
20
0 init
8000
1
0 itvme
a000
10
1 syscache
a000
7
1 tk120
8020
1
0 rtclock
a000
29
18 scf
a001
16
18 sc68681_20
8000
4
6 term
8000
4
6 t1
8000
4
4 t2
8000
4
2 t3
a000
1
0 null
8000
2
0 nil
0000c1ce
0000caac
0000cb12
0000e4d2
0000e77c
0000f0b2
000104c0
00010542
000105c4
00010648
000106ca
00076e40
00078260
00082500
00086830
00087510
000ea8c0
000ec060
000ecb60
000edac0
000ee760
000f3af0
000f44d0
000f4e20
000f6f00
Super:
2270
102
6592
682
2358
5134
130
130
132
130
386
5138
6044
8192
3292
3220
5684
2802
3928
3220
20192
2528
2370
3248
18960
0.0
0.0
0.0
0.0
0.720
0.720
0.0
0.0
0.0
0.922
0.0
1.0
0.0
0.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
0555
Fman
Desc
Fman
Driv
Driv
Driv
Desc
Desc
Desc
Desc
Prog
Prog
Prog
Prog
Prog
Prog
Prog
Prog
Prog
Trap
Trap
Prog
Prog
Prog
Prog
a000
8000
a000
a000
8002
8002
8000
8000
8000
8003
0000
c001
c001
c001
c001
c001
c001
c001
c001
c001
c008
c001
c001
c001
c001
32
2
65
12
2
10
5
5
11
5
4
18
22
16
15
13
25
16
21
6
6
14
13
14
48
0
0
4
1
1
3
1
0
1
3
1
1
1
4
0
0
0
0
0
1
6
0
0
0
2
pipeman
pipe
rbf
ram
rb190f
rb190s
d0
s0
dd
h0
sysgo
mdir
login
tsmon
pd
unlink
copy
date
setime
math
cio
makdir
iniz
load
shell
O problema do endereçamento absoluto dentro de programa ou o problema da
relocação
para realizar a relocação durante a carga do programa, o ligador deve incluir no código
binário um conjunto de informações sobre quais palavras são endereços relocáveis e quais
não devem ser relocados (constantes, ...)
O problema da proteção dos dados na memória
solução hardware
registradores especiais: base e limite. quando um processo é escolhido para rodar, o
registrador base é carregado com o endereço que marca o início de sua partição e o
registrador limite é carregado com o tamanho da partição.
Métodos de gerência de memória
 com mapeamento de bits: 1 bit = uma unidade (pequena) de alocação da memória.
Problema: procura excessivamente lenta => método raramente usados
 com listas ligadas
Problema: a reconstrução de buracos
Política de alocação da memória:
 primeira zona livre (first fit) - ter uma lista circular para não ter sempre
a mesma zona escolhida

melhor ajuste (best fit) - problema com a multiplicação de zonas de
pequeno tamanho

maior resíduo, resto (worst fit)

reserva de blocos de tamanhos diferentes (95% em 10 tipos de
tamanhos)
 com o sistema Buddy ou alocação por subdivisão (Knuth 1973, Knowlton
1965):
alocação muito rápido (cálculos binários - dividir por 2), mas não eficiente
para a utilização da memória (instalar 35k dentro um bloco de 64k => 29k
peridos)
binária : Si+1 = 2 Si
fibonacci : Si+1 = Si + Si-1
quando falta bloco de tamanho Si nós subdividimos um bloco de tamanho Si+1
1 - requisição de 70k para um processo P1
2 - requisição de 25k para um processo P2
3 - requisição de 80k para um processo P3
4 - devolução do espaço do processo P1
5 - devolução do espaço do processo P2
 a recuperação de buracos

ter uma lista para os processos e uma lista para os buracos.

compactação de memória (muito tempo => hardware especial 40 M
bytes /segundo)

gerência de buracos com as listas ligadas
O swapping
Nos sistemas compartilhados tem mais usuários que memória suficiente de
forma que os processos excedentes devem ser mantidos em disco.
Se um processo é bloqueado, ele pode ser gravado no disco. Em alguns
sistemas quando o processo é criado, o seu espaço de swap é alocado
automaticamente no disco (alocar um número inteiro de blocos do disco).
A memória virtual
Antes, um programa maior que a quantidade de memória disponível será
dividido em módulos denominados overlays. O everlay 0 deveria começar
rodando.
 a memória virtual (Fortheringham - 1961): o tamanho do código, dos
dados e da pilha poderia exceder o da memória real disponível
A paginação
Quando tem uma instrução do tipo: move.l d0,1000, o endereço 1000 é
chamado endereço virtual e é encaminhado à unidade de gerência de memória
(MMU) que vai mapear os endereços virtuais em endereços reais.
Exemplo: seja um computador que pode gerar endereços virtuais de 16 bits (de 0 até 64K)
com uma memória de 32K.
O espaço de endereçamento virtual é em unidades denominadas páginas, as
unidades correspondentes na memória física são as molduras de página
(page frame).
As páginas e as molduras de página são sempre do mesmo tamanho (4K no
exemplo)
Na execução da instrução move.l d0,1000 o endereço virtual 1000 é enviado a MMU. Esta
conclui que este endereço virtual cai na página 0 que de acordo com seu processo de
mapeamento está na moldura de página 2. Ela então transforma o endereço 1000 em 9192
(8192+1000).
X significa que a página não é mapeada. Se tiver uma instrução do tipo: move.l d0,32780
acontece um trap denominado falta de página que vai pegar a moldura de página menos
usada e a copiar de volta para o disco. Depois ele busca a página referenciada e a copia na
moldura que acabou de ser liberada, e modifica o mapa e reexecuta a instrução causadora
do trap.
 funcionamento na MMU o número da página é usado como índice da
tabela de páginas, levando ao número da moldura de página correspondente a
esta página virtual.
As tabelas de páginas
O mapeamento de endereços virtuais em físicos é feito a partir de um
endereço virtual em 2 partes: o número de página virtual e o do deslocamento.
Cada processo deve ter sua própria tabela de paginas. Quando um processo é
(re)inicializado o sistema operacional carrega os registradores da MMU com a tabela de
páginas do processo (vem de uma copia mantida na memória principal).
Problema: os computadores modernos usam um espaço virtual de 32 bits ou seja 1 milhão
de páginas de 4K. => tabela de 1M de entradas.
 tabelas de página multinível
Para evitar a necessidade de manter tabelas de página na memória durante
todo o tempo.
Entrada típica de uma tabela de páginas

bit de presença/ausência ou bit de residência. 0=> trap.

bit de proteção: 0 leitura/escrita, 1= leitura.

bit de modificação (M): 1=processo escreve na página; 0= caso
contrário, não precisa então ser copiada de volta no disco.

bit de referência (R): igual a 1 toda vez que a página em questão for
referenciada para leitura ou escrita. Esse bit ajuda o SO na escolha da
página que deve sair.

o mode cache pode ser disligado.
A memória associativa
A tabela de páginas é mantida na memória => enorme impacto na
performance.
memória associativa ou ( buffer de tradução dinâmica) para fazer o mapeamento de
endereços virtuais em reais na MMU sem ter que acessar a memória principal... para
acelerar o processo de paginação.
Nesse exemplo, o processo está em um loop que referencia constantemente as páginas 19,
20 e 21. Os dados correspondentes em uso, estão nas páginas 129 e 130. A pilha está nas
páginas 860 e 861.
Quando o endereço virtual é apresentado a MMU o hardware verifica se sua página esta na
memória associativa. Se não está uma nova linha é copiada na memória associativa a partir
da tabela na memória.
A taxa de acerto (hit ratio) = referências à memória que podem ser satisfeitas a partir da
memória associativa.
Exemplo: 100ns para acessar a tabela de páginas e 20 ns para acessar a tabela associativa,
com um taxa de acerto de 90% o tempo médio de acesso é (0,90 x 20) + (0,10 x 100) = 28
ns.
Algoritmos de substituição de páginas
Quando ocorre falta de página, o sistema operacional deve escolher uma
página a ser removida para dar lugar à que deve ser gravada na memória real.
 O algoritmo da página não usada recentemente (NUR): bit R e M
são usados. Periodicamente, o bit R é zerado. NUR remove uma página
que tenha sido modificada e não referenciada entre duas interrupções;es
de tempo (20ms)

O algoritmo FIFO: o problema é que nó não podemos evitar que
páginas muito usadas sejam descartadas.

O algoritmo de segunda chance: é o algoritmo FIFO mas examinando
o bit R da página mais antiga. Se ele for 0, alé de velha, não tem sido
referenciada, de modo que ela deve ser removida imediatamente para
dar lugar à outra. Se R igual a 1, este bit é zerado, a página é colocada
no fim da fila de páginas.

O algoritmo do relógio: idem que FIFO mas implementação diferente.
Se R for 0, ela sai da memória e o ponteiro é atualizado para apontar
para a próxima posição.

O algoritmo da página usada há mais tempo (LRU): páginas que
foram muito usadas pelas últimas instruções executadas continuarão
sendo usadas pelas próximas instruções. = remover a página que foi
usada há mais tempo. Problema: implementação carra (lista de todas as
páginas atualizada a cada referência de memória).
Problemas de implementação da memória virtual
 o backup de instrução (memorisar o PC, botar a instrução na pilha)
 o bloqueio de páginas na memória (de E/S)
 as páginas compartilhadas (dentro os S.O. compartilhados os usuários
rodam mesmos programas)
 a memória secundária: a alocação de espaço em disco é reservada no dico
no swap. Quando um processo for criado, um pedaço da área de swap do
tamanho do processo é reservado para ele. Quando o processo termina, seu
espaço é liberado. Na tabela de processos, é mantido o endereço da área de
swap associado a cada processo.
 paging daemons: roda periodicamente para inspecionar o estado de
ocupação da memória, Se existirem poucas molduras livres esse demão
seleciona algumas páginas para serem removidas, usando para isso o
algoritmo de substituição de páginas.
A segmentação
Equipar a máquina com vários espaços de endereçamento completamente
independentes chamados segmentos. O tamanho de um segmento pode variar
durante a execução (exemplo a pilha). Para especificar um endereço em uma
memória segmentada, o programa precisa gerar um endereço com duas partes,
um número de segmento et um endereço dentro do segmento.
vantagens:

um segmento armazena informações ou objetos de tipo único.

se cada procedimento ocupa um segmento separado (com 0 de endereço
inicial) uma chamada = chamada ao segmento.

se o procedimento no segmento e modificado e recompilado => nenhum
outro procedimento precisa ser modificado => facilita a implantação de
biblioteca compartilhada

segmentos diferentes podem vir ter diferentes tipos de proteção
(segmento de pilha RW mas não X)
Consideração
O programador precisa
estar informado de que
esta técnica vai ser
usada?
Quantos espaços de
endereçamento existem
nesta técnica?
O espaço total de
endereço pode exceder o
tamanho da memória
física?
É possível distinguir
procedimentos de dados e
protegê-los
separadamente?
As tabelas de tamanho
variável podem ser
acomodadas sem
problemas?
O compartilhamento de
procedimentos entre
usuários é facilitado?
Por que esta técnica foi
inventada?
Paginação
Segmentação
Não
Sim
1
Muitos
Sim
Sim
Não
Sim
Não
Sim
Não
Sim
Para obter espaço de
endereçamento linear
maior sem ter que
ampliar a memória
física
Para permitir que programas e dados
possam ser quebrados em espaços de
endereçamento logicamente
independentes e para auxiliar nas
questões envolvendo compartilhamento
e proteção
A implementação da segmentação pura
A implementação da segmentação difere da paginação em um aspecto
essencial: as páginas têm tamanho fixo e os segmentos não.
Cada processo tem uma tabela de segmentos, com um descritor por segmento. Esse
descritor de segmento contém uma indicação para saber se o segmento está ou não na
memória principal, o tamanho do segmento, os bits de proteção.
Quando há uma referência à memória, o seguinte algoritmo é executado (em MULTICS):

O número do segmento é usado para encontrar o descritor de segmento.

É feita uma verificação para ver se a tabela de páginas deste segmento
está na memória, sendo localizada caso esteja. Se não estiver, haverá a
geração de uma falta. Caso haja a tentativa de violação de proteção,
ocorre um trap.

É consultada a entrada da tabela de páginas para a página requerida. Se
tal página não estiver na memória, ocorrerá uma falta. Se estiver, o
endereço do início dela na memória é extraído da entrada da tabela de
páginas.

O valor do deslocamento é somado ao valor da origem da página para
obtenção do endereço real.

A leitura ou a escritura são finalmente executadas.
Download