2010-02-07 58 views
2

DOS下的常規內存(第640kB)包含操作系統,驅動程序和可能的一個正在執行的程序。這個記憶是如何規劃的以避免這些程序之間的衝突?例如,是否保留了該地址空間的一部分?DOS常規內存佈局

回答

4

DOS將程序加載到存儲器中,在EXE header使用信息移居存儲器引用相對於由DOS分配存儲器塊正確爲當EXE是加載。

話雖如此,沒有任何東西可以防止您的程序干擾操作系統,設備驅動程序等。您可以讀寫任何內存位置。這種技術通常用於例如通過TSR programs(重寫interrupt vector table)鉤住鍵盤,計時器,鼠標​​或類似物,然後在保留在內存中時終止。

1

在這裏查看DOS存儲器佈局here的詳細視圖。

+0

我不認爲這篇文章回答了實模式地址空間內的衝突問題。 – abc 2010-02-08 00:01:21

1
+0

很好的地圖,但我對地址0x900處的653,056字節感興趣。編譯器如何保證我的程序(以實模式運行)不會與驅動程序發生衝突? – abc 2010-02-07 23:51:55

+1

DOS本身將您的程序加載到可用內存的底部,並且您有剩餘的可用內存供自己使用(因爲DOS不是多任務處理)。驅動程序,TSR等將被分配內存,這會提升程序加載到的「內存底部」,或切入內存頂部(BIOS擴展通常會這樣做)。如果您使用的是C編譯器,它會向DOS請求可用內存,如果您使用匯編程序進行編譯,則第二個16位字將在您的程序 http://docs.huihoo上保留預留內存段。 com/help-pc/table-Program_Segment_Prefix.html – 2010-02-08 03:10:49

+0

+ vote。這個評論和埃裏克J.的回答是我正在尋找的。謝謝。 – abc 2010-02-08 19:37:21