aaaaaaaaaaaa
Somente com a segmentação teríamos blocos de memória contínuos para cada processo. Isso sobrecarregaria a memória, copiando a imagem de um processo todo de uma vez. Caso não haja um espaço de memória suficiente para alocar todo o processo, ou seja, não há um segmento que o comportasse e haverá falha por falta de segmento (segmentation fault ). Para resolver tal problema é usada a paginação, onde a memória é dividida em pedaços de tamanho fixo (páginas), e segmentos de código são alocados nestes e mapeados utilizando-se uma tabela de páginas, ao invés de alocação de todo código de uma única vez. No Linux a paginação é feita em 3 níveis, ou seja, são usadas 3 tabelas para mapear a memória, a Page Directory, Page Middle Directory e Page Table. O campo directory field é usado como índice para o diretório global, que existe para cada processo. O valor achado nessa posição é um ponteiro para a page middle table, que é novamente indexada e contém um ponteiro que indica para o endereço virtual de memória. Isso pode ser visto na Figura 10. Além disso, para aumentar o desempenho do sistema é mantido um buffer com os últimos endereços acessados, para que não haja necessidade de fazer múltiplos acessos as páginas. Este buffer é chamado de TLB (Translation Lookaside Buffer ). Logo antes de realizar a procura do endereço utilizando as tabelas de página o sistema busca a tradução