Buscar

Aula09_Gerência_de_Memória - parte 1

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 3, do total de 38 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 6, do total de 38 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 9, do total de 38 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

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
Aula 09 
Capítulo 9 – Gerência de Memória 
• 9.1 Conceitos Básicos 
• 9.2 Swapping 
• 9.3 Alocação de memória contígua 
• 9.4 Paginação 
• 9.5 Segmentação 
• 9.6 Segmentação com paginação 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1 Conceitos básicos 
• Memória - fundamental para a operação de um 
Sistema de Computação Moderno. 
• Memória – consiste em um grande vetor de palavras 
ou bytes, cada qual com seu próprio endereço. 
• Na multiprogramação, diversos processos são 
executados simultaneamente, através da divisão do 
tempo do processador. Para que isso possa 
acontecer, os programas precisam estar na memória, 
prontos para executar. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• É função da gerência de memória do sistema prover 
os mecanismos necessários para que diversos 
processos compartilhem a memória e forma segura e 
eficiente. 
• A CPU busca instruções da memória conforme o 
contador de programa(PC). Essas instruções podem 
ocasionar carregamento adicional e o armazenamento 
em endereços de memória específicos. 
9.1 Conceitos básicos 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
• Em geral, um programa reside em disco como um 
arquivo executável binário. 
• O programa deve ser levado à memória e colocado 
em um processo para ser executado. 
• Dependendo do tipo de gerência de memória em uso, 
o processo pode ser movido entre o disco e a 
memória durante a execução. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
• Então é constituída uma fila de entrada que consiste 
em um conjunto de processos no disco que está 
esperando para ser colocado em memória para 
execução. 
• O procedimento normal é selecionar um dos 
processos na fila de entrada e carregá-lo para a 
memória. À medida que o processo é executado, ele 
acessa instruções e dados da memória. Por fim, o 
processo termina e seu espaço é liberado. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
• Na maioria dos casos, um programa de usuário 
passará por várias etapas – algumas podendo ser 
opcionais – antes de ser executado. 
• Os endereços podem ser representados de diferentes 
maneiras durante essas etapas. 
– Programa-fonte – endereço simbólico (contador). 
– Compilação associa endereço simbólico em endereço 
relocáveis (14 bytes a partir do início deste módulo). 
– Carregador ou linkeditor associa os endereços 
relocáveis aos endereços absolutos (74014). 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
• A associação de instruções e dados aos endereços de 
memória pode ser feita em qualquer etapa da vida de 
um programa. 
– Tempo de compilação 
– Tempo de carga 
– Tempo de execução 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
– Tempo de compilação – Se a posição de memória 
onde o processo residirá for conhecida em tempo de 
compilação, então, o código absoluto poderá ser 
gerado. 
 
– Os programas de formato .COM do MS-DOS são 
códigos absoluto associados em tempo de compilação. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
– Tempo de Carga – Se durante a compilação não 
estiver determinado onde o processo residirá na 
memória, o compilador deverá gerar um código 
relocável. 
 
– Nesse caso, a associação final é retardada até o 
instante de carga. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.1 Associação de endereços 
– Tempo de execução – Se o processo puder ser 
movido durante sua execução de um segmento de 
memória para outro, a associação deverá ser retardada 
até o tempo de execução. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.2 Espaço de endereços lógicos e 
físicos 
• Endereço lógico: é o endereço gerado pela CPU. 
• Endereço físico: é o endereço carregado no 
registrador de endereço da memória, ou seja, visto 
pela unidade de memória. 
• Os métodos de associação de endereço em tempo de 
compilação e tempo de carga geram em endereços 
lógicos e físicos idênticos. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.2 Espaço de endereços lógicos e 
físicos 
• Mas o esquema de associação de endereços no 
tempo de execução resulta em diferentes endereços 
lógicos e físicos. 
• Nesse caso normalmente fazemos referência ao 
endereço lógico como endereço virtual. 
• Neste contexto, usaremos endereço lógico e endereço 
virtual indistintamente. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.2 Espaço de endereços lógicos e 
físicos 
• O conjunto de todos os endereços lógicos gerados por 
um programa é um espaço de endereços lógicos. 
• O conjunto de todos os endereços físicos que 
correspondem a esses endereços lógicos é um 
espaço de endereços físicos. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.2 Espaço de endereços lógicos e 
físicos 
• O mapeamento de tempo de execução dos endereços 
virtuais para físicos é feito pela unidade de 
gerenciamento de memória (MMU – Memory-
Management Unit), um dispositivo de hardware. 
• Existem outros métodos diferentes para obter tal 
mapeamento, veremos adiante. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.1.2 Espaço de endereços lógicos e 
físicos 
• Esse método (MMU) requer um suporte de hardware 
ligeiramente diferente da configuração de hardware 
convencional. 
• O registrador de base é agora chamado de 
registrador de relocação. 
• O valor do registrador de relocação é somado a cada 
endereço gerado por um processo do usuário no 
momento em que ele é enviado para a memória. 
Sistemas Operacionais com Java 
Exemplo da Relocação dinâmica usando um 
registrador de relocação 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• Até agora em nossa discussão, o programa inteiro e 
os dados devem estar na memória física para que o 
processo seja executado. 
• O tamanho de um processo é limitado ao tamanho da 
memória física. 
• Para obter melhor utilização do espaço de memória, 
podemos usar a carregamento dinâmico. 
 
