Gerenciamento de Memória
Gerência de memória <ul><li>Introdução </li></ul><ul><ul><li>Multiprogramação implica em manter-se vários processos em mem...
Memória lógica e memória física <ul><li>Memória lógica </li></ul><ul><ul><li>É aquela que o processo “enxerga” </li></ul><...
Unidade de Gerência de Memória <ul><li>Memory Management Unit (MMU) </li></ul><ul><li>Hardware que faz o mapeamento entre ...
Exemplo de MMU CPU < > memória 100 799 sim sim não não registrador de limite inferior registrador de limite superior inter...
Exemplo de MMU CPU > + memória 200 500 sim não 623 registrador de limite registrador de base interrupção (endereço ilegal)...
Execução de programas <ul><li>Um programa deve ser transformado em um processo para ser executado </li></ul><ul><ul><li>Al...
Amarração de endereços <ul><li>Atribuição de endereços (posições de memória) para código e dados pode ser feita em três mo...
Transformação de programa em processos programa compilador objeto ligador executável carregador RAM . . . fase de compilaç...
Carregador absoluto x carregador relocador <ul><li>Programador não tem conhecimento onde o programa será carregado na memó...
Código relocável <ul><li>Carregador relocador </li></ul><ul><ul><li>correção de todas as referências a memória de forma a ...
Código absoluto <ul><li>Carregador absoluto </li></ul><ul><ul><li>Não realiza correção de endereços no momento da carga do...
Mecanismos básicos de gerência de memória <ul><li>Até estudarmos memória virtual, supor que para um programa ser executado...
Partições fixas <ul><li>Forma mais simples de gerência de memória </li></ul><ul><li>Divisão da memória em duas partes </li...
Gerenciamento de partições fixas <ul><li>O S.O. é responsável pelo controle das partições mantendo informações como: </li>...
Gerenciamento de partições fixas <ul><li>Problemas </li></ul><ul><ul><li>O que fazer se a partição já estiver ocupada por ...
Gerenciamento de partições fixas <ul><li>Com código absoluto </li></ul><ul><ul><li>Um processo só pode ser carregado na ár...
Gerenciamento de partições fixas <ul><li>Com código relocável </li></ul><ul><ul><li>Um processo de tamanho menor ou igual ...
Desvantagem de partições fixas <ul><li>Uso ineficiente da memória principal </li></ul><ul><ul><li>Um processo, não importa...
Algoritmos para alocação de partições fixas <ul><li>Se código é absoluto a alocação é determinada na compilação </li></ul>...
Partições variáveis <ul><li>Também denominada de alocação particionada dinâmica </li></ul><ul><li>Processos alocam memória...
Algoritmos para alocação de partições variáveis <ul><li>Determinar em que lacuna (bloco) de memória livre um processo será...
Algoritmos para alocação de partições variáveis Exemplos S.O. C A 20 K 40 K 30 K S.O. C A 20 K 40 K 30 K S.O. C A 20 K 40 ...
Desvantagens de partições variáveis <ul><li>Tende a criar lacunas de memória livres que individualemente podem não ser suf...
Soluções possíveis para fragmentação externa <ul><li>Reunir espaços adjacentes de memória </li></ul><ul><li>Empregar compa...
Sistema Buddy <ul><li>Partições fixas </li></ul><ul><ul><li>Limita o número de processos ativos </li></ul></ul><ul><ul><li...
Sistema Buddy 1024 <ul><li>1 M </li></ul><ul><li>+ 100 K </li></ul><ul><li>+ 240 K </li></ul><ul><li>+ 64 K </li></ul><ul>...
Swapping RAM backing store P1 P2 swap out swap in
Swapping <ul><li>Tempo de swap depende </li></ul><ul><ul><li>tamanho de processo </li></ul></ul><ul><ul><li>política de sw...
Paginação <ul><li>Partição fixa </li></ul><ul><ul><li>gera fragmentação interna </li></ul></ul><ul><li>Partição variável <...
Paginação página 0 1 2 3 frame 0 1 2 3 4 5 6 7 processo RAM
Endereço lógico em paginação <ul><li>Endereço lógico </li></ul><ul><ul><li>número de página </li></ul></ul><ul><ul><li>des...
Tradução endereço lógico em físico <ul><li>Tabela de página </li></ul><ul><ul><li>relaciona página lógica com frame físico...
Exemplo de paginação <ul><li>Características do sistema </li></ul><ul><ul><li>memória física: 64 KBytes (16 bits) </li></u...
Exemplo de paginação p d Endereço lógico Endereço físico f d 15 bits 2 13 16 bits 3 13
Exemplo de paginação CPU 0 C98 endereço lógico 0C98 tabela de páginas endereço físico 8C98 8 8 C98 End 0000 2000 4000 6000...
Tamanho da página <ul><li>Página grande </li></ul><ul><ul><li>tabela de página menor </li></ul></ul><ul><ul><li>processo t...
Proteção de páginas <ul><li>Acesso garantido por definição </li></ul><ul><ul><li>processos acessam somente suas páginas  <...
Compartilhamento de páginas <ul><li>Código compartilhado </li></ul><ul><ul><li>cópia read-only, reentrante compartilhado e...
Proteção e Compartilhamento CPU p d endereço lógico tabela de páginas endereço físico 4 f d End 0000 2000 4000 6000 8000 A...
Implementação da tabela de páginas <ul><li>Quais recursos e estrutura de dados para controlar estes recursos o subsistema ...
Tabela de páginas em memória <ul><li>PTBR  -  Page-table base register </li></ul><ul><ul><li>aponta para a tabela de págin...
Translation look-aside buffers  (TLBs) <ul><li>memória cache especial (memória associativa) </li></ul><ul><ul><ul><li>tama...
Tempo de acesso a memória <ul><li>Depende da taxa de acertos  h  (hit rate) </li></ul><ul><ul><li>miss rate = 1 -  h  </li...
Paginação multinível <ul><li>Motivação </li></ul><ul><ul><li>Tamanho da tabela de página </li></ul></ul><ul><ul><ul><li>pi...
Paginação a dois níveis <ul><li>Intel 80x86 </li></ul><ul><ul><li>Endereços lógicos: 4 GBytes (32 bits) </li></ul></ul><ul...
Paginação a três níveis <ul><li>Típico das arquiteturas de processadores de 64 bits </li></ul>nível 1 nível 2 nível 3 desl...
Tabela de páginas invertida <ul><li>Tabelas de páginas consomem muita memória </li></ul><ul><ul><li>cada processo tem sua ...
Segmentação <ul><li>Esquema de gerenciamento de memória que suporta a visão do usuário </li></ul><ul><li>Usuário não vê a ...
Segmentação pilha main program heap dados sqrt
Segmentação pilha main program heap dados sqrt <segment number, offset> segmento 0 segmento 1 segmento 2 segmento 3 segmen...
Segmentação pilha main program heap dados sqrt segmento 0 segmento 1 segmento 2 segmento 3 segmento 4 seg 0 seg 3 seg 4 se...
Hardware de Segmentação CPU s d s limite  base tabela de segmento < + RAM erro de endereçamento
Segmentação pilha main program heap dados sqrt segmento 0 segmento 1 segmento 2 segmento 3 segmento 4 seg 0 seg 3 seg 4 se...
Proteção e Compartilhamento editor editor dados 1 dados 2 segmento 0 segmento 1 segmento 0 segmento 1 memória lógica proce...
Implementação da tabela de segmentos <ul><li>Análogo a tabela de páginas </li></ul><ul><ul><li>registradores  </li></ul></...
Segmentação - desvantagens <ul><li>fragmentação externa </li></ul><ul><li>mesmo problema de alocação de partições variávei...
Solução para fragmentação externa <ul><li>Segmentação com paginação </li></ul><ul><ul><li>Recuperar as vantagens dos dois ...
Upcoming SlideShare
Loading in...5
×

