Я читаю «Душу новой машины» Трейси Киддер, где команда Data General разрабатывает новую машину (под кодовым названием «Eagle», позже названную MV / 8000). Это 32-битное расширение предыдущей архитектуры (16-битное Eclipse). Кажется, одной из вращающихся тем является то, что они не хотят создавать машину с битом режима и что им это удалось.
Тем не менее, он не учитывает, как это технически достигается, и также не учитывает, почему было так привлекательно создавать машины без битов режима. Книга не является технической книгой, поэтому детали могут быть искажены. Тем не менее, читая эту книгу, вы чувствуете, что в то время решение «модового бита» было распространено (и, следовательно, возможно), но инженеры посчитали его непривлекательным по эстетическим причинам. Книга также заставляет казаться невероятно сложной задачей создание дизайна без бита режима, который каким-то образом был преодолен этой конкретной командой.
Я нашел это описание того, как это было достигнуто:
http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt
Похоже, в основном речь идет об использовании ранее неиспользованной части пространства кода операции для новых инструкций. Я должен признать, что был немного разочарован тем, что это было «просто так». Также я думаю, что это все еще оставляет некоторые вопросы без ответа:
Во-первых, как 16-битные процессы жили в 32-битном адресном пространстве? Потому что я думаю, что это ключевая проблема в создании 32-битного расширения "без бита режима". Расширение набора инструкций, с другой стороны, является довольно распространенным делом. Поскольку нет описания того, как это произошло, можно предположить, что 16-битный код просто обращается к памяти, как это всегда делалось, возможно, он видит какой-то тип виртуализированного / объединенного представления памяти (с новыми регистрами ЦП, контролирующими, где находится первый адрес), или что-то такое. Но я не знаю, есть ли что-то большее, чем это. В этом случае можно было бы утверждать, что это своего рода «бит режима». Процессы в 16-битном режиме могут выполняться вместе с другими процессами благодаря специальным функциям, добавленным в ЦП.
Во-вторых, почему было так привлекательно создать машину без бита режима? Многие из преимуществ, о которых говорится в книге, заключается в том, что клиенты хотели запускать старое программное обеспечение. Но это, кажется, не говорит против бита режима, так как вся цель использования бита режима состоит в том, чтобы иметь обратную совместимость. Когда AMD расширила x86 до 64-бит, по крайней мере, согласно моему пониманию слова «бит режима», они точно добавили бит режима. Специальный бит, который сделает процессор в 64-битном режиме. И еще один бит, который заставил бы процесс выполняться в «подрежиме» 64-битного режима (чтобы обеспечить совместимость с 32-битными приложениями). Суть подрежима заключается в том, что ЦП интерпретирует поток инструкций как старые 32-битные инструкции, но выполненные 32-битные обращения к памяти разрешаются с использованием нового формата таблиц страниц (установленного 64-битной операционной системой) и в конечном итоге отображается на полное физическое адресное пространство. Кроме того, 32-битный код может быть заменен 64-битным кодом. Как и решение Data General, это также позволило 32-битной программе работать под 64-битными программами (16-битная или 32-битная в случае DG). Таким образом, с точки зрения клиента, похоже, нет никакой разницы вообще. Следовательно, единственная выгода могла бы быть в реализации, упрощая дизайн, но книга не делает это звучащим так, как это беспокоит, поскольку бит режима, казалось, был распространен даже в то время (и, кажется, более поздние архитектуры также использовал его, как показывает случай x64).
Я уверен, что кое-что я пропустил, поэтому было бы здорово, если бы кто-то мог обсудить больше технических деталей и достоинств этого «безрежимного» дизайна.