Я читаю "Душу нової машини" Трейсі Кіддер, де команда компанії 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).
Я впевнений, що я щось пропустив, тому було б чудово, якби хтось міг детальніше обговорити технічні деталі та достоїнства цього дизайну "без режиму біт".