Ich lese Tracy Kidders "Die Seele einer neuen Maschine", in der ein Team von Data General eine neue Maschine entwirft (Codename "Eagle", später MV / 8000 genannt). Es ist eine 32-Bit-Erweiterung einer früheren Architektur (der 16-Bit-Eclipse). Eines der sich drehenden Themen scheint zu sein, dass sie keine Maschine mit einem Modusbit erstellen wollen und dass ihnen dies gelungen ist.
Es wird jedoch nicht berücksichtigt, wie dies technisch erreicht wird, und es wird auch nicht erläutert, warum es so attraktiv war, eine Maschine ohne Modusbit zu erstellen. Das Buch ist kein technisches Buch, daher könnte es sein, dass die Details irgendwie verzerrt waren. Beim Lesen dieses Buches hat man jedoch das Gefühl, dass eine "Mode-Bit" -Lösung zu dieser Zeit üblich (und daher machbar) war, von den Ingenieuren jedoch möglicherweise aus ästhetischen Gründen als unattraktiv angesehen wurde. Das Buch lässt es auch als eine immens schwierige Aufgabe erscheinen, ein Design ohne einen Modus zu erstellen, der von diesem speziellen Team irgendwie überwunden wurde.
Ich fand diese Beschreibung, wie es erreicht wurde:
http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt
Grundsätzlich scheint es darum zu gehen, einen zuvor nicht verwendeten Teil des Opcode-Bereichs für die neuen Anweisungen zu verwenden. Ich muss zugeben, dass ich ein bisschen enttäuscht war, dass es "genau das" war. Ich denke auch, dass dies noch einige Fragen offen lässt:
Wie lebten die 16-Bit-Prozesse im 32-Bit-Adressraum? Weil ich denke, dass dies die zentrale Herausforderung bei der Erstellung einer 32-Bit-Erweiterung "ohne Modusbit" ist. Das Erweitern des Befehlssatzes ist dagegen ein relativ häufiges Unterfangen. Da es keine Beschreibung gibt, wie es passiert ist, könnte man annehmen, dass der 16-Bit-Code einfach wie immer auf den Speicher zugreift, möglicherweise sieht er eine Art virtualisierte / bankierte Ansicht des Speichers (wobei neue CPU-Register steuern, wo sich die erste Adresse befindet) oder so ähnlich. Aber ich weiß nicht, ob mehr dahinter steckt. In diesem Fall könnte man argumentieren, dass es sich irgendwie um eine "Modusbit" -Lösung handelt. Die 16-Bit-Modus-Prozesse könnten aufgrund spezieller Funktionen, die der CPU hinzugefügt wurden, neben den anderen Prozessen ausgeführt werden.
Zweitens, warum war es so attraktiv, eine Maschine ohne Modusbit zu erstellen? Viele der in diesem Buch angepriesenen Vorteile sind, dass Kunden alte Software ausführen wollten. Dies scheint jedoch nicht gegen ein Modusbit zu sprechen, da der gesamte Zweck der Verwendung eines Modusbits in der Abwärtskompatibilität besteht. Als AMD x86 auf 64-Bit erweiterte, war es zumindest nach meinem Verständnis des Wortes "Modusbit" genau das, ein Modusbit hinzuzufügen. Ein spezielles Bit, das die CPU in den 64-Bit-Modus versetzen würde. Und ein weiteres Bit, mit dem ein Prozess in einem "Untermodus" des 64-Bit-Modus ausgeführt wird (um die Kompatibilität mit 32-Bit-Anwendungen zu ermöglichen). Das Wesentliche des Submodus ist, dass die CPU den Befehlsstrom als die alten 32-Bit-Befehle interpretiert, die vorgenommenen 32-Bit-Speicherzugriffe jedoch unter Verwendung des neuen Seitentabellenformats (Einrichtung durch das 64-Bit-fähige Betriebssystem) und schließlich aufgelöst werden dem vollständigen physischen Adressraum zugeordnet. Der 32-Bit-Code kann auch durch 64-Bit-Code vorbelegt werden. Wie bei der Data General-Lösung konnte auch hier ein 32-Bit-Programm unter 64-Bit-Programmen ausgeführt werden (16-Bit gegenüber 32-Bit im DG-Fall). Aus Kundensicht scheint es also überhaupt keinen Unterschied zu geben. Daher hätte der einzige Vorteil in der Implementierung liegen können, die das Design vereinfacht, aber das Buch lässt es nicht so klingen, als wäre es das Problem, da das Modusbit selbst zu dieser Zeit als üblich angesehen wurde (und es scheint, dass spätere Architekturen dies auch getan haben) setzte es ein, wie der x64-Fall zeigt).
Ich bin mir sicher, dass ich etwas verpasst habe. Es wäre also großartig, wenn jemand mehr über die technischen Details und die Vorzüge dieses "No-Mode-Bit" -Designs diskutieren könnte.
quelle
Antworten:
Die Antwort ist, dass Ed deCastro, Präsident von Data General Management, ein Team von Ingenieuren in North Carolina gegründet hat, um speziell die CPU der nächsten Generation zu entwerfen. Er hat uns, dem Massachusetts-Team, die Aufgabe der Unterstützung und der schrittweisen Verbesserung übertragen. Dreimal haben wir eine wichtige neue Architektur vorgeschlagen, jedes Mal mit einem sehr vernünftigen Modusbit, und sie als bescheidene inkrementelle Verbesserung beschrieben. Jedes Mal durchschaute Ed unsere Verkleidung und lehnte den Vorschlag ab, in der Erwartung, dass das Team aus North Carolina erfolgreich sein würde. Ed glaubte, dass er unabhängig davon, wie wir versuchten, unsere Vorschläge zu verschleiern, wissen würde, dass es sich um eine Architektur der neuen Generation handelt, wenn sie ein Modus-Bit hat. Wir mussten also eine Architektur der neuen Generation ohne Modusbit vorschlagen, auch wenn dies weniger effizient war. So haben wir es an Ed deCastro vorbei geschafft. Siehe Die Seele einer neuen Maschine,
quelle
Theoretisch würde "kein Modusbit" es Ihnen ermöglichen, das alte 16-Bit-Betriebssystem ohne jegliche Änderungen zu verwenden, und dieses Betriebssystem könnte 32-Bit-Apps starten, obwohl die neuen 32-Bit-Apps nicht funktionieren würden 16-Bit-virtuelle Adresse, könnte also die 32-Bit-Register und neue Anweisungen verwenden, würde sich aber schlecht verhalten, wenn sie auf virtuelle Adressen zugreifen, die größer als .216
Mit einem Modusbit hätte das alte 16-Bit-Betriebssystem geändert werden müssen, um herauszufinden, ob das Programm 16-Bit oder 32-Bit war, und dann das Modusbit vor dem Starten des Programms entsprechend gesetzt.
In der Praxis scheint das MV / 8000 tatsächlich ein Modusbit zu haben. An anderer Stelle auf Mark Smothermans Webseite bei Clemson hat er die Data General, ECLIPSE MV / 8000 Principles of Operation , 1980, veröffentlicht . Wenn Sie in Anhang E (ab Seite 369) nachsehen, werden Sie feststellen, dass der MV / 8000 über zwei völlig unterschiedliche Seitentabellenmechanismen verfügt. Die spezifische Maschine, mit der der MV / 8000 abwärtskompatibel war, war die C / 350, und die C / 350 verfügte über eine spezifische 16-Bit-Speicherzuweisungs- und Schutzeinheit mit spezifischen Möglichkeiten zur Steuerung dieser Einheit. Für einen logisch-physischen 32-Bit-Betrieb schalten Sie stattdessen die Adressübersetzungseinheit ein (beschrieben in Kapitel 3 ab Seite 31).
In der Praxis bedeutet dies, dass beim Ausführen eines 16-Bit-Befehls im 32-Bit-Modus festgelegt wird, dass die hohen 16-Bit-Werte der logischen Adresse auf 0 gesetzt werden. Außerdem muss angegeben werden, was mit dem hohen Wert geschieht 16-Bit-Adresse, wenn Sie einen 32-Bit-Befehl im 16-Bit-Modus ausführen, aber ich konnte ihn während meiner kurzen Durchsicht des Handbuchs nicht finden.
Es geht also weniger darum, ob ein Modusbit eine gute oder eine schlechte Sache ist oder nicht. Es gibt mehr keinen guten Grund, ein Modus-Bit zu verwenden, um zwischen 16-Bit- und 32-Bit-Befehlen zu unterscheiden. Die 16-Bit-Befehle verwenden 16-Bit-Register für logische Adressen (wobei die hohen 16-Bit auf 0 gesetzt sind) und 16-Bit-Register, und die 32-Bit-Befehle verwenden 32-Bit-Register für logische Adressen und 32-Bit-Register. Das alte Betriebssystem "funktioniert nur" auf dem neuen Computer, aber Sie können die neuen Anweisungen auch ausprobieren, indem Sie ein neues Programm unter dem alten Betriebssystem ausführen.
quelle