9.1.3 Carregamento dinâmico 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• Com a carregamento dinâmico, uma rotina só é 
carregada quando é chamada. 
• Todas as rotinas ficam armazenadas em disco em um 
formato de carga relocável. 
• O programa principal é carregado e as rotinas são 
carregadas conforme houver necessidade. 
9.1.3 Carregamento dinâmico 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• A vantagem do carregamento dinâmico é que uma 
rotina não utilizada nunca é carregada, como rotinas 
de erro. 
• Embora o tamanho total do programa possa ser 
grande, a parte que é usada de fato (e, portanto, 
carregada) pode ser muito menor. 
• O carregamento dinâmico não exige suporte especial 
do SO. 
9.1.3 Carregamento dinâmico 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• O conceito de vínculo dinâmico é semelhante ao do 
carregamento dinâmico. 
• Aqui é o vínculo e não o carregamento que é adiadopara o momento da execução. 
• Esse recurso é usado com bibliotecas do sistema, 
como bibliotecas de sub-rotinas da linguagem de 
programação. 
9.1.4 Bibliotecas de vínculo dinâmico e 
compartilhadas 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• Sem esse recurso, todos os programas em um 
sistema precisam ter uma cópia da biblioteca da 
linguagem (ou pelo menos das rotinas referenciadas 
pelo programa) incluída na imagem executável. 
• Com isso há um desperdício de espaço em disco e 
em memória principal. 
9.1.4 Bibliotecas de vínculo dinâmico e 
compartilhadas 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• Uma biblioteca pode ser substituída por uma nova 
versão e todos os programas que fazem referência à 
biblioteca passarão a usar automaticamente a nova 
versão. 
• Sem o vínculo dinâmico, todos esses programas 
precisariam ser vinculados para obter acesso à nova 
biblioteca. 
9.1.4 Bibliotecas de vínculo dinâmico e 
compartilhadas 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• A idéia do overlay é manter na memória apenas as 
instruções e dados que são necessários em 
determinado instante. 
• Quando outras instruções são necessárias, elas são 
carregadas em posições da memória anteriormente 
ocupadas por instruções que não são mais 
necessárias. 
9.1.5 Overlay 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• Exemplo: 
– Considere um assembler de dois passos. Durante o passo 1, 
ele constrói uma tabela de símbolos; depois, durante o passo 
2, ele gera código em linguagem de máquina. Podemos ser 
capazes de particionar esse assembler em código do passo 
1, código do passo 2, a tabela de símbolos e rotinas comuns 
de suporte, usadas pelos passo 1 e 2. Suponha que os 
tamanhos desses componentes sejam os seguintes: 
• Passo 1 => 70KB 
• Passo 2 => 80KB 
• Tabela de símbolos => 20KB 
• Rotinas comuns => 30KB 
9.1.5 Overlay 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
• Para carregar tudo de uma vez, precisaríamos de 
200KB de memória. Se houver somente 150KB 
disponíveis, não poderemos executar nosso processo. 
• Entretanto, observe que o passo 1 e o passo 2 não 
precisam estar na memória ao mesmo tempo. 
• Assim, definimos dois overlays: o overlay A é a tabela 
de símbolos, rotinas comuns e passo 1; e o overlay B 
é a tabela de símbolos, rotinas comuns e passo 2. 
• Acrescentamos um controlador de overlay (exige 
10KB) e começamos com a sobreposição A na 
memória. 
9.1.5 Overlay 
 
