DOS 如何在運行實模式平面記憶體模型程式後恢復?

DOS 如何在運行實模式平面記憶體模型程式後恢復?

讓我們回到20世紀70年代和80年代。透過實模式平面記憶體模型,程式可以完全控制 64K 記憶體。這意味著,在 DOS 啟動它之後,該程式可以覆蓋 DOS 所在的記憶體以及任何其他程式。

那麼,程式退出後,DOS是如何「返回」的呢?

答案1

首先,最初的 IBM DOS 於 1981 年隨最初的 IBM 5150 PC 一起發布,儘管它所基於的 CP/M 作業系統在 70 年代就已存在。

我認為描述它的最好方法是 DOS 將其主記憶體(“瞬態程式區”或 TPA)視為堆疊。

通常載入的第一個程式是 COMMAND.COM,它位於底部。 COMMAND.COM 可以要求 DOS 載入並將控制權交給另一個程式 - 二進位檔案被放置到 COMMAND.COM 結束的記憶體中。我想 DOS 為此目的維護了一個「空閒記憶體的起始」指標。當二進位檔案執行 DOS 呼叫來終止時,DOS 會遞減空閒記憶體指針,並且記憶體被「回收」。

由於您一次只執行一個程序,因此無需擔心此方案中存在漏洞或碎片。

DOS 確實支援 TSR,即可以終止並保持常駐的程式。因此,在這種情況下,DOS 在返回之前不會遞減該指針,並且程式將保留在記憶體中。如果沒有特殊的第三方實用程序,則無法刪除它。 TSR 可以掛接 DOS 函數或系統中斷,從而實現有限的多工處理。這關於 TSR 的維基百科文章提供更詳細的資訊。

但是,是的,沒有記憶體保護,因此任何程式都可以隨時銷毀整個 RAM,包括 DOS 所在的位置。在這種情況下,執行 DOS 返回呼叫將會崩潰或行為無法預測。該計劃取決於程序的合作,並且沒有強制執行。您甚至可以完全覆蓋 DOS,這就是該LOADLIN程式的作用 - 它是 DOS 的 Linux 載入程式。我認為Netware也是如此,它使用DOS啟動,但基本上Netware作業系統在載入時取代了RAM中的DOS。

相關內容