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.