Buscar

Gerência de Memória em Sistemas Operacionais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 6 páginas

Prévia do material em texto

1
Sistemas Operacionais
Gerência de Memória
- Conceitos básicos -
Sumário
� Introdução
� Ciclo de Execução de Instrução
� Conceitos Básicos
A. Mapeamento de Endereços
B. Espaço de Endereçamento Lógico x Físico
C. Carga Dinâmica
D. Ligação Dinâmica e Bibliotecas 
Compartilhadas
E. Overlays
Introdução
�Gerência de Memória
� Memória = vetor de palavras ou bytes com 
seus endereços
� A CPU busca instruções da memória, de 
acordo com o valor do Contador de 
Programa (podem ser de busca ou 
armazenamento em endereços de memória 
específicos)
Introdução
� Gerência de Memória
� Todo endereço de memória gerado pela CPU 
deve ser verificado em termos de legalidade e 
possivelmente ser mapeado em um endereço 
físico.
� A verificação não pode ser implementada de 
forma eficiente no software � limitada pelo 
hardware
Ciclo de Execução de Instrução
Memória
1º) Busca de Instrução
2º) Decodifica
3º) Busca Operandos
5º) Resultado
4º) Execução
� A Unidade de Memória vê apenas um fluxo de endereços de memória 
(não sabe como são gerados ou para que servem)
� Observar: seqüência de endereços de memória gerados pelo programa 
em execução
Conceitos Básicos
A. Mapeamento de Endereços
B. Espaço de Endereçamento Lógico x Físico
C. Carga Dinâmica
D. Ligação Dinâmica e Bibliotecas 
Compartilhadas
E. Overlays
2
Mapeamento de Endereços
� Fila de Entrada = coleção de processos 
no disco esperando para serem 
carregados na memória
� Procedimento normal
� Selecionar um dos processos na Fila de 
Entrada e carregá-lo na memória. A medida 
que é executado, acessa instruções e dados 
da memória. Ao terminar, seu espaço de 
memória é disponibilizado.
Mapeamento de Endereços (2)
� O espaço de endereços no computador começa 
em 00000, mas o primeiro endereço de um 
processo de usuário não precisa ser 00000
� Afeta os endereços que o programa do usuário 
vai usar
� Um programa de usuário passa por várias 
etapas antes de ser executado:
Mapeamento de Endereços (3)
Programa
Fonte
Compilador
ou
Montador
Programa
Executável
Linkeditor
Módulo de 
Carga
Carregador
Imagem 
Binária na 
Memória
Tempo de 
Compilação
Tempo de 
Carga
Tempo de 
Execução
Biblioteca
do
Sistema
Biblioteca do
Sistema
Carregada
Dinamicamente
Mapeamento de Endereços (4)
� Os endereços podem ser representados 
de diferentes formas durante essas 
etapas e mapeados também em 
momentos diferentes.
� Cada associação é um mapeamento de 
um espaço de endereço para outro e 
pode ser feita em etapas diferentes
Mapeamento de Endereços (5)
1. Em tempo de compilação
� Se sabe-se antecipadamente que um processo de 
usuário reside na posição X da memória, o código 
compilado iniciará nessa posição e se estende a 
partir daí.
� Se a posição de início mudar, é necessário 
recompilar o código.
� Isso se chama Código Absoluto
Mapeamento de Endereços (6)
2. Em tempo de carga
� O compilador deve gerar um código relocável
(se não há código absoluto). A associação 
final dos endereços é retardada até o 
instante de carga.
� Se o endereço de início mudar, recarrega-se
o código de usuário para incorporar o valor 
alterado.
3
Mapeamento de Endereços (7)
3. Em tempo de execução
� Se o processo durante sua execução pode 
ser movido de um segmento de memória 
para outro, a associação dos endereços é
feita em tempo de execução.
� A maioria dos Sistemas Operacionais de 
uso geral usa esse método. É necessário 
um hardware de uso geral para que isso 
funcione.
� Esse hardware faz o mapeamento de endereços 
lógicos para endereços físicos
(Definições)
� Montadores (assemblers)
� Traduzem programas em linguagem de montagem para 
linguagem de máquina
� Ligadores (linkers)
� Fazem a ligação dos módulos de um programa após 
estes terem sido montados
� Carregadores (loaders)
� Carregam o programa para a memória principal, 
preparando-o para execução
� Comportamento intimamente relacionado à gerência de 
memória do SO
Espaço de Endereçamento
Lógico x Físico
� Endereço Lógico = é o gerado pela CPU
� Espaço de Endereçamento Lógico (ou Virtual)
� Endereço Físico = é o visto pela memória 
(carregado no registrador de endereço de 
memória)
� Espaço de Endereçamento Físico
� Os métodos 1 e 2 resultam em endereçamentos 
lógicos e físicos iguais. O método 3 não.
Espaço de Endereçamento
Lógico x Físico (2)
� O Mapeamento de tempo de execução dos 
endereços virtuais para físicos é feito pela 
Unidade de Gerência de Memória (MMU –
Memory Management Unit)
� MMU é um dispositivo de hardware
� Há vários métodos de Mapeamento
� Alocação Contígua de Memória
� Paginação
� Segmentação
� Segmentação com Paginação
Espaço de Endereçamento Lógico x 
Físico (3)
� Uma generalização do Mapeamento:
CPU
Registrador de
Alocação
Memória
End. Lógico
End. Físico
346
14.346
14.000
+
MMU
Qual será o 
endereço físico 
para o endereço 
lógico 290?
Espaço de Endereçamento
Lógico x Físico (4)
� O Programa do Usuário manipula os 
endereços lógicos
� Endereços Lógicos
� [0, MAX]
� Endereços Físicos
� [R+0, R+MAX], onde R é o valor do 
registrador base (no exemplo, 14.000)
4
Carga Dinâmica
� Até o momento, considerou-se que um programa 
ao ser executado, deve estar inteiro na memória.
� Uma rotina somente é carregada na memória 
quando é chamada (e não o programa inteiro).
� Todas as rotinas são mantidas em disco em 
formato de carga relocável.
Carga Dinâmica (2)
� A rotina principal do programa é carregada. 
Quando outro rotina se faz necessária, 
primeiro, verifica-se esta já foi carregada. Se 
não foi, o carregador relocável é chamado 
(atualiza os endereços do programa).
� Vantagem: rotina não utilizada nunca será
carregada.
� Não requer suporte especial do sistema 
operacional.
Ligação Dinâmica e Bibliotecas 
Compartilhadas
� O conceito de ligação dinâmica é semelhante ao 
de carga dinâmica. A ligação é adiada até o 
tempo de execução.
� Bibliotecas de Ligação Dinâmica (DLL – Dynamic Linking
Libraries)
� Geralmente são utilizadas com as bibliotecas do 
sistema (bibliotecas de sub-rotinas de 
linguagem).
� Sem esse recurso, todos os programas 
precisariam ter uma cópia da biblioteca de 
linguagem incluída na imagem executável 
(desperdício de disco e memória principal).
Ligação Dinâmica e Bibliotecas 
Compartilhadas (2)
� Com Ligação Dinâmica um stub é incluído na 
implementação para cada referência a 
biblioteca
� Stub
� Trecho de código que localiza a biblioteca na memória 
e se não estiver presente, indica como carregar a 
biblioteca
� Quando o stub é executado, ele verifica se a 
rotina já está na memória; se não estiver, 
carrega.
Ligação Dinâmica e Bibliotecas 
Compartilhadas (3)
� Após carregar, o stub substitui a si mesmo pela 
rotina. Assim, não gera custo para ligação 
dinâmica na próxima execução.
� Uma biblioteca é compartilhada pois todos 
processos que a utilizam executam apenas uma 
cópia do código
� Requer implementação do SO
Overlays
� Usados para que um processo possa ser maior do 
que a quantidade de memória alocada a ele.
� Idéia: manter na memória apenas as instruções e 
dados necessários em determinado momento.
� Exemplo: Montador com 2 passos
5
Overlays (2)
1. Passo 1 70 K Constrói tabela de Símbolos
2. Passo 2 80 K Gera Código em Linguagem 
de Máquina
3. Tabela Simbólica 20 K Rotinas de suporte comuns
4. Rotinas Comuns 30 K aos dois passos
� Total 200 K; E se houvesse somente 150 K?
� 2 overlays A (1,3,4) e B (2,3,4) - pois não precisam estar na memória ao 
mesmo tempo;
� Após o overlay A, lê o overlay B (sobrescreve o A)
� mais 10 K para o driver de overlay
� Carregará mais rápido (hámenos dados); executará mais lento (mais 
I/O).
� Os códigos de overlay A e B são mantidos no disco como informações de 
memória absoluta e lidos pelo driver de overlay conforme necessário
Overlays (3)
� Overlays não necessitam suporte especial do SO. 
Podem ser completamente implementados pelo 
usuário.
� Seu uso é limitado a sistemas com memória física 
limitada.
� Técnicas automáticas para execução de 
programas grandes em quantidade limitada de 
memória física são preferíveis.
Swapping
� Troca = Swapping
� Um processo pode ser removido da memória 
temporariamente para um armazenamento 
auxiliar e retomado à memória para continuar a 
execução
� Libera memória
� Exemplos
� Escalonamento Round-Robin
� Escalonamento por Prioridade
Swapping (2)
SO
Espaço do
Usuário
P1
P2
Memória Principal Armazenamento Auxiliar
Swapping (3)
� Geralmente, um processo que é descarregado será
carregado no mesmo espaço de memória que 
ocupava anteriormente
� Isso é determinado pelo método de resolução de 
endereço
� Se for na carga ou montagem
� processo não pode ser movido para posições diferentes
� Se for em tempo de execução
� é possível passar para posições diferentes porque endereços 
físicos são calculados em tempo de execução
Swapping (4)
� Troca requer armazenamento auxiliar
� disco rápido e grande o suficiente para 
acomodar cópias de todas as imagens de 
memória para os usuários e fornecer acesso 
direto a essas imagens na memória
� O Sistema Operacional mantém Fila de 
Processos Prontos
� processos cujas imagens de memória estão no 
dispositivo de armazenamento auxiliar ou na 
memória principal prontos para executar
6
Swapping (5)
� Sempre que o escalonador de CPU buscar um processo, 
chama o dispatcher para fazer a troca de contexto:
� Verifica se o próximo processo na fila está na memória
� Se não houver região de memória livre, descarrega um 
processo de memória (swap out)
� Carrega o processo desejado em seu lugar (swap in)
� Em seguida, recarrega os registradores e transfere o 
controle para o processo selecionado.
Swapping (6)
� O tempo da troca de contexto com swapping é
relativamente alto (transferência do processo:
memória � disco � memória)
� Processo de usuário = 1 MB
� Taxa de Transferência do disco rígido = 5 MB / s
� Para 1 MB � 200 ms + latência (8 ms) = 208 ms
� Carga e descarga = 208 * 2 = 416 ms
Swapping (7)
� O tempo de execução deve ser longo em relação 
ao tempo de troca
� No RR, quantum > 0,416 segundos para esse caso
� A parte principal do tempo de troca é o tempo de 
transferência (que é proporcional a quantidade de 
memória trocada)
� É útil saber quanto de memória cada processo 
está usando
Swapping (8)
� Para descarregar um processo é necessário ter 
certeza que está completamente inativo
� Os sistemas operacionais geralmente possuem 
um espaço em disco para swap, separado do 
espaço para os arquivos.

Outros materiais