2011-04-07 95 views

回答

4

我覺得地址空間segment

在真實模式下(intel的XT和286)段只是一種使程序獨立於內存空間的方法。當一個程序被編譯時,地址(可變參數,標籤 - 函數)被硬編碼到一個程序中。 - 這樣就很難同時加載兩個程序,因爲它們都希望使用相同的地址。

我們需要使用相對地址而不是絕對個。相對和物理地址之間的分辨率是相對於進行的。如果從段0x200開始加載一個程序,並且從0x600開始加載另一個程序,則它們可以自由使用相同的地址(例如0x41),因爲這將相對於它們各自的段。在我們的情況下(實模式),段0x200將被轉換爲物理地址0x2000(通過將其乘以0x10),並且在添加相對地址後,生成的物理地址將爲0x2041

有很多可以使用的段。數據操作默認是相對於程序的數據段(保存在CPU的DS寄存器中)並且代碼操作是相對於代碼段(保存在CS寄存器中)進行的。使用堆棧段SS寄存器)將堆棧地址解析爲物理地址。

但是在實模式下,您可以自由使用這些段,您可以訪問其他程序的段或輸入任意值,這些值將被解析爲任意物理地址。

在保護模式下,整個概念發生了變化。細分受衆羣不再擁有地址。他們持有選擇器。它們只能引用表中保存真實基地址的元素。該表還包含限制,因此您不能再尋址任何物理地址,只能在由操作系統提供給您的程序的內存部分內。這引入了進程對內存塊所有權的概念。

我認爲這已經足夠了,請隨時閱讀Wikipedia或其他好消息。這個話題很有文獻記載。