A CPU de 32 ou 64 bits usa endereçamento de segmentação no Linux?

0

A CPU de 32 ou 64 bits usa endereçamento de segmentação no Linux? Eu sei que em CPUs mais antigas, como o 8086 usado segmentação para endereçamento de memória, mas não tenho certeza se esse método é usado em CPUs de 32 bits ou 64 bits para o sistema operacional Linux.

    
por Yet A-beyene 13.03.2016 / 14:32

2 respostas

4

Originalmente (antes do 286), a segmentação era principalmente um hack projetado para possibilitar o endereçamento de mais de 64 KB em uma CPU de 16 bits. Em 286, a segmentação em modo protegido foi estendida para introduzir proteção e estender a memória física suportada de 1MB para 16MB. Mas a CPU ainda tinha apenas registros de 16 bits, o que significava que qualquer bloco contíguo de dados com mais de 64 KB era problemático para processar.

Tudo isso mudou com a introdução do 386. Os registradores da CPU foram estendidos para 32 bits e a paginação foi adicionada como um novo recurso. A paginação era uma maneira muito mais poderosa de mapear endereços lógicos e físicos do que o que era alcançável com segmentação.

O Linux foi originalmente projetado para o 386 e fez uso do recurso de paginação. O uso de segmentação do Linux era mínimo, algumas das configurações de proteção eram controladas por meio de descritores de segmento, o que significava que você não podia evitar completamente a necessidade de segmentação. Mas o Linux configuraria todos os segmentos para iniciar no endereço 0.

Em outras palavras: o Linux nunca usou endereçamento segmentado. Usava apenas segmentação porque isso era necessário para controlar alguns dos recursos de proteção.

Quando a AMD projetou os processadores de 64 bits, eles decidiram que alguns recursos históricos não seriam suportados no modo de 64 bits. Uma das coisas que eles fizeram foi impor um endereço de início de segmento 0. Então, nesse ponto, os endereços segmentados não eram mais suportados nem por hardware nem por software.

Se você usa uma CPU moderna no modo de 16 ou 32 bits, ela ainda suporta endereços segmentados para compatibilidade com versões anteriores. Mas no modo de 64 bits, você só tem endereços lineares e paginação de 64 bits.

    
por 07.06.2017 / 22:03
0

O 8086 realmente não tinha uma MMU comparável com o que os modernos processadores x86 fazem; com 386 e mais tarde, as coisas eram radicalmente diferentes:

  • arbitrariamente muitas regiões de memória virtual
  • tabelas de páginas para mapear estas
  • Mesas de páginas aninhadas apenas para que as coisas funcionem com mais facilidade
  • outras formas de virtualização

É um tópico bastante complexo, e eu não acho que uma visão geral concisa sobre a arquitetura de gerenciamento de memória x86 possa ser dada em uma resposta de superusuário. No entanto, a segmentação não é um dos termos que se usaria para descrever essa arquitetura. Eu tenho medo de só poder pedir a você para ler um artigo sobre o 386 e o design do sistema operacional para x86.

    
por 13.03.2016 / 15:54

Tags