Gerenciamento de Memoria

64,407

Published on

Gerenciamento de Memoria Sistemas Operacionais

Published in: Technology, Education
6 Comments
36 Likes
Statistics
Notes
No Downloads
Views
Total Views
64,407
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
6
Likes
36
Embeds 0
No embeds

No notes for slide

Gerenciamento de Memoria

  1. 1. Gerenciamento de Memória
  2. 2. Gerência de memória <ul><li>Introdução </li></ul><ul><ul><li>Multiprogramação implica em manter-se vários processos em memória </li></ul></ul><ul><ul><li>Memória necessita ser alocada de forma eficiente para permitir o máximo de processos </li></ul></ul><ul><ul><li>Existem diferentes técnicas para gerência de memória </li></ul></ul><ul><ul><ul><li>dependem do hardware do processador </li></ul></ul></ul>
  3. 3. Memória lógica e memória física <ul><li>Memória lógica </li></ul><ul><ul><li>É aquela que o processo “enxerga” </li></ul></ul><ul><ul><li>Endereços lógicos são aqueles manipulados por um processo </li></ul></ul><ul><li>Memória física </li></ul><ul><ul><li>Implementada pelos circuitos integrados de memória </li></ul></ul><ul><ul><li>Endereços físicos são aqueles que correspondem a uma posição real de memória </li></ul></ul><ul><li>Endereços lógicos são transformados em endereços físicos no momento de execução dos processos </li></ul>
  4. 4. Unidade de Gerência de Memória <ul><li>Memory Management Unit (MMU) </li></ul><ul><li>Hardware que faz o mapeamento entre endereço lógico e endereço físico </li></ul><ul><li>Complexidade variável de acordo com a funcionalidade oferecida </li></ul>CPU MMU endereço lógico endereço físico
  5. 5. Exemplo de MMU CPU < > memória 100 799 sim sim não não registrador de limite inferior registrador de limite superior interrupção (endereço ilegal) interrupção (endereço ilegal) 123 123
  6. 6. Exemplo de MMU CPU > + memória 200 500 sim não 623 registrador de limite registrador de base interrupção (endereço ilegal) 123
  7. 7. Execução de programas <ul><li>Um programa deve ser transformado em um processo para ser executado </li></ul><ul><ul><li>Alocação de um descritor de processos </li></ul></ul><ul><ul><li>Alocação de áreas de memória para código, dados e pilha </li></ul></ul><ul><li>Transformação é feita através de uma série de passos, alguns com a ajuda do próprio programador </li></ul><ul><ul><li>Compilação, diretivas de compilação e /ou montagem, ligação, etc ... </li></ul></ul><ul><li>Amarração de endereços (binding) </li></ul>
  8. 8. Amarração de endereços <ul><li>Atribuição de endereços (posições de memória) para código e dados pode ser feita em três momentos diferentes: </li></ul><ul><ul><li>Em tempo de compilação </li></ul></ul><ul><ul><li>Em tempo de carga </li></ul></ul><ul><ul><li>Em tempo de execução </li></ul></ul><ul><li>Diferenciação entre endereço lógico e endereço físico </li></ul><ul><ul><li>Como traduzir endereço lógico em endereço físico </li></ul></ul><ul><ul><li>Código absoluto e código relocável </li></ul></ul>
  9. 9. Transformação de programa em processos programa compilador objeto ligador executável carregador RAM . . . fase de compilação fase de ligação fase de carga
  10. 10. Carregador absoluto x carregador relocador <ul><li>Programador não tem conhecimento onde o programa será carregado na memória </li></ul><ul><li>Endereço só é conhecido no momento da carga </li></ul><ul><ul><li>durante a execução do programa sua localização física pode ser alterada </li></ul></ul><ul><ul><ul><li>swapping </li></ul></ul></ul><ul><li>Necessidade de traduzir endereços lógicos à endereços físicos </li></ul><ul><li>Relocação é a técnica que realiza essa tradução </li></ul><ul><ul><li>Via software: carregador relocador </li></ul></ul><ul><ul><li>Via hardware: carregador absoluto </li></ul></ul>
  11. 11. Código relocável <ul><li>Carregador relocador </li></ul><ul><ul><li>correção de todas as referências a memória de forma a corresponder ao endereço de carga do programa </li></ul></ul><ul><li>Necessidade de identificar quais endereços devem ser corrigidos </li></ul><ul><ul><li>código relocável </li></ul></ul><ul><ul><li>mapeamento das posições corrigidas é mantida através de tabelas </li></ul></ul><ul><li>Código executável mantém informações de relocação na forma de tabelas </li></ul><ul><ul><li>no momento da carga o programa executável é interpretado e os endereços corrigidos </li></ul></ul>
  12. 12. Código absoluto <ul><li>Carregador absoluto </li></ul><ul><ul><li>Não realiza correção de endereços no momento da carga do programa em memória </li></ul></ul><ul><li>Código executável absoluto não necessita manter tabelas de endereços a serem corrigidos </li></ul><ul><li>Endereço de carga </li></ul><ul><ul><li>fixo pelo programa (programador) </li></ul></ul><ul><ul><li>qualquer </li></ul></ul><ul><ul><ul><li>correção pode ser feita automaticamente, de forma transparente, a partir de registradores de base </li></ul></ul></ul>
  13. 13. Mecanismos básicos de gerência de memória <ul><li>Até estudarmos memória virtual, supor que para um programa ser executado ele necessita estar todo carregado em memória </li></ul><ul><li>Mecanismos básicos </li></ul><ul><ul><li>partições fixas </li></ul></ul><ul><ul><li>partições variáveis </li></ul></ul><ul><ul><li>paginação </li></ul></ul><ul><ul><li>segmentação </li></ul></ul>
  14. 14. Partições fixas <ul><li>Forma mais simples de gerência de memória </li></ul><ul><li>Divisão da memória em duas partes </li></ul><ul><ul><li>uso do S.O. </li></ul></ul><ul><ul><li>uso dos processos de usuários </li></ul></ul><ul><li>Parte dedicada aos processos de usuários é por sua vez subdividida em partições de tamanhos iguais ou diferentes, porém sempre fixos </li></ul><ul><ul><li>implementada tanto através de registradores de limite superior e inferior como base e limite </li></ul></ul><ul><li>Método também conhecido como alocação particionada estática </li></ul>
  15. 15. Gerenciamento de partições fixas <ul><li>O S.O. é responsável pelo controle das partições mantendo informações como: </li></ul><ul><ul><li>partições alocadas </li></ul></ul><ul><ul><li>partições livres </li></ul></ul><ul><ul><li>tamanho da partições </li></ul></ul>S.O. S.O. p5 p8 p2 S.O. p5 p2 S.O. p5 p2 p9
  16. 16. Gerenciamento de partições fixas <ul><li>Problemas </li></ul><ul><ul><li>O que fazer se a partição já estiver ocupada por um processo </li></ul></ul><ul><ul><li>Processos podem ser carregados em qualquer partição </li></ul></ul><ul><ul><ul><li>depende se código é absoluto ou relocável </li></ul></ul></ul><ul><ul><li>Número de processos que podem estar em execução ao mesmo tempo </li></ul></ul><ul><ul><ul><li>sem swapping  igual ao número de partições (máximo) </li></ul></ul></ul><ul><ul><ul><li>com swapping  maior que número de partições </li></ul></ul></ul><ul><ul><li>Programa é maior que o tamanho da partição </li></ul></ul><ul><ul><ul><li>não executa a menos que se empregue um esquema de overlay </li></ul></ul></ul><ul><ul><li>4 combinações </li></ul></ul><ul><ul><ul><li>(tamanho variável ou fixo) x (código absoluto ou relocável) </li></ul></ul></ul>
  17. 17. Gerenciamento de partições fixas <ul><li>Com código absoluto </li></ul><ul><ul><li>Um processo só pode ser carregado na área de memória (partição) para a qual foi compilado </li></ul></ul><ul><ul><li>Pode haver disputa por uma partição mesmo tendo outras livres </li></ul></ul><ul><ul><ul><li>processo é mantido no escalonador de longo prazo </li></ul></ul></ul><ul><ul><ul><li>empregar swapping </li></ul></ul></ul>
  18. 18. Gerenciamento de partições fixas <ul><li>Com código relocável </li></ul><ul><ul><li>Um processo de tamanho menor ou igual ao tamanho da partição pode ser carregado em qualquer partição disponível </li></ul></ul><ul><ul><li>Se todas as partições estão ocupadas, 2 soluções </li></ul></ul><ul><ul><ul><li>processo é mantido no escalonador de longo prazo </li></ul></ul></ul><ul><ul><ul><li>empregar swapping </li></ul></ul></ul>
  19. 19. Desvantagem de partições fixas <ul><li>Uso ineficiente da memória principal </li></ul><ul><ul><li>Um processo, não importando quão pequeno seja, ocupa uma partição inteira </li></ul></ul><ul><ul><li>Fragmentação interna </li></ul></ul>S.O. 8 M 5 M 8 M 8 M 8 M processo fragmentação interna
  20. 20. Algoritmos para alocação de partições fixas <ul><li>Se código é absoluto a alocação é determinada na compilação </li></ul><ul><li>Se código é relocável </li></ul><ul><ul><li>partições de igual tamanho </li></ul></ul><ul><ul><ul><li>não importa qual partição é utilizada </li></ul></ul></ul><ul><ul><li>partições de diferentes tamanhos </li></ul></ul><ul><ul><ul><li>atribui o processo a menor partição livre capaz de armazená-lo </li></ul></ul></ul><ul><ul><ul><li>fila para cada partição </li></ul></ul></ul><ul><ul><ul><li>processos são atribuídos a partições de forma a minimizar o desperdício de memória (fragmentação interna) </li></ul></ul></ul>
  21. 21. Partições variáveis <ul><li>Também denominada de alocação particionada dinâmica </li></ul><ul><li>Processos alocam memória de acordo com suas necessidades </li></ul><ul><ul><li>elimina a fragmentação interna </li></ul></ul><ul><li>Partições são em número e tamanho variáveis </li></ul>S.O. p1 p2 p3 320 K 224 K 288 K 400 K S.O. p1 p3 320 K 224 K 288 K 400 K S.O. p1 p3 320 K 128 K 288 K 400 K p4 96 K
  22. 22. Algoritmos para alocação de partições variáveis <ul><li>Determinar em que lacuna (bloco) de memória livre um processo será alocado </li></ul><ul><li>Políticas </li></ul><ul><ul><li>best fit </li></ul></ul><ul><ul><ul><li>miminizar tam_proc - tam_bloco </li></ul></ul></ul><ul><ul><ul><li>deixar espaços livres menores possíveis </li></ul></ul></ul><ul><ul><li>worst fit </li></ul></ul><ul><ul><ul><li>maximizar tam_proc - tam_bloco </li></ul></ul></ul><ul><ul><ul><li>deixar espaços livres os maiores possíveis </li></ul></ul></ul><ul><ul><li>first fit/next fit </li></ul></ul><ul><ul><ul><li>tam_proc > tam_bloco </li></ul></ul></ul>
  23. 23. Algoritmos para alocação de partições variáveis Exemplos S.O. C A 20 K 40 K 30 K S.O. C A 20 K 40 K 30 K S.O. C A 20 K 40 K 30 K S.O. C A 20 K 40 K 30 K processo (10 K) best fit worst fit first fit
  24. 24. Desvantagens de partições variáveis <ul><li>Tende a criar lacunas de memória livres que individualemente podem não ser suficientes para acomodar um processo </li></ul><ul><ul><li>pode haver memória livre, mas não contígua </li></ul></ul><ul><ul><ul><li>fragmentação externa </li></ul></ul></ul>Exemplo: criação de processo com 120 K S.O. P1 P4 P3 96 K 64 K
  25. 25. Soluções possíveis para fragmentação externa <ul><li>Reunir espaços adjacentes de memória </li></ul><ul><li>Empregar compactação </li></ul><ul><ul><li>Realocar as partições de forma a eliminar os espaços entre elas e criando uma área contígua </li></ul></ul><ul><ul><li>Desvantagem </li></ul></ul><ul><ul><ul><li>consumo do processador </li></ul></ul></ul><ul><ul><ul><li>acesso a disco </li></ul></ul></ul><ul><ul><li>Acionado somente quando ocorre fragmentação </li></ul></ul><ul><ul><li>Necessidade de código relocável </li></ul></ul>
  26. 26. Sistema Buddy <ul><li>Partições fixas </li></ul><ul><ul><li>Limita o número de processos ativos </li></ul></ul><ul><ul><li>O uso da memória pode ser ineficiente </li></ul></ul><ul><li>Partições variáveis </li></ul><ul><ul><li>É mais complexo de manter </li></ul></ul><ul><ul><li>Overhead de compactação </li></ul></ul><ul><li>Sistema Buddy </li></ul><ul><ul><li>Procura unir as vantagens de ambos minimizando as desvantagens </li></ul></ul>
  27. 27. Sistema Buddy 1024 <ul><li>1 M </li></ul><ul><li>+ 100 K </li></ul><ul><li>+ 240 K </li></ul><ul><li>+ 64 K </li></ul><ul><li>+ 256 K </li></ul><ul><li>B </li></ul><ul><li>A </li></ul><ul><li>+ 75 K </li></ul><ul><li>C </li></ul><ul><li>E </li></ul><ul><li>D </li></ul>A=128 128 256 512 A=128 128 B=256 512 A=128 B=256 512 C=64 64 A=128 B=256 C=64 64 D=256 256 A=128 256 C=64 64 D=256 256 128 256 C=64 64 D=256 256 E=128 256 C=64 64 D=256 256 E=128 256 D=256 256 128 512 D=256 256 1024
  28. 28. Swapping RAM backing store P1 P2 swap out swap in
  29. 29. Swapping <ul><li>Tempo de swap depende </li></ul><ul><ul><li>tamanho de processo </li></ul></ul><ul><ul><li>política de swapping </li></ul></ul><ul><ul><li>escalonador de médio prazo </li></ul></ul><ul><li>Atenção!!!!!!!!!!!!!!!!!! </li></ul><ul><ul><li>Não faça swap com processos com I/O pendente </li></ul></ul><ul><ul><ul><li>para evitar a transferência de dados para endereços inválidos de memória </li></ul></ul></ul><ul><ul><li>Solução </li></ul></ul><ul><ul><ul><li>Utilizar buffer de I/O internos ao sistema </li></ul></ul></ul>
  30. 30. Paginação <ul><li>Partição fixa </li></ul><ul><ul><li>gera fragmentação interna </li></ul></ul><ul><li>Partição variável </li></ul><ul><ul><li>gera fragmentação externa </li></ul></ul><ul><li>Solução </li></ul><ul><ul><li>paginação </li></ul></ul><ul><ul><ul><li>elimina fragmentação externa </li></ul></ul></ul><ul><ul><ul><li>limita fragmentação interna </li></ul></ul></ul>
  31. 31. Paginação página 0 1 2 3 frame 0 1 2 3 4 5 6 7 processo RAM
  32. 32. Endereço lógico em paginação <ul><li>Endereço lógico </li></ul><ul><ul><li>número de página </li></ul></ul><ul><ul><li>deslocamento dentro da página (offset) </li></ul></ul>página 0 1 2 3 processo p E p p - número da página d - deslocamento P - tamanho da página (pot 2) d E = p + d b = E div p d = E mod p p d E m bits n m-n
  33. 33. Tradução endereço lógico em físico <ul><li>Tabela de página </li></ul><ul><ul><li>relaciona página lógica com frame físico </li></ul></ul>CPU p d endereço lógico f f d tabela de páginas RAM endereço físico
  34. 34. Exemplo de paginação <ul><li>Características do sistema </li></ul><ul><ul><li>memória física: 64 KBytes (16 bits) </li></ul></ul><ul><ul><li>tamanho processo (máx): 32 KBytes (15 bits) </li></ul></ul><ul><ul><li>páginas: 8 KBytes </li></ul></ul><ul><li>Sistema de páginas </li></ul><ul><ul><li>número de frames: 64/8=8 (0 a 7 )  3 bits </li></ul></ul><ul><ul><li>número de páginas: 32/8= 4 (0 a 3)  2 bits </li></ul></ul><ul><ul><li>deslocamento: 8 Kbytes  13 bits </li></ul></ul>
  35. 35. Exemplo de paginação p d Endereço lógico Endereço físico f d 15 bits 2 13 16 bits 3 13
  36. 36. Exemplo de paginação CPU 0 C98 endereço lógico 0C98 tabela de páginas endereço físico 8C98 8 8 C98 End 0000 2000 4000 6000 8000 A000 C000 E000 Frame 0 1 2 3 4 5 6 7 memória física
  37. 37. Tamanho da página <ul><li>Página grande </li></ul><ul><ul><li>tabela de página menor </li></ul></ul><ul><ul><li>processo tem menos páginas </li></ul></ul><ul><ul><li>aumenta fragmentação interna </li></ul></ul><ul><li>Página pequena </li></ul><ul><ul><li>tabela de página maior </li></ul></ul><ul><ul><li>processo tem mais páginas </li></ul></ul><ul><ul><li>diminui fragmentação interna </li></ul></ul><ul><li>Trade off </li></ul><ul><ul><li>tamanho depende do HW (MMU) </li></ul></ul>
  38. 38. Proteção de páginas <ul><li>Acesso garantido por definição </li></ul><ul><ul><li>processos acessam somente suas páginas </li></ul></ul><ul><ul><ul><li>endereços válidos </li></ul></ul></ul><ul><li>Inclusão de bits de controle na tabela de página (por entrada) </li></ul><ul><ul><li>leitura, escrita ou executável </li></ul></ul><ul><li>Bit de validade </li></ul><ul><ul><li>página pertence ou não ao endereço lógico do processo </li></ul></ul>
  39. 39. Compartilhamento de páginas <ul><li>Código compartilhado </li></ul><ul><ul><li>cópia read-only, reentrante compartilhado entre vários processos </li></ul></ul><ul><ul><ul><li>editor de texto, compiladores, etc... </li></ul></ul></ul><ul><ul><li>O código compartilhado pertence ao espaço lógico de todos os processos </li></ul></ul><ul><li>Dados e códigos próprios </li></ul><ul><ul><li>Cada processo possui sua área de códigos e seus dados </li></ul></ul>
  40. 40. Proteção e Compartilhamento CPU p d endereço lógico tabela de páginas endereço físico 4 f d End 0000 2000 4000 6000 8000 A000 C000 E000 Frame 0 1 2 3 4 5 6 7 memória física x x x A 2 pag. 2 pag. 0 pag. 1
  41. 41. Implementação da tabela de páginas <ul><li>Quais recursos e estrutura de dados para controlar estes recursos o subsistema de gerência de memória deve manter? </li></ul><ul><li>Como implementar a tabela de páginas? </li></ul><ul><ul><li>Registradores </li></ul></ul><ul><ul><ul><li>cada página um registrador </li></ul></ul></ul><ul><ul><ul><li>no descritor de processo são mantidas cópias dos registradores </li></ul></ul></ul><ul><ul><ul><ul><li>troca de contexto: atualização dos registradores </li></ul></ul></ul></ul><ul><ul><ul><li>desvantagem: quantidade de registradores </li></ul></ul></ul><ul><ul><li>Memória </li></ul></ul>
  42. 42. Tabela de páginas em memória <ul><li>PTBR - Page-table base register </li></ul><ul><ul><li>aponta para a tabela de página </li></ul></ul><ul><li>PRLR - Page-table length register </li></ul><ul><ul><li>indica o tamanho da tabela em número de entradas </li></ul></ul>p d f d endereço lógico endereço físico memória PTBR acesso 1 acesso 2 tabela processo
  43. 43. Translation look-aside buffers (TLBs) <ul><li>memória cache especial (memória associativa) </li></ul><ul><ul><ul><li>tamanho limitado (custo) </li></ul></ul></ul><ul><ul><ul><li>10 vezes mais rápido que RAM </li></ul></ul></ul>p d f d endereço lógico endereço físico tabela de páginas CPU TLB hit miss RAM
  44. 44. Tempo de acesso a memória <ul><li>Depende da taxa de acertos h (hit rate) </li></ul><ul><ul><li>miss rate = 1 - h </li></ul></ul>CPU TLB MEM MEM MEM h 1 - h t médio = h . ( t a tlb + t a mem ) + ( 1 - h ) . (t a tlb + t a mem + t a mem )
  45. 45. Paginação multinível <ul><li>Motivação </li></ul><ul><ul><li>Tamanho da tabela de página </li></ul></ul><ul><ul><ul><li>pior caso </li></ul></ul></ul><ul><ul><ul><ul><li>Intel 32 bits </li></ul></ul></ul></ul><ul><ul><ul><ul><li>páginas de 4 KBytes  tabela com 1 Mega entradas </li></ul></ul></ul></ul><ul><ul><li>Como armazenar tabelas de páginas </li></ul></ul><ul><ul><ul><li>contíguo na memória  fragmentação externa </li></ul></ul></ul><ul><ul><ul><li>paginando a própria tabela </li></ul></ul></ul><ul><ul><li>Múltiplos níveis </li></ul></ul><ul><ul><ul><li>Diretório de tabela de páginas (n níveis) </li></ul></ul></ul><ul><ul><ul><li>Tabelas de páginas </li></ul></ul></ul>
  46. 46. Paginação a dois níveis <ul><li>Intel 80x86 </li></ul><ul><ul><li>Endereços lógicos: 4 GBytes (32 bits) </li></ul></ul><ul><ul><li>Páginas: 4 KBytes </li></ul></ul><ul><ul><li>Tamanho da tabela de páginas </li></ul></ul><ul><ul><ul><li>4 GBytes / 4 KBytes = 1.048.576 entradas </li></ul></ul></ul><ul><ul><ul><ul><li>cada entrada 4 bytes = tabela com 4 MBytes </li></ul></ul></ul></ul>p d f d t 32 bits 10 10 12 tabela de páginas diretório de tabela de páginas memória física
  47. 47. Paginação a três níveis <ul><li>Típico das arquiteturas de processadores de 64 bits </li></ul>nível 1 nível 2 nível 3 deslocamento diretório global diretório intermediário tabela de página página
  48. 48. Tabela de páginas invertida <ul><li>Tabelas de páginas consomem muita memória </li></ul><ul><ul><li>cada processo tem sua tabela de páginas </li></ul></ul><ul><li>Ao invés de mapear as páginas aos frames, mapear os frames (limitado ao tamanho da memória física) às páginas </li></ul>CPU p d endereço lógico pid p f d tabela de páginas endereço físico pid f
  49. 49. Segmentação <ul><li>Esquema de gerenciamento de memória que suporta a visão do usuário </li></ul><ul><li>Usuário não vê a memória como um vetor linear, mas como uma coleção de segmentos de tamanho variável </li></ul><ul><ul><li>código </li></ul></ul><ul><ul><li>pilha </li></ul></ul><ul><ul><li>dados alocados estaticamente </li></ul></ul><ul><ul><li>dados alocados dinamicamente </li></ul></ul>
  50. 50. Segmentação pilha main program heap dados sqrt
  51. 51. Segmentação pilha main program heap dados sqrt <segment number, offset> segmento 0 segmento 1 segmento 2 segmento 3 segmento 4
  52. 52. Segmentação pilha main program heap dados sqrt segmento 0 segmento 1 segmento 2 segmento 3 segmento 4 seg 0 seg 3 seg 4 seg 2 seg 1
  53. 53. Hardware de Segmentação CPU s d s limite base tabela de segmento < + RAM erro de endereçamento
  54. 54. Segmentação pilha main program heap dados sqrt segmento 0 segmento 1 segmento 2 segmento 3 segmento 4 seg 0 seg 3 seg 4 seg 2 seg 1 0 1 2 3 4 limite base 100 300 100 400 100 50 1050 900 200 700 tabela de segmentos 50 200 600 700 800 900 1000 1050 1350 150
  55. 55. Proteção e Compartilhamento editor editor dados 1 dados 2 segmento 0 segmento 1 segmento 0 segmento 1 memória lógica processo 1 memória lógica processo 2 0 1 limite base 100 300 50 200 tabela de segmentos processo 1 0 1 limite base 100 500 50 800 tabela de segmentos processo 2 editor 50 150 dados 1 200 500 dados 2 800 1300
  56. 56. Implementação da tabela de segmentos <ul><li>Análogo a tabela de páginas </li></ul><ul><ul><li>registradores </li></ul></ul><ul><ul><ul><li>tamanho limitado </li></ul></ul></ul><ul><ul><li>memória </li></ul></ul><ul><ul><ul><li>STBR - segment table base register </li></ul></ul></ul><ul><ul><ul><li>STLR - segment table length register </li></ul></ul></ul><ul><ul><ul><li>tabela pode ser muito grande </li></ul></ul></ul><ul><ul><ul><li>dois acessos a memória para acessar um dado/instrução </li></ul></ul></ul><ul><ul><ul><li>solução TLB (memória associativa) </li></ul></ul></ul>
  57. 57. Segmentação - desvantagens <ul><li>fragmentação externa </li></ul><ul><li>mesmo problema de alocação de partições variáveis com as mesmas soluções </li></ul><ul><ul><li>concatenação de segmentos adjacentes </li></ul></ul><ul><ul><li>compactação de memória </li></ul></ul>
  58. 58. Solução para fragmentação externa <ul><li>Segmentação com paginação </li></ul><ul><ul><li>Recuperar as vantagens dos dois métodos em relação a fragmentação: </li></ul></ul><ul><ul><ul><li>paginação - fragmentação interna </li></ul></ul></ul><ul><ul><ul><li>segmentação - fragmentação externa </li></ul></ul></ul><ul><ul><li>solução </li></ul></ul><ul><ul><ul><li>paginar segmentos </li></ul></ul></ul>endereço lógico s d s d p

×