Estou lendo "A Alma de uma Nova Máquina", de Tracy Kidder, onde uma equipe da Data General cria uma nova máquina (codinome "Eagle", mais tarde denominada MV / 8000). É uma extensão de 32 bits de uma arquitetura anterior (o Eclipse de 16 bits). Um dos temas rotativos parece ser que eles não querem criar uma máquina com um bit de modo e que conseguiram isso.
No entanto, deixa de fora como isso é tecnicamente alcançado, e também não explica por que era tão atraente criar uma máquina sem um pouco de modo. O livro não é um livro técnico, portanto os detalhes podem estar distorcidos. No entanto, você tem a sensação de ler esse livro que uma solução "mode bit" era comum (e, portanto, viável) na época, mas era considerada pouco atraente pelos engenheiros, talvez por razões estéticas. O livro também faz parecer uma tarefa imensamente difícil criar um design sem um pouco de modo, que de alguma forma foi superado por essa equipe em particular.
Encontrei esta descrição de como isso foi alcançado:
http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt
Parece ser basicamente sobre o uso de uma parte não utilizada anteriormente do espaço do código de operação para as novas instruções. Devo admitir que fiquei um pouco decepcionado por ter sido "apenas isso". Também acho que isso ainda deixa algumas perguntas sem resposta:
Primeiramente, como os processos de 16 bits residiam no espaço de endereço de 32 bits? Porque eu acho que esse é o principal desafio em criar uma extensão de 32 bits "sem um bit de modo". Estender o conjunto de instruções, por outro lado, é uma tarefa relativamente comum. Como não há descrição de como isso aconteceu, pode-se supor que o código de 16 bits simplesmente acesse a memória como sempre, talvez ele veja algum tipo de visualização virtualizada / banida da memória (com novos registros de CPU controlando onde está o primeiro endereço) ou algo parecido. Mas não sei se há mais do que isso. Nesse caso, alguém poderia argumentar que era uma solução "mode bit". Os processos no modo de 16 bits podem ser executados juntamente com os outros processos em virtude de recursos especiais adicionados à CPU.
Em segundo lugar, por que era tão atraente criar uma máquina sem um pouco de modo? Muitos dos benefícios apresentados no livro são que os clientes queriam executar software antigo. Mas isso não parece falar contra um bit de modo, pois todo o objetivo de usar um bit de modo é ter compatibilidade com versões anteriores. Quando a AMD estendeu o x86 para 64 bits, pelo menos de acordo com o meu entendimento da palavra "bit de modo", o que eles fizeram foi exatamente adicionar um bit de modo. Um bit especial que faria a CPU no modo de 64 bits. E outro bit que faria um processo ser executado em um "submodo" do modo de 64 bits (para habilitar a compatibilidade com aplicativos de 32 bits). A essência do submodo é que a CPU interpreta o fluxo de instruções como as instruções antigas de 32 bits, mas que os acessos à memória de 32 bits realizados são resolvidos usando o novo formato de tabelas de páginas (configurado pelo sistema operacional com reconhecimento de 64 bits) e, eventualmente, mapeado para o espaço de endereço físico completo. Além disso, o código de 32 bits pode ser impedido pelo código de 64 bits. Como a solução Data General, isso também permitia que um programa de 32 bits fosse executado em programas de 64 bits (16 bits vs 32 bits no caso do DG). Portanto, do ponto de vista do cliente, parece não haver nenhuma diferença. Portanto, o único benefício poderia ter sido a implementação, simplificando o design, mas o livro não parece que essa é a preocupação, uma vez que o bit de modo parece ser comum mesmo naquela época (e parece que as arquiteturas posteriores também empregado como mostra o caso x64).
Tenho certeza que há algo que eu perdi, então seria ótimo se alguém pudesse discutir mais sobre os detalhes técnicos e as virtudes desse design "sem modo de bits".