DOS作業系統中的記憶體管理
如下圖所示,DOS作業系統運行於真實模式中,8086處理器的定址空間只用1MB,系統硬體使用的記憶體安排在從A1000開始的記憶體高階,在系統低端,即00000h-00500h則是中斷向量表和BIOS資料區。剩下的大約640KB的記憶體才是操作
系統和應用程式所能使用的,這就是“640KB”限制,在這640KB中,DOS作業系統佔據了低端的一部分,剩餘的才是應用程式可用的,大約有600KB。
DOS作業系統下可直接使用的記憶體與電腦的記憶體無關,即使電腦的記憶體遠遠高於1M,如果使用DOS作業系統,那麼可以直接使用的記憶體也只有640KB。1M以上的記憶體要通過記憶體管理工具才能使用。在windows95之後的作業系統已經不存在這種記憶體限制了。
0-640KB的這部分記憶體稱為常規記憶體(Conventional Memory)。在DOS下,一般的應用程式只能使用系統的常規記憶體,因而都要受到640KB記憶體的限制。而且由於DOS本身和 config.sys檔案中的安裝的裝置驅動程式和autoexec.bat檔案中執行的記憶體駐留程式都要佔用一些常規記憶體,所以應用程式能使用的常規記憶體是不到640K的。
從A0000h到FFFFFh這部分記憶體大約有384KB的記憶體稱為高階記憶體(Upper Memory)。程式一般不能使用這個記憶體區域,但是EMM386.exe可以啟用高階記憶體的一部分,並且它允許使用者將某些裝置驅動程式和使用者程式用Devicehigh
在DOS下主要有以下兩種增加記憶體的方式。
擴充記憶體(Expanded Memory):是一種早期的增加記憶體的標準,最多可擴充到32M。使用擴充記憶體必須在計算機中安裝專門的擴充記憶體板,而且還要安裝管理擴充記憶體板的管理程式。由於擴充記憶體是在擴充套件記憶體之前推出的,所以大多數程式都被設計成能使用擴充記憶體,而不能使用擴充套件記憶體。由於擴充記憶體使用起來比較麻煩,所以在擴充套件記憶體出現後不久就被淘汰了。
擴充套件記憶體(Extended Memory):只能用在80286或更高檔次的機器上,目前幾乎所有使用DOS的機器上超過1M的記憶體都是擴充套件記憶體。擴充套件記憶體同樣不能被DOS直接使用,DOS5.0以後提供了Himem.sys這個擴充套件記憶體管理程式,我們可以通過它來管理擴充套件記憶體。emm386.exe可以把擴充套件記憶體(XMS)模擬成擴充記憶體 (EMS),以滿足一些要求使用擴充記憶體的程式。
最後再強調一下,不管擴充記憶體或擴充套件記憶體有多大,DOS的應用程式只能在常規記憶體下執行。有的程式可以通過DOS擴充套件器(比如DOS4GW.exe等程式)使CPU進入保護模式,從而直接訪問擴充套件記憶體;但是要注意,進入保護模式以後,計算機就脫離了DOS狀態。