Sistemas Operacionais com Java 
9.1.5 Overlay 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.2 Swapping 
• Um processo precisa estar na memória para ser 
executado. 
• Contudo, um processo pode ter de ser trocado 
temporariamente entre a memória e um 
armazenamento de apoio, para depois ser trazido de 
volta para memória para continuar a execução. 
• Por exemplo, considere um ambiente de 
multiprogramação com um algoritmo de 
escalonamento de CPU Round-Robin (quantum). 
 
Sistemas Operacionais com Java 
9.2 Swapping 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3 Alocação de memória contígua 
• A memória principal precisa acomodar o SO e os 
diversos processos do usuário. 
• Portanto, precisamos alocar as partes da memória 
principal da maneira mais eficiente possível. 
• Nesse item vamos ver um método comum, a 
alocação de memória contígua. 
• A memória é dividida em partições: 
– Uma para o SO residente. 
– Outra para os processos do usuário. 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3.1 Proteção da memória 
• Antes de discutirmos mais sobre a alocação de 
memória, vamos discutir a questão da proteção da 
memória. 
• Proteger o SO contra processos do usuário e proteger 
os próprios processos do usuário uns dos outros. 
• Os registradores de relocação são usados para 
proteger acessos do usuário um do outro, e de 
alterarem o código e dados do SO. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3.1 Proteção da memória 
• O registrador de relocação contém o valor do menor 
endereço físico. 
• O registrador de limite contém o intervalo de 
endereços lógicos – cada endereço lógico precisa ser 
menor do que o registrador limite. 
• A MMU mapeia o endereço lógico dinamicamente, 
somando o valor no registrador de relocação. Esse 
endereço mapeado é enviado à memória. 
• Veja a figura a seguir: 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3.1 Proteção da memória 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3.2 Alocação de memória 
• Um dos métodos mais simples para alocação de 
memória é dividi-la em várias partições de tamanho 
fixo. 
• Cada partição pode conter um processo. Então o grau 
de multiprogramação está limitado pelo número de 
partições. 
• Nesse método de múltiplas partições, quando uma 
partição está livre, um processo é selecionado da fila 
de entrada e é carregado na partição livre. 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3.2 Alocação de memória 
• Nesse esquema de partição fixa, o SO mantém uma 
tabela indicando quais partes da memória está 
disponíveis e quais estão ocupadas. 
• É denominado buraco, o bloco de memória disponível; 
buracos de vários tamanhos estão espalhados pela 
memória. 
• Quando um processo chega, ele recebe memória de 
um buraco grande o suficiente para acomodá-lo. 
Sistemas Operacionais com Java 
9.3.2 Alocação de memória 
• O SO mantém informações sobre: 
– Partições alocadas 
– Partições livres (buracos) 
 
Silberschatz, Galvin e Gagne (c) 2003 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.3.2 Alocação de memória 
• Problema de alocação de armazenamento dinâmico 
– Como satisfazer uma requisição de tamanho n a partir de 
uma lista de buracos livres? 
• First-fit: aloca o primeiro buraco com tamanho suficiente. 
• Best-fit: aloca o menor buraco com tamanho suficiente. 
Deve pesquisar a lista inteira, a menos que esteja 
ordenada por tamanho. Produz pequenos buracos não 
contíguo. 
• Worst-fit: aloca o maior buraco com tamanho suficiente. 
Também deve pesquisar a lista inteira, a menos que 
esteja ordenada por tamanho. Produz grandes buracos, 
que podem ser mais úteis do que os pequenos buracos. 
 
Sistemas Operacionais com Java 
Silberschatz, Galvin e Gagne (c) 2003 
9.4 Paginação 
• Próxima aula... 
 
Sistemas Operacionais com Java 
Referências 
• Capítulo 9 da referência abaixo: 
– SILBERSCHATZ, ABRAHAM; GAGNE, GREG; 
GALVIN, PETER BAES. Sistemas operacionais: 
com java. . Rio de Janeiro: Elsevier, 2004. 
 
Silberschatz, Galvin e Gagne (c) 2003

Outros materiais