Descricao

O Linux Kernel 2.6 usa paginação pura para gerenciamento de memória. Versões mais antigas adotavam segmentação, que agora é usada somente quando requerida por uma arquitetura 80x86. Neste caso, os segmentos são descritos na GDT (Global Descriptor Table), cujo esquema está mostrado abaixo.

livia1.jpg

Fig. 1. Global Descriptor Table

Como a segmentação no Linux é pouco usada, não concentraremos esforços na sua descrição. Para descrição da GDT e maiores detalhes a respeito de segmentação e segurança, acesse o link:
http://jno.glas.net/data/prog_books/lin_kern_2.6/0596005652/understandlk-CHP-2-SECT-3.html

A paginação do Linux adota um modelo de paginação que se adapta às arquiteturas de 32-bits e 64-bits. A partir da versão 2.6.11, o modelo de 4 níveis foi adotado. Os 4 níveis de páginas são:

- Tabelas nível I (Page Global Directory): contém endereços para tabelas nível II;
- Tabelas nível II (Page Upper Directory): contém endereços para tabelas nível III;
- Tabelas nível III (Page Middle Directory): contém endereços para a tabela de páginas;
- Page Table: tabela com uma entrada por página, que contém, para cada uma, um endereço de moldura de página e bits de flag.

Este modelo de paginação do Linux pode ser mais bem representado através do esquema abaixo, que relaciona bits do endereço linear com entradas para as tabelas.

livia2.jpg

Fig. 2. Conversão de endereço virtual para endereço de memória física.

Alguns flags incluídos em cada entrada da Tabela de Páginas estão listados abaixo. Note que alguns destes flags são usados para proteção.

Bit Função
_PAGE_PRESENT Página está residente na memória e não foi "swapped-out".
_PAGE_PROTNONE Página está residente, mas não está acessível.
_PAGE_RW Verdadeiro se a página puder ser escrita.
_PAGE_USER Verdadeiro se a página está visível do espaço do usuário.
_PAGE_DIRTY Verdadeiro se foi escrito algo na página.
_PAGE_ACCESSED Verdadeiro se a página foi acessada.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License