48
Sistemas Operacionais I Gerência de Memória: Memória Principal Prof. Alexandre Duarte : http://alexandrend.com Centro de Informática | Universidade Federal da Paraíba Estes slides são baseados no material que acompanha o livro Operating Systems Concepts de Silberschatz, Galvin and Gagne

Gerência de Memória: Memória Principal

Embed Size (px)

DESCRIPTION

Fornecer uma descrição detalhada sobre várias formas de organizar o hardware de memória Discutir técnicas de gerência de memória, incluindo paginação e segmentação

Citation preview

Page 1: Gerência de Memória: Memória Principal

Sistemas Operacionais I

Gerência de Memória: Memória Principal

Prof. Alexandre Duarte : http://alexandrend.comCentro de Informática | Universidade Federal da Paraíba

Estes slides são baseados no material que acompanha o livro Operating Systems Concepts de Silberschatz, Galvin and Gagne

Page 2: Gerência de Memória: Memória Principal

Objetivos

Fornecer uma descrição detalhada sobre várias formas de organizar o hardware de memória

Discutir técnicas de gerência de memória, incluindo paginação e segmentação

Page 3: Gerência de Memória: Memória Principal

Antecedentes

Os programas precisam ser trazidos para a memória principal para poderem ser executados (criação de um processo)

Memória principal e registrados são as únicas unidades de armazenamento acessadas diretamente pela CPU

O acesso a um registrador é feito em um (ou menos) ciclos de CPU

Acessos à memória principal podem levar mais ciclos

A memória cache se situa entre a memória principal e os registradores

Mecanismos de proteção de memória são necessários para garantir a operação correta

Page 4: Gerência de Memória: Memória Principal

Registradores de base e limite

Um par de registradores (base e limite) definem um espaço de endereçamento lógico

Page 5: Gerência de Memória: Memória Principal

Vinculando instruções e dados à memória

Tempo de compilação: Se a localização de memória for conhecida a priori, o compilador pode gerar código absoluto; requer recompilação caso a localização mude

Tempo de carga: Requer a geração de código relocável se a localização de memória não for conhecida em tempo de compilação

Tempo de execução: A vinculação é adiada até o momento da execução caso o processo possa ser movido de um segmento de memória para outro durante a execução. Requer suporte de hardware para mapas de endereçamento

Page 6: Gerência de Memória: Memória Principal

Etapas do processamento de um programa do usuário

Page 7: Gerência de Memória: Memória Principal

Endereçamento Lógico x Físico

O conceito de espaço de endereçamento lógico, que é vinculado a um espaço de endereçamento físico separado é crucial para a gerência de memória Endereço lógico: gerado pela CPU, também conhecido

como endereço virtual Endereço físico: endereço visto pela unidade de memória

Endereços lógicos e físicos são os mesmos em esquemas de vinculação de endereços em tempo de compilação ou tempo de carga e são diferentes em esquemas de vinculação de endereços em tempo de execução

Page 8: Gerência de Memória: Memória Principal

Unidade de Gerência de Memória (MMU)

Dispositivo de hardware que mapeia um endereço virtual em um endereço físico

Na MMU, o valor de um registrador de relocação é somado a todo endereço gerado por um processo do usuário no momento em que ele é enviado a memória

O programa lida apenas com endereços lógicos; ele nunca vê os endereços físicos reais

Page 9: Gerência de Memória: Memória Principal

Uso do registrador de relocação

Page 10: Gerência de Memória: Memória Principal

Carregamento dinâmico

Uma rotina não é carregada até ser invocada Melhor utilização do espaço de memória;

rotinas não utilizadas nunca são carregadas Útil quando grandes quantidade de código são

necessárias para lidar com casos infrequentes Não requer nenhum suporte especial do

sistema operacional

Page 11: Gerência de Memória: Memória Principal

Ligação dinâmica

A ligação é adiada até o momento da execução Um pequeno pedaço de código (stub) é utilizado

para localizar a rotina apropriada em uma biblioteca residente na memória

O stub substitui a si próprio com o endereço da rotina e a executa

O sistema operacional é necessário para verificar se a rotina está no espaço de endereçamento do processo

Ligação dinâmica é particularmente útil para bibliotecas compartilhadas

Page 12: Gerência de Memória: Memória Principal

Swapping

Um processo pode ser removido temporariamente da memória para um armazenamento secundário e depois trazido de volta para continuar sua execução

Armazenamento secundário – disco rápido, grande o suficiente para armazenar copias dos programas em memória de todos os usuários; precisa fornecer acesso direto a essas cópias de memória

Roll out, roll in – variante de swapping, utilizada em algoritmos de escalonamento com prioridade; processos de baixa prioridade são removidos para que processos de mais alta prioridade possam ser carregados e executados

A maior parte do tempo de swap é gasto transferindo dados

Versões modificadas de um esquema de swapping são encontradas em praticamente todos os sistemas operacionais

Page 13: Gerência de Memória: Memória Principal

