Я читаю «Душу новой машины» Трейси Киддер, где команда 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).
Я уверен, что кое-что я пропустил, поэтому было бы здорово, если бы кто-то мог обсудить больше технических деталей и достоинств этого «безрежимного» дизайна.
Ответы:
Ответ заключается в том, что Эд де Кастро, президент Data General Management, создал группу инженеров в Северной Каролине специально для разработки ЦП следующего поколения. Он поручил задачу поддержки и дополнительных улучшений нам, команде из Массачусетса. Мы трижды предлагали новую крупную архитектуру, каждый раз с очень разумным битом режима, и описывали ее как скромное постепенное улучшение. Каждый раз Эд видел нашу маскировку и отклонял предложение, ожидая, что команда Северной Каролины добьется успеха. Эд считал, что независимо от того, как мы пытались скрыть наши предложения, он знал бы, что это была архитектура нового поколения, если бы у нее был бит режима. Поэтому нам пришлось предложить архитектуру нового поколения без бита режима, даже если это сделало ее менее эффективной. Вот так мы прошли мимо Эда де Кастро. Увидеть душу новой машины,
источник
Теоретически «бит без режима» позволит вам использовать старую 16-битную операционную систему без каких-либо изменений, и эта ОС сможет запускать 32-битные приложения, хотя новые 32-битные приложения будут зависать 16-битный виртуальный адрес, поэтому можно было бы использовать 32-битные регистры и новые инструкции, но он мог бы работать неправильно, если бы они обращались к виртуальным адресам больше .216
С помощью бита режима пришлось бы изменить старую 16-разрядную ОС, чтобы выяснить, была ли программа 16-разрядной или 32-разрядной, а затем установить соответствующий бит режима перед запуском программы.
На практике кажется, что MV / 8000 действительно имел бит режима. В другом месте на веб-странице Марка Смотермана в Клемсоне он опубликовал Общие данные, Принципы работы ECLIPSE MV / 8000 , 1980 . Если вы посмотрите в Приложении E (начиная со страницы 369), вы увидите, что MV / 8000 имел два совершенно разных механизма таблиц страниц. Конкретная машина, с которой MV / 8000 была обратно совместима, была C / 350, а C / 350 имел специальный 16-битный блок выделения и защиты памяти с особыми способами управления этим блоком. Для 32-разрядного логического к физическому режиму вы бы вместо этого включили модуль преобразования адресов (описано в главе 3, начиная со стр. 31).
На практике это означает, что при выполнении 16-битной инструкции в 32-битном режиме указывается, что старшие 16-битовые значения логического адреса устанавливаются в 0. Также должна быть некоторая спецификация о том, что происходит с старшей 16-битный адрес, когда вы выполняете 32-битную инструкцию в 16-битном режиме, но я не смог найти ее во время краткого ознакомления с руководством.
Поэтому вопрос не в том, хороший или плохой бит режима. Более того, не было особой причины использовать бит режима, чтобы различать 16-битные и 32-битные инструкции. 16-битные инструкции используют 16-битный логический адрес (с высокими 16 битами, установленными в 0) и 16-битные регистры, а 32-битные инструкции используют 32-битный логический адрес и 32-битные регистры. Старая ОС «просто работает» на новой машине, но вы также можете попробовать новые инструкции, запустив новую программу под старой ОС.
источник