Sistemas Operacionais
Prof. Leonardo Araújo
Plano de aula
• Gerenciamento de Memória
• Definição
• Recordando sobre Memórias
• Tipos de memórias • Hierarquia de memórias
• Endereços, variáveis e funções • Endereços lógicos e físicos
• Modelo de memória dos processos
• Estratégias de alocação • Fragmentação
Gerência de Memória
• A memória principal é outro recursos muito disputado pelo
sistema;
• Constitui o “espaço de trabalho” do sistema;
• O sistema operacional precisa administrar o uso desse
recurso pelos processos;
Recordando sobre Memórias
Existe muito tipos de memórias, classificadas em algumas categorias. • Quanto à natureza da gravação dos dados
• Memórias ROM – Ready Only Memory • Memórias RAM –Random Access Memory
• Quanto à hierarquia de memórias
• Primárias • Secundárias
Recordando sobre Memórias
• Tipos de memórias ROM:
• ROM – Mask ROM (Memória inalterável adquirida com conteúdo já gravado) • PROM – Programmable ROM (conteúdo pode ser gravado de forma
posterior, porém nunca apagado)
• EPROM –Erase Programmable ROM (conteúdo gravado pode ser apagado mediante raios ultra-violeta)
• EEPROM – Eletricaly EPROM (conteúdo reprogramável por impulsos elétricos especiais)
Recordando sobre Memórias
• Tipos de memórias RAM:
• SRAM – Static RAM (Memória que não necessita de refresh) • DRAM – Dynamic RAM (Memória que necessita de refresh)
• FPM DRAM: Paginação de dados, assíncrono
• EDO DRAM: Memória de saída estendida de dados assíncrono • SDR SDRAM: Sincronia dos dados
• DDR DRAM: Taxa de transferência de dados dupla(variantes: DDR2 e DDR3) • Rambus DRAM: Duas operações por ciclo de clock
Recordando sobre Memórias
• Existem vários tipos de memórias, variando em algumas características, como:
• Capacidade de armazenamento; • Velocidade de leitura/escrita; • Preço;
• Assim, uma forma de organizar essas memórias, quanto as essas principais características, é a hierarquia de memórias.
Recordando sobre Memórias
0 1 2 3
4 5 6 7
8 9 10 11
Onde cada célula (byte) representa
o conjunto de 8 bits (1 byte)
Palavra de 32 bits (4 bytes)
Memória de 96 bits (12 bytes) de tamanho
0 4 8
Endereços das palavras
Endereços, variáveis e funções
• O programa é escrito em linguagem de alto nível;
• Geralmente não há a necessidade de o programador definir ou manipular endereços de memória de forma explícita;
• Porém, o processador, ao executar um programa compilado, precisa acessar os endereços físicos da memória principal;
• Logo, cada componente do programa (variáveis e demais trechos de códigos) deverão ocupar um espaço específico e exclusivo na
Endereços, variáveis e funções
• Logo, endereços de variáveis e trechos de códigos de um programa devem ser definidos em algum momento entre a escrita do código e sua execução pelo processador, que podem ser:
• Durante a edição: o programador é responsável por escolher a posição de endereçamento (em sistemas embarcados e muito simples);
• Durante a compilação: o compilador é responsável por escolher a posição de variáveis na memória;
• Durante a ligação: o compilador gera símbolos que representam as variáveis, mas não define os seus endereços finais; gera arquivos objetos que ao serem ligados às bibliotecas do sistema por um “ligador”, gera o executável com os endereços definidos;
• Durante a carga: o carregador do programa (loader) é responsável por levar o programa à memória e definir os endereços de memória; pode estar no núcleo do S.O. ou fazer parte de alguma biblioteca do executável do programa;
Endereços, variáveis e funções
Fig. 2: Momentos de atribuição de endereços. Fonte: MAZIERO, 2010.
Endereços lógicos e físicos
• Ainda existem dois conceitos quanto aos endereços de memórias:
• Endereços lógicos: endereços de memória gerados pelo processador durante a execução de um programa, seguindo a sequência lógica;
• Endereços físicos: representam os endereços reais dos programas na memória física (principal);
• No caso dos endereços físicos temos um hardware especial chamado MMU (Unidade de Gerenciamento de Memória) responsável pela “conversão” dos endereços lógicos em endereços físicos;
Visão geral de uma MMU
Fig. 3: Funcionamento básico de uma MMU Fonte: Maziero, 2010.
Modelo de memória dos processos
• Cada processo é dividido em algumas partes, que trazem uma visão geral ao Sistema Operacional de o que é aquele processo;
• Essas áreas são as seguintes:
• TEXT: contém o código a ser executado, com tamanho fixo, calculado durante a compilação, acessível como leitura e escrita;
• DATA: contém dados estáticos usados pelo programa, como variáveis globais e locais estáticas, com tamanho fixo, acessível como leitura e escrita;
• HEAP: área usada para armazenar dados através de alocação dinâmica;
• STACK: área usada para manter a pilha de execução do processos (chamadas de função, parâmetros, variáveis locais e valor de retorno de funções;
Modelo de memória dos processos
Fig. 4: Organização de um processo na memória Fonte: Maziero, 2010.
Estratégias de alocação
• O tamanho dos processos variam de acordo com a sua complexidade; • A memória é como um grande vetor “aguardando” apenas que os
processos sejam alocados a ela (memória);
Estratégias de alocação
• Em sistemas mono-processo, a alocação pode ser feita sem problemas;
• Há apenas um processo para usar o espaço disponível aos processos (geralmente logo após a área da memória destinada ao núcleo do sistema);
Estratégias de alocação
• Em sistemas multiprocessos, o negócio é diferente;
• Vários processos poder ser alocados à memória para serem executados de forma simultânea;
• Neste caso, deve ser usada alguma estratégia de alocação de processos à memória, de forma a fazer o uso da memória com maior eficiência e flexibilidade;
Estratégias de alocação
• As principais estratégias de alocação de memória física são:
• Partições fixas • Alocação contígua
• Alocação por segmentos • Alocação paginada
Estratégias de alocação:
Partições fixas
Estratégias de alocação: partições fixas
• Forma mais simples de alocação de memória;
• Divide-se a memória em diversas partições fixas (não varia de tamanho enquanto estiver sendo usada) com tamanhos iguais ou distintos;
• A MMU possui um registrador especial chamado de registrador de relocação, que armazena o endereço base da partição na memória física;
Estratégias de alocação: partições fixas
Fig. 6: Exemplo de alocação em partições fixas Fonte: Maziero, 2010.
Estratégias de alocação: partições fixas
• Apesar da simplicidade, temos várias desvantagens na técnica de alocação por partições fixas:
• Processos podem ter tamanhos diferentes da partição, gerando perda de espaço na partição;
• Número máximo de processos na memória é limitado ao número de partições (ainda que os processos sejam pequenos);
• Processos maiores que a maior partição disponível simplesmente não serão alocados!
Estratégias de alocação:
Alocação contígua
Estratégias de alocação: alocação contígua
• Implementação mais bem elaborada da estratégia de partição fixa; • O tamanho de cada partição pode ser ajustado à demanda do
processo;
• A MMU agora tem dois registradores especiais:
• registrador base: define o endereço inicial da partição ativa; • Registrador limite: define o tamanho em bytes dessa partição;
Estratégias de alocação: alocação contígua
Fig. 6: Exemplo de alocação em partições fixas Fonte: Maziero, 2010.
Estratégias de alocação: alocação contígua
• O endereço lógico é verificado;
• Se for maior ou igual ao valor limite (lógico), A MMU gera uma interrupção;
• Se for menor, o valor do endereço lógico é somado ao valor de endereço base (físico) para ser acessado na memória física;
Estratégias de alocação: alocação contígua
• Vantagens:
• Simplicidade;
• Baixo custo de implementação;
• Desvantagens
• Pouca flexibilidade;
Estratégias de alocação:
Alocação por segmentos
Estratégias de alocação: alocação por segmentos
• Extensão da alocação contígua;
• O espaço de memória do processo é fracionado em áreas (seguimentos);
• Esses segmentos podem ser alocados separadamente na memória física;
• Quebra-se, então, a sequência linear de endereçamento dos processos;
Estratégias de alocação: alocação por segmentos
• Os endereços de processos devem indicar agora as posições de memória e os segmentos onde eles se encontram;
• A composição do endereço lógico será feito por pares:
• Segmento: indica o número do segmento desejado • Offset: indica a posição desejada dentro do segmento
Estratégias de alocação: alocação por segmentos
• O algoritmo na alocação por segmentos é similar à alocação contígua;
• Neste caso, porém, cada segmento tem o seu valor limite-base;
• Será necessária uma tabela de segmentos (no registrador ou na própria RAM);
• Cabe ao compilador colocar os diversos trechos do código-fonte de cada programa em segmentos separados;
Estratégias de alocação: alocação por segmentos
Fig. 8: Tradução de endereços em memória alocada por segmentos Fonte: Maziero, 2010
Estratégias de alocação: alocação por segmentos
• O endereço lógico é passado à MMU;
• O registrador “ST reg” aponta para a tabela de segmentos do processo ativo;
• O segmento do endereço lógico é identificado na tabela de segmentos;
• Caso o valor offset seja maior ou igual ao limite lógico na tabela de segmentos, haverá um erro, gerando interrupção;
• Caso contrário, o valor offset será somado ao valor base físico na tabela de segmentos, onde será gerado o valor de endereço real na memória física;
Estratégias de alocação: alocação por segmentos
• Vantagens:
• Forma mais flexível de alocação de memória física; • Diminui consideravelmente o desperdício de espaço;
• Desvantagens:
• Uso de endereços bidimensionais é pouco intuitivo; • Complexidade na construção de compiladores;
Estratégias de alocação:
Alocação paginada
Estratégias de alocação: alocação paginada
• O espaço de endereçamento lógico volta a ser linear;• O espaço de endereçamento lógico agora é dividido em pequenos blocos de mesmo tamanho, chamados de páginas (pages);
• Atualmente, essas páginas tem tamanho de 4Kbytes;
• O espaço de endereçamento físico também é dividido em blocos do mesmo tamanho das páginas, chamados de quadros (frames);
Estratégias de alocação: alocação paginada
• A alocação dos processos é feita indicando em quais quadros da memória física se encontram as páginas do processo;
• As páginas dos processos podem estar em qualquer lugar da memória física;
• As páginas não usadas pelo processo não precisam estar mapeadas na memória física;
Estratégias de alocação: alocação paginada
Fig. 9: Alocação de memória por páginas Fonte: Maziero, 2010
Estratégias de alocação: alocação paginada
• Nessa estratégia é usada uma tabela de páginas (page tables) para mapear a página ao quadro físico;
• Um registrador especial na MMU, o PTBR (Page Table Base Register) manterá a tabela de páginas do processo ativo;
Estratégias de alocação: alocação paginada
Fig. 10: Tradução de endereços usando paginação Fonte: Maziero, 2010
Estratégias de alocação: alocação paginada
• O endereço lógico é decomposto em número de página e offset;• O número do quadro onde se encontra a página desejada é obtido pela MMU;
• O endereço físico é construído, compondo o número do quadro com o
offset; como páginas e quadros tem o mesmo tamanho, o valor do offset é
preservado na conversão;
• Caso a página solicitada não esteja mapeada em um quadro da memória física, a MMU deve gerar uma interrupção para o processador;
Estratégias de alocação: alocação paginada
• Logo, a alocação paginada• Oferece grande espaço de endereçamento linear; • Elimina a fragmentação externa;
Fragmentação de memória
• Processos tem um ciclo de vida;• Logo, quando o seu tempo de vida termina, ficará uma lacuna na memória;
• Essas lacunas nem sempre podem alocar novos processos, tornando-se inutilizadas;
• Logo, essas lacunas geram um problema chamado fragmentação externa;
• Somente afeta as memórias com as estratégias de alocação contígua e segmentada;
Fragmentação de memória
Fig. 11: Memória com fragmentação externa Fonte: Maziero, 2010
Fragmentação de memória
• Existem duas formas de se resolver o problema da fragmentação externa:
• Minimizando a ocorrência, através de critérios de escolha das áreas a alocar; • Desfragmentando periodicamente a memória do sistema;
Fragmentação de memória
• Para minimizar a ocorrência de fragmentação externa, existem alguns critérios para encontrar a melhor área de alocação do processo:
• Melhor encaixe (best-fit): escolher a menor área possível que possa atender à solicitação de alocação; áreas livre são usadas de forma otimizada, porém resíduos podem se tornar inúteis;
• Pior encaixe (worst-fit): escolher sempre a maior área livre possível; resíduos podem ser usados;
• Primeiro encaixe (first-fit): escolher a primeira área livre que satisfaça o pedido de alocação; rapidez é o diferencial;
• Próximo encaixe (next-fit): variante da fisrt-fit, que consiste em percorrer a lista a partir da última área alocada ou liberada para que o novo processo
Fragmentação de memória
Fig. 12: Estratégias para minimizar a fragmentação externa Fonte: Maziero, 2010
Fragmentação de memória
• A desfragmentação da memória externa consiste em mover os processos alocados, de forma que eles fiquem contíguos;
• Movendo os processo, as áreas livres também ficarão contíguas;
• Além disso, mover os processos, consiste em alterar as devidas tabelas de alocação (segmentos, páginas);
• Deve ser usada com cautela, uma vez que pode gerar problemas graves ao sistema;
Fragmentação de memória
Fig. 13: Possibilidades de desfragmentação Fonte: Maziero, 2010
Fragmentação de memória
• Além da fragmentação externa, também pode ocorrer a fragmentação interna;
• Neste caso, o bloco de memória reservado para um processo pode não ser totalmente utilizado, gerando desperdício de memória física; • A fragmentação interna pode afetar todas as estratégias de alocação
Fragmentação de memória
Fig. 14: Fragmentação interna Fonte: Maziero, 2010
Pesquisa
• Memória virtual
• Algoritmos de substituição de páginas
• Algoritmo FIFO • Algoritmo Ótimo • Algoritmo LRU
• Algoritmo da segunda chance • Algoritmo NRU
• Algoritmo do envelhecimento;
• Individual e será conteúdo para a 2ªVA; • Está na lista de atividades.
Referências
• TANENBAUM, Andrew S. Sistemas Operacionais Modernos. São Paulo: PRENTICE HALL, 2010.
• MAZIERO, Carlos. A. Sistemas Operacionais: Conceitos e Aplicações. Creative Commons 3.0, 2013.
• SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. Sistemas Operacionais com Java. Rio de Janeiro: Elsevier, 2004.
• CARISSIMI, Alexandre. Sistemas Operacionais. Porto Alegre: Bookman.
Sistemas Operacionais
Prof. Leonardo Araújo