Sistemas de Computação
Gerenciamento de memóriaGerenciamento de memória
Sistemas de Computação
Localização de processos
• Um programa fica armazenado em disco como um arquivo executável binário e tem que ser colocado na memória para começar a ser executado
• Os processos podem ser movidos entre a memória e o disco durante sua execução
• Fila de entrada – coleção de processos no disco que estão esperando para serem colocados na memória para poderem ser executados
• Processos podem ser carregados em qualquer endereço da memória
Sistemas de Computação
Mapeamento entre espaços de endereçamento
• Endereços no programa fonte são simbólicos
• Compiladores geram endereços relocáveis para os endereços simbólicos
• O linker ou loader irão transformar este endereços relocáveis em endereços absolutos
Sistemas de Computação
Definição de endereços para instruções e dados
• Tempo de compilação: Ocorre quando o endereço onde o processo irá ser carregado é conhecido. Um código absoluto com os endereços é gerado e caso o endereço mude, o programa tem que ser recompilado
• Tempo de carga: Caso o endereço não seja conhecido, o compilador tem que gerar código relócavel
• Tempo de execução: Caso um processo possa ser movido de um segmento de memória para outro durante a sua execução
Sistemas de Computação
Processamento do programa do usuário
Sistemas de Computação
Espaço lógico versus físico
• O conceito de espaço de endereçamento lógico ligado a um espaço de endereçamento físico é o ponto principal nos mecanismos de gerenciamento de memória
– Endereço lógico– gerado pela CPU: também conhecido como endereço virtual
– Endereço físico – endereço recebido pela memória
• Endereços lógicos (virtuais) diferem dos endereços físicos em tempo de execução
Sistemas de Computação
Unidade de gerenciamento de memória
• Dispositivo de hardware que mapeia endereços virtuais para físicos
• Um valor base armazenado no registrador de relocação é adicionado a cada endereço gerado pelo processo
• O programa do usuário manipula endereços lógicos; nunca vê os endereços reais
• A localização final de uma referência à memóriasó é definida quando a referência é executada.
Sistemas de Computação
Relocação dinâmica utilizando registrador de relocação
Sistemas de Computação
Carregamento dinâmico
• Rotina só é carregada quando ativada
• Melhor utilização do espaço de memória; rotina não utilizada nunca é carregada
• Particularmente útil quando grande quantidade de código é utilizado para casos que ocorrem raramente
• Não precisa de suporte do sistema operacional, mas S.O pode prover rotinas para que o programador possa realizá-lo
Sistemas de Computação
Ligação dinâmica
• A ligação é adiada até o tempo de execução
• Utilizada para otimizar uso de biblioteca de rotinas do sistema
• Pedaço de código denominado stub é utilizado para localizar a rotina necessária residente na memória
• O stub substitui o seu próprio código pelo endereço da rotina e a executa
• O sistema operacional tem que verificar se a rotina já está no espaço de endereçamento de algum processo e se pode ser compartilhada
Sistemas de Computação
Overlays
• Necessário quando o processo é maior que a quantidade de memória que pode ser alocada para ele
• Mantém na memória somente as instruções e dados necessários em um dado momento
• Implementado pelo usuário, não precisa de suporte do sistema operacional
• Usuário programa leitura de arquivos do disco para a memória e força o programa a ir para a posição de memória
• Complexo de utilizar
Sistemas de Computação
Overlays para um montador em doispassos
Sistemas de Computação
Swapping
• Um processo pode ser trocado ( swapped) temporariamente da memória para um outro dispositivo de apoio (disco), e trazido de volta para a memória para continuar a sua execução
• Roll out, roll in – variante do swapping utilizada para algoritmos de escalonamento baseados em prioridade; processo com menos prioridade vai para disco para processo de maior prioridade ser carregado e executado
• Caso a definição dos endereços físicos seja feita em tempo de compilação ou carga, o processo que foi para o disco tem que voltar para o mesmo lugar na memória
Sistemas de Computação
Swapping
• Caso a definição dos endereços físicos seja feita em tempo de execução, o processo que foi para o disco pode voltar para lugar diferente na memória
• O dispositivo de apoio tem que ser um disco rápido com capacidade suficiente para acomodar cópias de todas as imagens de programas de todos usuários e deve prover acesso direto e estas imagens
• Fila de prontos consiste dos processos que estão no dispositivo de apoio e na memória prontos para serem executados
• O dispatcher é acionado e no caso do processo selecionado não estar na memória e não existir espaço livre na memória, um processo é tirado da memória e colocado no disco
Sistemas de Computação
Esquema de swapping
Sistemas de Computação
Swapping
• A troca de contexto em um sistema com swappingé alta
– Ex. 1M bytes devem ser transferidos para um disco que tem taxa de transferência de 5MB/s e tempo de latência médio igual a 8 ms. Tempo total = 208 milisegundos, time slice deve ser substancialmente maior que 416 milisegundos
• A maior parte do tempo é utilizada para realizar a transferência entre a memória e dispositivo de apoio, então deve se fazer a transferência somente das posições de memória que estão sendo realmente utilizadas pelo processo
Sistemas de Computação
Swapping
• Processos que utilizam alocação dinâmica de memória devem informar ao sistema operacional as suas necessidades de memória através de chamadas ao sistema (request memory e release memory)
• Caso um processo vá para o disco e exista uma operação de E/S pendente para ele, podem ocorrer problemas, porque o dispositivo de E/S pode escrever na área de um novo processo que foi colocado no lugar dele
Sistemas de Computação
Swapping
• Soluções: não permitir swapping para processos com E/S pendente ou só permitir acesso pelo dispositivo de E/S a buffer do sistema operacional, que atualiza buffer do processo quando ele estiver na memória
• Mecanismo pouco utilizado e com algumas modificações
• Unix inicia swapping quando sistema muito carregado
– muitos processos no sistema– limite de memória livre é atingido
Sistemas de Computação
Alocação contígua
• Geralmente a memória principal é dividida em duas partições:
– Sistema operacional colocado nos endereços de memória mais baixos (memória baixa) junto com vetor de interrupções
– Processos do usuário ficam na memória mais alta
• Alocação contígua da memória – O sistema operacional tem que ser protegido do acesso dos
processos do usuário, os quais devem ser protegidos de acesso entre eles
– O registrador de relocação contém o valor do menor endereço físico e o registrador de limite contém a faixa de endereçamento lógico - cada endereço lógico tem que ser menor que o registrador limite
Sistemas de Computação
Suporte de hardware para registradoreslimite e de relocação
Sistemas de Computação
Múltiplas partições
• Alocação de múltiplas partições– Hole (buracos)– bloco de memória disponível ; buracos de vários
tamanhos ficam espalhados pela memória– Quando um processo chega no sistema, o sistema procura por um
buraco que tenha uma quantidade de memória livre suficiente para acomodar o processo
– O sistema operacional mantém informações sobre:• partições alocadas • partições livres (buraco)
Sistemas de Computação
Múltiplas partições
OS
process 5
process 8
process 2
OS
process 5
process 2
OS
process 5
process 2
OS
process 5
process 9
process 2
process 9
process 10
Sistemas de Computação
Alocação dinâmica de memória
• Como satisfazer um pedido de tamanho n tendo uma lista de buracos livres ?
– First-fit: Aloca o primeiro buraco da lista que seja grande o suficiente para o processo
– Best-fit: Aloca o menor buraco que seja grande o suficiente para o processo; precisa procurar a lista toda, caso não esteja ordenada. Produz o menor buraco
– Worst-fit: Aloca o maior buraco possível; precisa procurar toda a lista Produz o maior buraco
First-fit e best-fit são melhores que worst-fit em termos de velocidade e utilização de armazenamento
Sistemas de Computação
Fragmentação
• Fragmentação externa – existe a quantidade de memória que o processo precisa, mas não écontígua
• Fragmentação interna – memória alocada é um pouco maior que a requerida pelo processo; esta diferença é memória interna a uma partição de tamanho fixo que não está sendo utilizada
Sistemas de Computação
Fragmentação
• Redução de fragmentação externa por compactação
– Arruma-se o conteúdo da memória de modo a colocar toda a memória livre junta em um único bloco
– Compactação só é possível caso a relocação seja dinâmica e seja realizada em tempo de execução
Sistemas de Computação
Paginação
• Gerenciamento de memória que permite que o espaço de endereçamento físico não precise ser contíguo
• Divide a memória física em blocos de tamanho fixo denominados frames (tamanho é em potência de 2, entre 512 bytes e 8192 bytes).
• Divide memória lógica em blocos de mesmo tamanho denominadas páginas.
• Gerencia os frames livres
Sistemas de Computação
Paginação
• Para executar um programa de tamanho igual a npáginas, precisa-se encontrar n frames livres e carregar o programa nestes frames
• Possui uma tabela de páginas para traduzir o endereço lógico em físico
• Não ocorre fragmentação externa, mas pode ocorrer interna
Sistemas de Computação
Esquema de tradução de endereço
• O endereço gerado pela CPU é dividido em duas partes:
– Número de página (p) – utilizada como um índice para a tabela de páginas que contém o endereço base de cada página na memória física
– Deslocamento de página (d) – combinada com o endereço base da página para definir o endereço da memória física que será enviado para a unidade de memória
Sistemas de Computação
Arquitetura para tradução de endereços
Sistemas de Computação
Exemplo de paginação
Sistemas de Computação
Exemplo de paginação
Sistemas de Computação
Frames livres
Antes da alocação Depois da alocação
Sistemas de Computação
Implementação da tabela de páginas
• Tabela de páginas é mantida na memória
• Registrador base da tabela de páginas (PTBR) aponta para a tabela de páginas
• Registrador de tamanho de tabela de página (PRLR) indica o tamanho da tabela
• Neste esquema, cada acesso à memória para obter dado ou instrução requer dois acessos à memória: um para acessar a tabela de páginas e outro para obter a instrução ou dado
Sistemas de Computação
Implementação da tabela de páginas
• O problema de acessar a memória duas vezes pode ser resolvido utilizando-se uma memória cache denominada translation look-aside buffers (TLBs)
Sistemas de Computação
Hardware de paginação com TLB
Sistemas de Computação
Tempo efetivo de acesso
• Procura na TLB = unidades de tempo
• Assuma que o ciclo de memória é 1 microsegundo
• Taxa de acerto – percentagem de vezes que o número de página é encontrado na TLB (depende do tamanho da TLB)
• Taxa de acerto =
• Tempo efetivo de acesso (EAT)
EAT = (1 + ) + (2 + )(1 – )
= 2 + –
Sistemas de Computação
Proteção de memória
• Proteção de memória é implementada utilizando-se um bit de proteção para cada frame
• Bit válido-inválido é adicionado a cada entrada da tabela de páginas:
– “válido” indica que a página associada pode estar no espaço de endereçamento lógico do processo e portanto é uma página legal
– “inválido” indica que a página não pode estar no espaço de endereçamento lógico do processo
Sistemas de Computação
Bit válido (v) ou inválido (i) na tabela de páginas
Sistemas de Computação
Estruturação da tabela de páginas
• Paginação hierárquica
• Paginação por hash
• Tabela de página invertida
Sistemas de Computação
Tabelas de páginas hierárquicas
• Divide o espaço lógico de endereçamento em múltiplas tabelas de páginas
• Uma opção simples é dividir a tabela de ´páginas em dois níveis
Sistemas de Computação
Exemplo de paginação em dois níveis
• Um endereço lógico (em uma máquina de 32 bits com tamanho de página de 4K) é dividida em: – um número de pagina consistindo de 20 bits– um deslocamento de página consistindo de 12
bits.
• Com o tabela de página é paginada, o número de página é dividido em: – um número de página de 10 bits – um deslocamento de página de 10 bits
Sistemas de Computação
Exemplo de paginação em dois níveis
• Formato do endereço lógico:
onde p1 é um índice para a tabela de página mais externa e p2 é o deslocamento na página da tabela mais externa
número de página deslocamento de página
p1 p2 d
10 10 12
Sistemas de Computação
Esquema de tabela de páginas em dois níveis
Sistemas de Computação
Esquema de tradução de endereços
Sistemas de Computação
Tabelas de páginas com hash
• Comum em espaço de endereçamento > 32 bits.
• O número da página virtual é mapeado por hashing na tabela de páginas.
• A entrada da tabela de páginas pode conter uma cadeia de elementos que estão mapeados na mesma entrada
• ´Procura-se nesta cadeia pelo número da página virtual desejada e caso ela seja encontrada, obtém-se o frame físico correspondente
Sistemas de Computação
Tabela de páginas com hashing
Sistemas de Computação
Tabela de páginas invertida
• Uma entrada para cada página real da memória
• Cada entrada contém, para um determinado endereço real, o endereço virtual da página que está ali armazenada, com informações do processo que a possui
• Diminui a memória necessária para armazenar cada tabela de páginas, mas aumenta o tempo necessário para a procura na tabela quando ocorre uma referência de página
• Utiliza-se tabelas hash para limitar a procura para uma ou poucas entradas na tabela de páginas
Sistemas de Computação
Arquitetura de tabela de páginas invertida
Sistemas de Computação
Páginas compartilhadas
• Código compartilhado– Uma cópia de código somente-leitura (reentrante) é compartilhada
entre processos (editores de texto, compiladores, sistemas de janelas)
– Código compartilhado deve aparecer no mesmo local no espaço de endereçamento lógico de todos os processos
• Códigos e dados privados– Cada processo mantém uma cópia separada do código e dos dados – As páginas para o código e dados privados podem aparecer em
qualquer local do espaço de endereçamento lógico
Sistemas de Computação
Exemplo de páginas compartilhadas
Sistemas de Computação
Segmentação
• Esquema de gerenciamento de memória que suporta uma visão da memória física mais próxima à do usuário
• Um programa é uma coleção de segmentos. Um segmento é uma unidade lógica, tal como um programa principal, procedimento, método, objeto, variáveis locais e globais, blocos comuns, pilha, tabela de símbolos, arrays
Sistemas de Computação
Visão do usuário de um programa
Sistemas de Computação
Visão lógica da segmentação
1
3
2
4
1
4
2
3
espaço do usuário espaço de memória física
Sistemas de Computação
Arquitetura de segmentação
• Um endereço lógico consiste da tupla: <número-segmento, deslocamento>
• Tabela de segmentos – mapeia endereços físicos de duas dimensões
• Cada entrada na tabela possui:– base – contém o endereço físico inicial onde o segmento reside na
memória – limite – especifica o tamanho do segmento
Sistemas de Computação
Arquitetura de segmentação
• Registrador base de segmento de tabela (STBR)aponta para a localização do segmento na memória
• Registrador de tamanho do segmento da tabela (STLR) indica o tamanho do segmento
Sistemas de Computação
Arquitetura de segmentação
• Relocação– dinâmica– realizada por tabela de segmentação
• Compartilhamento– segmentos compartilhados– mesmo número de segmento
• Alocação– first fit/best fit– fragmentação externa
Sistemas de Computação
Arquitetura de segmentação
• Proteção é fornecida com associação a cada entrada da tabela de segmentos das seguintes informações:
– bit de validação = 0 segmento ilegal– privilégios read/write/execute
• Bits de proteção são associadas com segmentos; compartilhamento de código ocorre no nível de segmento
• Como os segmentos variam em tamanho, a alocação de memória é um problema de alocação dinâmica de memória
Sistemas de Computação
Hardware para segmentação
Sistemas de Computação
Exemplo de segmentação
Sistemas de Computação
Compartilhamento de segmentos
Sistemas de Computação
Tradução de endereços no Intel 30386