Visão esquemática de swapping

Page 14: Gerência de Memória: Memória Principal

Alocação contínua

A memória principal é geralmente dividida em duas partições: Sistema operacional residente, geralmente na memória baixa,

junto com o vetor de interrupções Processos do usuário na parte alta da memória

Registradores de relocação são utilizados para proteger os processos dos usuários uns dos outros e também para evitar alterações em dados e códigos do sistema operacional O registrador base contem o menor endereço de memória

permitido O registrado de limite define o tamanho do espaço de

endereçamento – cada endereço lógico deve ser menor que o registrador de limite

A MMU mapeia os endereços lógicos dinamicamente

Page 15: Gerência de Memória: Memória Principal

Suporte de hardware para relocação e limite

Page 16: Gerência de Memória: Memória Principal

Alocação contínua

Alocação com múltiplas partições Buraco – bloco de memória disponível; buracos de vários

tamanhos são espalhados na memória Quando um processo é criado ele é alocado em um buraco

grande o suficiente para suas necessidades de memória O sistema operacional mantem informações sobre:

a) partições alocadas b) partições livres (buracos)

SO

processo 5

processo 8

processo 2

SO

processo 5

processo 2

SO

processo 5

processo 2

SO

processo 5

processo 9

processo 2

processo 9

processo 10

Page 17: Gerência de Memória: Memória Principal

O problema da alocação dinâmica de espaço First-fit: Aloca o primeiro buraco que for

grande o suficiente Best-fit: Alocar o menor buraco que for

grande o suficiente; precisa pesquisar a lista inteira a menos que esteja ordenada por tamanho Produz o menor buraco remanescente

Worst-fit: Aloca o maior buraco; também precisa percorrer toda a slista Produz o maior buraco remanescente

First-fit e best-fit são melhores que o worst-fit em termos de velocidade e utilização do espaço!

Page 18: Gerência de Memória: Memória Principal

Fragmentação

Fragmentação externa – exige memória suficiente para atender uma requisição mas ela não é contigua

Fragmentação interna – a memória alocada pode ser levemente maior que a memória requisitada; esta diferença de memória faz parte da partição mas não é utilizada

Reduzir fragmentação utilizando compactação Ordena o conteúdo da memória em uma localidade para

juntar todo o espaço livre em um grande bloco Compactação só é possível com relocação dinâmica

Page 19: Gerência de Memória: Memória Principal

Paginação

O espaço de endereçamento lógico de um processo pode ser não-contínuo; o processo recebe memória física na medida em que ela se torna disponível

A memória física é dividida em blocos de tamanho fixo chamados quadros (o tamanho é uma potência 2, entre 512 bytes e 8,192 bytes)

A memória lógica é dividida também em blocos do mesmo tamanho chamados páginas

Para executar um programa de n páginas é preciso encontrar n quadros para carregar o programa

Uma tabela de paginação é utilizada para traduzir endereços lógicos em endereços físicos

Page 20: Gerência de Memória: Memória Principal

Esquema de tradução de endereços

Os endereços gerados pela CPU são divididos em duas partes:

Número da página (p) – utilizado como índice na tabela de paginação que contem o endereço base de cada página na memória física

Deslocamento (d) – combinado com o endereço base define o endereço físico a ser enviado para a unidade de memória

Para um determinado espaço de endereçamento com 2m bits e páginas de tamanho 2n

Page 21: Gerência de Memória: Memória Principal

Hardware de paginação

Page 22: Gerência de Memória: Memória Principal

Modelo de paginação de memórias lógica e física

Page 23: Gerência de Memória: Memória Principal

Exemplo de paginação

Memória de 32-bytes com páginas de 4 bytes

Page 24: Gerência de Memória: Memória Principal

Quadros livres

Antes da alocação Após alocação

Page 25: Gerência de Memória: Memória Principal

Implementação da tabela de paginação

Tabela de paginação é mantida na memória principal Page-table base register (PTBR) aponta para a base Page-table length register (PRLR) indica o tamanho

Neste esquema, cada acesso a dados ou instruções requer dois acessos à memória. Um para a tabela de paginação e outro para o dado/instrução

Este problema de dois acessos pode ser amenizado utilizando um cache de hardware especial chamado translation look-aside buffers (TLBs)

Page 26: Gerência de Memória: Memória Principal

Busca paralela

Tradução de endereço (p, d) Se p está na memória associativa o valor de f é obtido Se não, obter o valor de f da tabela de paginação na

memória

Memória associativa

Page # Frame #

Page 27: Gerência de Memória: Memória Principal

Paginação utilizando TLBs

Page 28: Gerência de Memória: Memória Principal

Tempo efetivo de acesso

Busca associativa = unidades de tempo Assumir que um ciclo de memória dura 1

microssegundo Taxa de acerto – porcentagem das vezes em que

o número de uma página é encontrado no TLB; Taxa de acerto =

Tempo efetivo de acesso (EAT)EAT = (1 + ) + (2 + )(1 – )

