Sistemas Operacionais Gerência de Memória Gerência de Memória • Idealmente, o que todo programador deseja é dispor de uma memória que seja – grande – rápida – não volátil • Hierarquia de memórias – pequena quantidade de memória rápida, de alto custo cache – quantidade considerável de memória principal de velocidade média, custo médio – gigabytes de armazenamento em disco de velocidade e custo baixos • O gerenciador de memória trata a hierarquia de memórias Gerência de Memória • Principal operação – trazer programas para dentro da memória principal para ser executados pelo processador. • Dividir dinamicamente a parte “User” da memória principal de forma que acomode vários processos. • Alocar a memória de forma eficiente para empacotar tantos processos na memória quanto possível para evitar que o processador fique ocioso. • Deve ser capaz de rodar um programa em que seu tamanho seja maior que o disponível pela memória real. Gerência de Memória Memória Lógica - é aquela que o processo enxerga, o processo é capaz de acessar. Memória Física - é aquela implementada pelos circuitos integrados de memória, pela eletrônica do computador CPU Endereço lógico Gerenciador Endereço de Memória físico Memória Gerenciamento de Memória • Swapping • Alocação contígua • Paginação • Segmentação • Segmentação paginada Swapping • Existem situações onde não é possível manter todos os processos na memória. Ex: – um processo já alocado na memória faz uma chamada de sistema pedindo mais memória e não existe memória livre contígua a área onde o mesmo está alocado – um usuário dispara um programa, não existe memória disponível mas é política dos sistema disparar imediatamente todos os programas solicitados de terminal Swapping • Usando o swapping o sistema escolhe um programa residente que é levado da memória para o disco (swap-out) retornando posteriormente para a memória (swap-in); • Grande custo em termos de tempo de execução; • Mais aceitável para sistemas batch ou sistemas com um pequeno número de usuários; • No momento do swap-in de memória, é necessário corrigir os endereços de memória do processo; Alocação Contígua Simples • A memória principal é dividida em duas partes uma para o sistema operacional e outra para o programa do usuário; • Deve ser desenvolvida alguma forma de alocar a memória livre aos processos que estão esperando; Sistema Operacional Memória Área para o usuário Proteção da Memória CPU Registrador Limite Registrador de Relocação < + Erro de acesso ilegal Memória Alocação Particionada • Partições Fixas - a memória é dividida em tamanhos diferentes porém fixos. – O tamanho da partição era estabelecido na fase de inicialização do sistema; – A parte dos usuários era subdividida em partições fixas; – Quando um programa deve ser carregado é escolhida uma partição livre; – A partição deve ser de tamanho igual ou maior que o programa; • Método não mais utilizado; Memória Particionada Fixa SO 255 Kb SO Partição 1 200 Kb Programa A Partição 2 100 Kb Partição 3 - 50 Kb Programa B Partição 4 – 25 Kb Partição 4 Partição 2 Programa A -150 kb, Programa B 45 kb Partições Fixas - Problemas • Desperdício de memória provocando a fragmentação interna ( quando o espaço da partição é maior do que o necessário para executar o programa, sobra uma área livre de memória que não pode ser reaproveitada por outro processo) • Não é possível o uso de 2 partições para um mesmo processo. Isto gera a fragmentação externa quando temos memória disponível mas não podemos executar o processo pois não temos uma partição grande o suficiente para executar o processo Alocação Particionada Variável • O tamanho da partição é ajustado dinamicamente as necessidades exatas do processo; • Osistema operacional mantém uma lista de lacunas (espaços livres de memória física); • Quando o processo é criado, será usada uma lacuna de tamanho igual ou maior ao tamanho do programa; • O programa recebe o tamanho exato de memória, o que sobrar de memória é transformado em uma nova lacuna; Alocação Particionada Variável • Não ocorre fragmentação interna (o tamanho da memória alocada é igual ao tamanho do programa); • Ocorre fragmentação externa, a medida que áreas de memória são alocadas e liberadas, fragmentos de memória são gerados; • Os fragmentos são pequenos demais para serem reaproveitados; • O estado da memória é armazenado em uma lista; Memória Particionada Variável SO 255 Kb SO Programa B Programa C Área Livre Programa B Área Livre Área Livre Programa A Área Livre SO Programa A -150 kb, Programa B 45 kb, Programa C – 80 Kb, Partição Variável • Para resolver o problema da fragmentação externa podemos: – realocar todas as partições ocupadas eliminando espaços entre elas e criando uma única área livre contígua; A escolha da partição ideal • Três algoritmos podem ser usados: – First-fit : Procura dentro da memória a partir o inicio e escolhe o primeiro bloco que é grande o suficiente para o processo a ser alocado; – Next-fit: Inicia a procura a partir do local onde foi feito a ultima locação e escolhe o bloco que é grande o suficiente para o processo a ser alocado – Best-fit: Escolhe o bloco que mais se aproxima do tamanho requerido; Qual deles é o melhor? • First-fit : – Mais rápido e o melhor – Ele gera no inicio da memória pequenas partições livres que necessitam ser pesquisadas a cada passo subseqüente do first-fit • Next-fit: – Freqüentemente aloca blocos livres no fim da memória – Como resultado, blocos grandes de memória são quebrados rapidamente em blocos menores – Compactação mais freqüente é requerida para obter grandes blocos no fim da memória • Best-fit: – Tem a pior performance – Procura pelo menor bloco que satisfaça o requisito – Como resultado, a memória principal é rapidamente quebrada em blocos muito pequenos que não podem satisfazer um pedido de alocação, exigindo assim uma compactação freqüente Paginação • A paginação permite que o programa possa ser espalhado por áreas não contíguas de memória. • Características: – o espaço de endereçamento lógico de um processo é dividido em páginas lógicas de tamanho fixo (pages); – a memória física é dividida em páginas com tamanho fixo, com tamanho igual ao da página lógica (frames); – o programa é dividido em páginas. Quando carregado cada página lógica ocupa uma página física; – as páginas físicas não são necessariamente contíguas; Paginação Pag. 0 0 1 0 Pag. 1 1 4 1 Pag. 2 2 3 2 Pag. 3 3 7 3 Pag. 2 4 Pag. 1 Memória Lógica Tabela de Página Pag. 0 5 6 7 Pag. 3 Memória Física Paginação • O endereço lógico é inicialmente dividido em duas partes : um número de página lógica e um deslocamento dentro da página; P D • O número da página lógica é usado como índice no acesso a tabela de páginas, de forma a obter o número da página física correspondente; Paginação CPU P D F D Memória Física P F Paginação 0 1 2 3 a b c d 4 5 6 7 0 4 0 5 e f g h 1 3 2 1 8 9 10 11 i j k l 3 4 12 13 14 15 m n o p Queremos acessar o endereço lógico 3. Este endereço está na página 0 com deslocamento 3. Pela tabela, vemos que a página 0 está indexada no quadro 5. Assim temos que acessar a posição: 23 = ((5x4)+3) 8 12 16 20 i j k l e f g h m n o p a b c d Paginação multinível 0 0 1023 10 10 PT1 PT2 12 Desloc. 0 1023 1023 0 1023 Tamanho de Página • O problema de fragmentação também é encontrado na paginação. Mas ocorre apenas na última página usada pelo programa; • Existe fragmentação interna (Ex: um programa que ocupe 201kb, o tamanho de página é de 4 kb, serão alocadas 51 páginas resultando uma fragmentação interna de 3kb); • Não existe fragmentação externa; • A fragmentação é conseqüência do tamanho da página; • Páginas pequenas evitam o problema de fragmentação, aumentam no entanto os acessos a memória secundária; Estrutura da tabela de Páginas Modificada Proteção Número do Quadro Cache Desabilitado Referenciada Presente/Ausente Armazenamento da Tabela de Páginas • Memória; • Registradores: • acesso rápido; • Inconvenitente caso a tabela seja muito grande; • Registrador de base da tabela de páginas: • Fácil para trocar de páginas; • Muitos acessos a memória; • Registradores associativos: • “Cache” da tabela de páginas; • Caso uma tabela não seja encontrada nos registradores, ai sim é feito um acesso a memória; Segmentação • Cada processo é dividido em um número de segmentos de tamanho desigual (limitado pelo tamanho máximo). Um processo é carregado na memória, todos os seus segmentos são carregados dentro de partições dinâmicas que não necessitam ser continuas. Exemplo de Segmentação 140 0 240 0 320 0 4300 470 0 570 0 630 0 670 0 Segmento 0 Sub-rotina Segmento 3 pilha Segmento2 Programa principal Segmento 4 Tabela de símbolos Segmento 1 Variáveis Globais Segmentação • A principal diferença entre a paginação e a segmentação é a alocação da memória de maneira não fixa, a alocação depende da lógica do programa; • O mapeamento é feito através das tabelas de mapeamento de segmentos; • Os endereços são compostos pelo número do segmento e um deslocamento dentro do segmento; • Cada entrada na tabela mantém o endereço físico do segmento, o tamanho do segmento, se ele está ou não na memória e sua proteção; Como o SO controla os segmentos alocados e blocos livres? • O SO mantém: – Conceito de endereço lógico – mantém uma tabela de blocos livres ; – mantém uma tabela de segmentos para cada processo, contendo a endereço inicial na memória principal (base) + o tamanho do segmento (limite). Exemplo de uma Tabela de Segmento 0 1 2 3 4 Base 1400 6300 4300 3200 4700 Limite 1000 400 400 1100 1000 • Tradução do endereço lógico para o endereço físico é feito pelo hardware do processador , da seguinte forma: Segmento Offset 0 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 Endereço lógico Tabela de Segmento 0001011101110 0000010000000000 0010000000100000 1011110011110 Limite Endereço físico + Base 0010001100010000 Segmentação • Somente segmentos referenciados são transferidos para a memória principal; • Grande proteção aos segmentos; • Possibilidade de compartilhamento de código ou dados; • Ocorre fragmentação externa; Segmentação por Paginação • Sistemas que implementam a segmentação com paginação. Cada segmento é dividido fisicamente em páginas. – o endereço é formado pelo número do segmento, número da página dentro desse segmento e o deslocamento dentro dessa página.