Gehen wir zurück in die 70er und 80er Jahre. Mit einem Real-Mode-Flat-Memory-Modell hat ein Programm die volle Kontrolle über 64 KB Speicher. Das bedeutet, dass das Programm nach dem Start durch DOS den Speicher überschreiben kann, in dem sich DOS befand, sowie jedes andere Programm.
Wie konnte DOS vor diesem Hintergrund „zurückkehren“, nachdem das Programm beendet wurde?
Antwort1
Erstens wurde das ursprüngliche IBM DOS 1981 mit dem ursprünglichen IBM 5150 PC veröffentlicht, obwohl das CP/M-Betriebssystem, auf dem es basierte, bereits in den 70er Jahren existierte.
Ich denke, man kann es am besten so beschreiben, dass DOS seinen Hauptspeicher (den „Transient Program Area“ oder TPA) als Stapel behandelt.
Normalerweise ist das erste geladene Programm COMMAND.COM und es steht ganz unten. COMMAND.COM kann DOS auffordern, ein anderes Programm zu laden und die Kontrolle an ein anderes Programm zu übergeben – die Binärdatei wird dort in den Speicher gestellt, wo COMMAND.COM endet. Ich nehme an, dass DOS zu diesem Zweck einen Zeiger für den „Start des freien Speichers“ verwaltet. Wenn die Binärdatei den DOS-Aufruf zum Beenden ausführt, dekrementiert DOS den Zeiger für den freien Speicher zurück und der Speicher wird „zurückgefordert“.
Da immer nur ein Programm gleichzeitig ausgeführt wurde, bestand bei diesem Schema kein Grund zur Sorge hinsichtlich von Lücken oder Fragmenten.
DOS unterstützte TSRs, also Programme, die beendet werden und resident bleiben. In diesem Fall würde DOS diesen Zeiger also nicht dekrementieren, bevor es zurückkehrte, und das Programm würde im Speicher bleiben. Es gab keine Möglichkeit, es ohne spezielle Dienstprogramme von Drittanbietern zu entfernen. TSRs konnten sich in DOS-Funktionen oder Systeminterrupts einklinken und so begrenztes Multitasking erreichen. DieWikipedia-Artikel zu TSRsbietet ausführlichere Informationen.
Aber ja, es gibt keinen Speicherschutz, sodass jedes Programm jederzeit den gesamten RAM zerstören kann, einschließlich des DOS-Speicherorts. In diesem Fall würde die Ausführung des DOS-Return-Aufrufs abstürzen oder unvorhersehbares Verhalten zeigen. Dieses Schema hängt von der Zusammenarbeit der Programme ab und wird nicht durchgesetzt. Sie könnten DOS sogar vollständig überschreiben, das ist, was das LOADLIN
Programm tut – es ist ein Linux-Loader für DOS. Ich glaube, bei Netware war es genauso, es verwendete DOS zum Booten, aber im Grunde ersetzte das Netware-Betriebssystem DOS beim Laden im RAM.