= 2 + –

Page 29: Gerência de Memória: Memória Principal

Proteção de memória

O mecanismo de proteção de memória associa um bit de proteção a cada quadro

Um bit Válido-inválido anexado a cada entrada na tabela de paginação: “válido” indica que a página associada está no

espaço de endereçamento lógico do processo “inválido” indica que a página não está no espaço

de endereçamento lógico do processo

Page 30: Gerência de Memória: Memória Principal

O bit Válido (v) ou Inválido (i) na tabela de paginação

Page 31: Gerência de Memória: Memória Principal

Páginas compartilhadas

Código compartilhado Uma cópia apenas de leitura do código compartilhada

entre vários processos O código compartilhado precisa aparecer no mesmo

local no espaço de endereçamento lógico de todos os processos

Código e dados privados Cada processo mantém uma cópia separada dos

dados e código As páginas para o código privado podem aparecer

em qualquer lugar no espaço de endereçamento lógico

Page 32: Gerência de Memória: Memória Principal

Exemplo do uso de páginas compartilhadas

Page 33: Gerência de Memória: Memória Principal

Estrutura da tabela de paginação

Paginação hierárquica

Tabelas de paginação com hash

Tabela de paginação invertida

Page 34: Gerência de Memória: Memória Principal

Tabela de paginação hierárquica

Quebra o espaço de endereçamento lógico em múltiplas tabelas de paginação

Uma técnica simples é paginação em dois níveis

Page 35: Gerência de Memória: Memória Principal

Paginação em dois níveis

Page 36: Gerência de Memória: Memória Principal

Espaço de endereçamento lógico (máquina de 32-bit com páginas de 4K) é divido em : Um número de página de 20 bits Um deslocamento na página de 12 bits

Uma vez que a tabela de paginação é também paginada, o número da página é também dividido em duas partes: Um número de página de 10 bits Um deslocamento na página de 10 bits

Portanto, os endereços lógicos são construídos da seguinte forma:

onde pi é o índice na tabela de paginação externa e p2 é o deslocamento dentro da página da tabela de paginação externa

Exemplo de paginação em dois níveis

Page 37: Gerência de Memória: Memória Principal

Esquema de tradução de endereço

Page 38: Gerência de Memória: Memória Principal

Paginação em três níveis

Page 39: Gerência de Memória: Memória Principal

Tabelas de paginação com hash

Comum em espaço de endereçamento com mais de 32 bits

O número da página virtual é submetido a uma função hash e o resultado aponta para uma entrada na tabela de paginação Cada entrada na tabela de paginação contem uma lista de

elementos cujo hash apontou para a mesma localidade (colisões)

O número da página virtual é então comparado com os valores nessa lista para localizar o quadro na memória física

Page 40: Gerência de Memória: Memória Principal

Tabela de paginação com hash

Page 41: Gerência de Memória: Memória Principal

Tabela de paginação invertida

Uma entrada para cada quadro na memória principal

As entradas da tabela são os endereços das páginas virtuais armazenadas nessas localização de memória, com informação sobre o processo proprietário

Diminui a quantidade de memória necessária para armazenar a tabela de paginação mas aumenta o tempo necessário para consultar a tabela Usar hash para limitar a busca a uma, ou pelo menos, a

umas poucas entradas

Page 42: Gerência de Memória: Memória Principal

Arquitetura de uma tabela de paginação invertida

Page 43: Gerência de Memória: Memória Principal

Segmentação

Esquema de gerência de memória que reflete a visão que o usuário tem da memória

Um programa é uma coleção de segmentos Um segmento representa uma unidade lógica, como:

Programa principalProcedimentoFunçãoMétodoObjetoVariáveis locaisVariáveis globaisPilhaTabela de símbolos

Page 44: Gerência de Memória: Memória Principal

Visão do usuário sobre um programa

Page 45: Gerência de Memória: Memória Principal

Arquitetura de segmentação

O espaço de endereçamento lógico consiste em uma tupla:<número do segmento, deslocamento>,

Tabela de segmentos – mapeia os endereços virtuais em endereços físicos; cada entrada tem: base – contem o endereço inicial do segmento na memória limite – especifica o tamanho do segmento

Segment-table base register (STBR) aponta para a base da tabela de segmentação na memória

Segment-table length register (STLR) indica o número de segmentos utilizados por um programa;

o número de segmento s é legal se s < STLR

Page 46: Gerência de Memória: Memória Principal

Arquitetura de segmentação

Proteção A cada entrada na tabela de segmentação associamos:

Bit de validade = 0 segmento ilegal Privilégios de leitura/escrita/execução

Bits de proteção associados a segmentos; compartilhamento de código ocorre no nível dos segmentos

Uma vez que o tamanho dos segmentos varia, alocação de memória passa a ser uma problema de alocação dinâmica de armazenamento

Page 47: Gerência de Memória: Memória Principal

Hardware para segmentação

Page 48: Gerência de Memória: Memória Principal

Exemplo do uso de segmentação