Czytam „Duszę nowej maszyny” Tracy Kidder, w której zespół Data General projektuje nową maszynę (o kryptonimie „Eagle”, później nazwaną MV / 8000). Jest to 32-bitowe rozszerzenie poprzedniej architektury (16-bitowe środowisko Eclipse). Jednym z motywów obrotowych wydaje się być to, że nie chcą tworzyć maszyny z bitem trybu i że im się to udało.
Pomija jednak sposób, w jaki jest to technicznie osiągane, a także nie wyjaśnia, dlaczego stworzenie maszyny bez odrobiny trybu było tak atrakcyjne. Książka nie jest książką techniczną, więc może być tak, że szczegóły zostały w jakiś sposób zniekształcone. Jednak masz wrażenie, że czytając tę książkę, rozwiązanie „bitowe” było w tym czasie powszechne (a zatem wykonalne), ale inżynierowie uznali go za nieatrakcyjny, być może ze względów estetycznych. Książka sprawia również, że stworzenie projektu bez odrobiny trybu wydaje się niezwykle trudnym zadaniem, które w jakiś sposób zostało przezwyciężone przez ten konkretny zespół.
Znalazłem ten opis, w jaki sposób został osiągnięty:
http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt
Wydaje się, że w zasadzie chodzi o wykorzystanie wcześniej nieużywanej części przestrzeni opcode na nowe instrukcje. Muszę przyznać, że byłem trochę rozczarowany, że to „właśnie to”. Myślę też, że nadal pozostawia to kilka pytań bez odpowiedzi:
Po pierwsze, jak przebiegły 16-bitowe procesy w 32-bitowej przestrzeni adresowej? Ponieważ uważam, że jest to kluczowe wyzwanie w tworzeniu rozszerzenia 32-bitowego „bez bitu trybu”. Z drugiej strony rozszerzenie zestawu instrukcji jest stosunkowo częstym przedsięwzięciem. Ponieważ nie ma opisu tego, jak to się stało, można założyć, że 16-bitowy kod po prostu uzyskuje dostęp do pamięci, jak zawsze, może widzi jakiś rodzaj zwirtualizowanego / zapisanego w pamięci widoku pamięci (z nowymi rejestrami CPU kontrolującymi, gdzie jest pierwszy adres) lub coś w tym stylu. Ale nie wiem, czy jest w tym coś więcej. W takim przypadku można argumentować, że było to rozwiązanie typu „bit trybu”. Procesy w trybie 16-bitowym mogą działać równolegle z innymi procesami dzięki specjalnym funkcjom dodanym do procesora.
Po drugie, dlaczego tak atrakcyjna była maszyna bez bitu trybu? Wiele korzyści opisanych w książce polega na tym, że klienci chcieli uruchomić stare oprogramowanie. Ale to nie wydaje się przemawiać przeciwko bitowi trybu, ponieważ jedynym celem użycia bitu trybu jest zgodność wsteczna. Kiedy AMD rozszerzyło x86 do 64-bitów, przynajmniej zgodnie z moim zrozumieniem słowa „bit trybu”, dokładnie zrobili, aby dodać bit trybu. Specjalny bit, który sprawiłby, że procesor byłby w trybie 64-bitowym. I kolejny bit, który sprawiłby, że proces byłby wykonywany w „trybie podrzędnym” trybu 64-bitowego (aby umożliwić zgodność z aplikacjami 32-bitowymi). Istotą tego podtrybu jest to, że procesor interpretuje strumień instrukcji jako stare 32-bitowe instrukcje, ale 32-bitowe dostępy do pamięci są rozwiązywane przy użyciu nowego formatu tabel stron (konfigurowanego przez 64-bitowy system operacyjny) i ostatecznie odwzorowany na pełną fizyczną przestrzeń adresową. Ponadto kod 32-bitowy można zablokować za pomocą kodu 64-bitowego. Podobnie jak rozwiązanie Data General, pozwalało to również 32-bitowemu programowi działać pod programami 64-bitowymi (16-bitowy vs 32-bitowy w przypadku DG). Z punktu widzenia klienta wydaje się, że nie ma żadnej różnicy. Stąd jedyną korzyścią mogła być implementacja, uproszczenie projektu, ale książka nie wydaje się, aby brzmiało to tak, ponieważ jest to problem, ponieważ tryb trybu wydawał się być powszechny nawet w tym czasie (i wydaje się, że później architektury również zastosował go, jak pokazuje przypadek x64).
Jestem pewien, że coś przeoczyłem, więc byłoby wspaniale, gdyby ktoś mógł omówić więcej szczegółów technicznych i zalet tego projektu „bez trybu bitowego”.