View
2
Download
0
Category
Preview:
Citation preview
Fundamentos de Sistemas Operacionais
Aula 18: Segmentação e Paginação
Diego Passos
Última Aula
MMU
● Dispositivo de hardware que auxilia o gerenciamento de memória.
● Verifica validade de endereços.● Realiza tradução de endereços lógicos para endereços
físicos.○ Processos acreditam que seu espaço de
endereçamento sempre começa no endereço 0.○ Na prática, SO pode alocar qualquer região da memória.
Tipos de Alocação Primitivos
● Particionamentos.○ Fixo.○ Variável.
● Blocos contíguos de memória são alocados.○ Partições.
● Possibilidade de Fragmentação.○ Interna: bytes são perdidos dentro da partição.○ Externa: bytes são perdidos entre partições.
Blocos Contíguos
● Não há "buracos" na região de memória alocada.● Os endereços lógicos consecutivos são mapeados para
posições consecutivas da memória física.● Simplifica o processo de tradução e verificação da MMU.
○ Comparação com o Registrador Limite.○ Soma com o Registrador Base.
● Duas grandes limitações: ○ Fragmentação externa.○ Impossibilidade de compartilhamento de memória.
● Se o SO pudesse alocar regiões não contíguas, ambas as limitações seriam resolvidas.
○ MMU precisaria ser bem mais complexa.
Segmentação
Ideia
● Primeira tentativade gerenciamento de memória com alocação não contígua.
● Utiliza a divisão natural do espaço de endereçamento.○ Texto.○ Dados.○ Pilha○ ...
● Cada uma destas divisões lógicas, se transforma em um bloco independente.
○ Menores que o espaço de endereçamento completo.○ Podem ser alocados de forma não contígua.
■ Usando qualquer método de alocação.
Exemplo
Exemplo
Segmentos Típicos
● Em geral, processos são dividos em 4 segmentos típicos:○ Segmento de código.
■ Contém as instruções. ○ Segmento de dados.
■ Contém as variáveis estáticas (globais). ○ Segmento de heap.
■ Contém as variáveis alocadas dinamicamente. ○ Segmento de pilha.
■ Contém a pilha de execução. ● Nada impede que outros segmentos sejam criados.
Endereços Lógicos na Segmentação
● Cada segmento recebem um identificador numérico não negativo.
○ Em geral, segmento de código é sempre 0.● Endereços lógicos são quebrados em duas partes:
○ Bits mais representativos indicam o identificador do segmento.
○ Bits menos significativos indicam deslocamento dentro do segmento.
● Exemplo:○ Dois bits para o segmento e 4 para o deslocamento. ○ Endereço lógico 010110.
■ Segmento 1.■ Deslocamento 6.
Mapeamento de um Endereço Lógico
● Quando o SO cria um processo, ele aloca cada um dos segmentos.
○ Possivelmente em regiões diferentes da memória.● Tamanhos e posições dos segmentos são anotados em
uma Tabela de Segmentos.○ Identificador do segmento.○ Endereço base.
■ Endereço do primeiro byte do segmento. ○ Limite.
■ Tamanho do segmento.● A cada acesso à memória, MMU decompõe o endereço
lógico.○ Identificador do segmento é usado como índice na
tabela.○ Base e limite são carregados em registradores.
Mapeamento de um Endereço Lógico (mais)
● Uma vez carregados os valores base e limite, tradução e verificação é identica aos esquemas de gerenciamento de memória baseados em bloco.
● Pode ocorrer da MMU não achar o segmento na tabela.○ Exemplo: processo tenta acessar um endereço no
segmento 20 e só há 8 segmentos.○ MMU gera uma interrupção avisando ao SO do acesso
ilegal.
Mapeamento de um Endereço Lógico (mais)
Acesso à Tabela de Segmentos
● Cada processo tem a sua própria tabela de segmentos. ● MMU precisa acessá-la de alguma forma.
○ Para carregar endereço base e limite.● Duas possibilidades:
○ MMU pode conter uma memória interna para a tabela.■ A cada troca de contexto, SO atualiza a tabela da
MMU.■ Torna a troca de contexto mais lenta.
○ MMU pode buscar a tabela na memória principal.■ Registradores específicos apontam para a tabela.■ Na troca de contexto, basta que o SO atualize estes
registradores.■ Acesso à memória fica mais lento.
■ São necessários dois acessos.
Segmentação: Análise
● Não é um método de alocação.○ É um esquema de organização da memória de um
processo.● Auxilia na alocação, no entanto.
○ Blocos a serem alocados são menores.○ Reduz a fragmentação externa.
■ Blocos de memória física pequenos têm mais chance de serem usados.
● Simplifica compartilhamento de memória.○ Basta que processos compartilhem um segmento.○ Que pode ser alocado em qualquer região da memória
física.
Segmentação: Análise (mais)
● Possibilita alocação dinâmica de memória.○ Por exemplo, com a função malloc().○ Se o processo precisa de mais memória, SO pode
simplesmente criar um novo segmento para ele.■ Desde que haja memória física disponível.
Compartilhamento de Segmentos
● Processos podem compartilhar memória, compartilhando segmentos.
● Um único bloco alocado de memória física está presente nas tabelas de segmento de vários processos.
● Em geral, um processo requisita a criação de um novo segmento.
○ Uma vez criado, processo requisita que SO compartilhe o segmento com outros processos.
○ SO inclui entradas nas tabelas dos demais processos.● Note que um segmento compartilhado pode ter IDs
diferentes para processos diferentes.○ Tabelas de segmento fazem as conversões apropriadas.
Compartilhamento de Segmentos (mais)
● Útil para a implementação das bibliotecas compartilhadas.○ Ao invés de carregar uma cópia do código para cada
processo, uma única cópia é carregada em um segmento.
○ Todos os processos que precisam da biblioteca compartilham o segmento.
Paginação
Motivação
● Segmentação reduz o problema da fragmentação externa.○ Blocos menores a serem alocados.○ Maior chance de aproveitar blocos de memória
"sobrando" entre partições.● Mas o problema não é completamente resolvido.
○ Cada segmento ainda é um bloco que precisa ser alocado de forma contígua.
○ Segmentos podem ser blocos grandes.● Solução é evitar completamente necessidade de alocação
contígua.○ A técnica de Paginação faz isso.
Funcionamento
● Memória física é dividida em pequenos blocos de tamanho fixo, chamados quadros.
● Similar ao particionamento fixo, com 3 diferenças básicas.○ Quadros são muito menores que partições.
■ Alguns Kbytes.○ Quadros sempre têm o mesmo tamanho.
■ Partições podem ter tamanhos diferentes.○ Conjunto de quadros alocados para um processo não
precisa ser contíguo.● Espaço de endereçamento do processo é dividido em
pequenos blocos, chamados páginas.○ Do mesmo tamanho dos quadros.
● Cada página é colocada em um quadro da memória principal.
Funcionamento (mais)
● Pode-se pensar nas páginas como segmentos do processo.○ No entanto, páginas são muito menores.
■ E em número muito maior.■ E em tamanho fixo.
○ Além disso, páginas não seguem uma divisão lógica do processo.
■ Espaço de endereçamento simplesmente é dividido em blocos do mesmo tamanho.
● Não confundir páginas e quadros.○ Páginas são os blocos do espaço de endereçamento.○ Quadros são os blocos da memória principal.
■ Páginas são mapeadas em quadros.
Exemplo
Endereçamento Lógico na Paginação
● Semelhante à segmentação.● Endereço lógico é dividido em duas componentes.
○ Número da página.○ Deslocamento dentro da página.
● MMU faz a decomposição e consulta a Tabela de Páginas do processo.
○ Contém as informações de mapeamento entre páginas e quadros.
● Endereço resultante é passado para a controladora da memória.
● Verificações de segurança são feitas como na segmentação.
Exemplo de Tradução● Note que:
○ Não há na tabela campo Limite.○ Tradução se resume a troca de prefixo.
Paginação: Análise
● Resolve completamente o problema da fragmentação externa.
○ Blocos de memória entre duas alocações são sempre ao menos do tamanho de um quadro.
○ Este quadro pode ser alocado para qualquer processo.● Há, no entanto, possibilidade de fragmentação interna.
○ Não é muito relevante.○ Quadros são pequenos.
● Escolha do tamanho do quadro é importante.○ Quadros grandes: menos quadros, menos overhead de
gerenciamento, mais fragmentação interna.○ Quadros pequenos: mais quadros, mais overhead de
gerenciamento, menos fragmentação interna.○ Geralmente, determinado pelo hardware.
Paginação: Análise (mais)
● Outros benefícios da segmentação também são obtidos na paginação:
○ Fácil compartilhamento de memória.■ Processos compartilham páginas.
○ Fácil alocação dinâmica de memória.■ SO aloca novas páginas ao processo de acordo com
a necessidade.
Gerenciamento de Quadros Disponíveis
● SO precisa manter informações sobre os quadros livres.○ Usada durante a alocação de um novo processo.
● Esta manipulação precisa ser eficiente.○ Rápida.○ Com baixo consumo de memória.
● Três maneiras comuns:○ Tabela.
■ Tende a ficar muito grande, pois há muitos quadros.○ Mapa de bits.
■ Ainda é grande: 1 milhão de bits para memória de 4GB.
○ Lista encadeada de blocos livres.■ Se não há muitos "buracos" na memória, lista se
mantém pequena.
Acesso às Tabelas de Páginas
● MMU precisa acessar a tabela de páginas de cada processo.
○ Similar à segmentação.● Três maneiras de se fazer isso.
○ Memória interna da MMU.■ Só aplicável se tabelas de páginas forem muito
pequenas.■ Raro.
○ Ponteiros para a memória principal.■ Registrador PTBR (Page Table Base Register).■ Registrador PTLR (Page Table Limit Register).■ Duplica o número de acessos à memória.
○ TLB.
Translation Lookaside Buffer
● Memória cache interna à MMU.● Mantém algumas entradas muito acessadas das tabelas de
páginas dos processos.● Quando a MMU precisa fazer a tradução de um endereço
lógico:○ Verifica se a entrada da tabela de páginas do processo
referente à página desejada está na TLB.○ Se sim, tradução é feita e acesso à memória é rápido.○ Se não, vai à memória principal (usando registradores
PTBR e PTLR).■ Neste caso, acesso é bem mais lento.
● Se o percentual de acerto da TLB é alto, tempo médio de acesso à memória é baixo.
○ Overhead da paginação é baixo.
Translation Lookaside Buffer (mais)
Translation Lookaside Buffer (mais)
● Implementada através de uma cache totalmente associativa.
○ Buscas são feitas totalmente em paralelo.○ Muito eficiente.○ Muito caro.
■ Espaço de armazenamento reduzido.● Processadores modernos têm TLBs com capacidade
variando de 8 a 4096 entradas.○ Na prática,suficiente para taxa de acerto acima dos
99%.○ Overhead do tempo de acesso fica abaixo dos 30%.
Translation Lookaside Buffer (mais)
● Quando à troca de contexto, TLB contém ainda informações sobre o processo anterior.
○ Entradas da tabela de páginas dele.○ Obviamente, diferentes das entradas do novo processo.
● Isso exige que o SO faça um flush da TLB.● Em alguns processadores, a TLB guarda também o PID do
processo (para cada entrada).○ SO não precisa fazer flush.○ Acelera a troca de contexo.
Outras Informações da Tabela de Páginas
● Basicamente, a tabela de páginas precisa guardar apenas o mapeamento entre número de página e número de quadro.
● Em geral, há também outras informações:○ Bit de validade:
■ Diz a página é válida ou não.○ Bits de permissão:
■ Dizem se a página pode ser lida, escrita ou executada.
Segurança
● A tabela de páginas não pode ser guardada no espaço de endereçamento do processo.
○ Processo poderia alterá-la para acessar regiões de memória indevidas.
○ Armazenamento deve ser feito em área restrita ao SO.● Manipulação dos registradores PTBR e PTLR devem ser
privilegiadas.○ Apenas possível em modo supervisor.
Implementação das Tabelas de Página
● Consultas devem ser rápidas.● Solução comum: acesso direto.
○ Tabela é um vetor indexado pelo número da página desejada.
● Problema:○ A tabela precisa ser extensiva.○ Todas as entradas possíveis devem ser listadas.○ Nem todas as páginas listadas são usadas.
■ Exemplo: pilha de execução.
Implementação das Tabelas de Página (mais)
Implementação das Tabelas de Página
● Estes "buracos" fazem com que a tabela seja grande desnecessariamente.
● Por outro lado, é preciso que a tabela contenha todas as entradas possíveis.
● Solução:○ Paginação Multinível.
Paginação Multinível
● Processos não tem mais apenas uma tabela de páginas.● São várias tabelas, organizadas em uma hierarquia.● Existe uma tabela principal, relativamente pequena.
○ Às vezes chamada de Diretório de Páginas.○ Tem a função de agrupar páginas.○ Contém um ponteiro para tabelas de páginas de um
nível mais baixo.● No nível mais baixo da hierarquia, as tabelas contém as
informações de mapeamento.
Paginação Multinível (mais)
Paginação Multinível (mais)
● Endereços lógicos agora são divididos em mais componentes.
○ Além do deslocamento, há um componente para cada um dos níveis da tabela de página.
● Exemplo com dois níveis (80386):○ Primeiros 10 bits representam índice na tabela principal.○ Próximos 10 bits representam índice na tabela do
segundo nível.○ Últimos 12 bits são o deslocamento.
Paginação Multinível (mais)
Tabela de Páginas Invertida
● Outro método para evitar o crescimento das tabelas de páginas dos processos.
● Ideia é indexar a tabela de páginas pelos quadros da memória principal, e não pelas páginas dos processos.
● Vantagens:○ Uma única tabela.○ Sem os "buracos" da tabela de páginas normal.
● Desvantagens:○ Tradução é muito mais complicada.○ Exige uma busca na tabela pelo número da página
desejado (e pelo PID do processo).● TLB ameniza este problema (por ser associativa).
○ Porém, quando entrada não está na TLB, acesso é bem mais lento.
Paginação com Segmentação
Ideia
● Combinar os dois métodos de gerenciamento de memória.○ Espaço de endereçamento do processo é segmentado.○ Cada segmento é dividido em páginas.○ Páginas são alocadas em quadros na memória principal.
● Endereço lógico agora tem componentes tanto para o número de página, quanto para o número de segmento.
○ Processos têm uma tabela de segmentos.○ Mas também várias tabelas de páginas.
● Processo de tradução tem duas etapas:○ MMU identifica número do segmento.
■ Entrada na tabela de segmentos aponta para a tabela de páginas correspondente.
○ Tabela de páginas é acessada e número do quadro é encontrado.
Motivação
● A paginação com segmentação não traz grandes benefícios.
○ Em relação à paginação pura.● Quando os processadores passaram a suportar paginação,
segmentação já era uma técnica estabelecida.● Conceitos acabaram se misturando.● Hoje, é um método de gerenciamento de memória que está
sendo abandonado.● Processadores mais novos (especificamente, de 64 bits) já
praticamente deixaram de suportar.
Revisão
Para Lembrar
● Problemas da alocação contígua:○ Fragmentação Externa.○ Dificuldade de compartilhamento.○ Dificuldade de alocação dinâmica de memória.
● Segmentação:○ Divisão do processo em segmentos.○ Segmentos não precisam ser alocados juntos.○ Necessária uma tabela de segmentos.
● Paginação:○ Divisão do processo em páginas.○ Divisão da memória em quadros.○ Necessária tabela de páginas.
■ TLB, paginação multinível, tabelas invertidas.
Recommended