物理地址、線性地址、虛擬地址(1)

                                    物理地址、線性地址、虛擬地址

OS充分挖掘硬件潛能。

    OS開發者需要知道物理內存的地址也需要提供一套機制爲應用程序員提供另一個內存空間,這個內存空間的大小可以和實際的物理內存大小之間沒有關係。

 

物理地址:物理內存條所提供的內存空間,每個內存單元的實際地址就是物理地址。

線性地址:一段連續的、不分段的範圍從0到4GB的地址空間,一個線性地址就是線性地址空間的一個絕對地址。

虛擬地址:應用程序員看到的內存空間,其中的地址就是虛擬地址,一般用段:偏移量的形式來描述。

 

mov ax,[1024];

        實模式下,把某一個寄存器左移四位然後與16位偏移量[1024]相加。相加後的結果就是物理地址而1024就是虛擬地址。

        在保護模式下就不是了,保護模式下需要一個MMU(內存管理單元)硬件,MMU的功能是將虛擬地址映射爲物理地址。MMU是一個硬件電路包含兩部分,分段部件和分頁部件。分段機制把一個虛擬地址映射爲線性地址,而分頁部件將線性地址映射爲物理地址。

分段機制

        程序中的虛擬地址表示爲選擇符:偏移量這樣的形式。

        把一個虛擬地址轉化爲線性地址的步驟:

(1)在段寄存器中裝入段選擇符,同時把32位地址的偏移量裝入某個寄存器。

(2)根據段選擇符中的索引值,TI值RPL值,再根據相應描述符中的段地址和段界線,進行一系列合法性檢查如果該段無問題就取出相應的描述符放入段描述符高速緩衝寄存器中。

(3)將段描述符中的32位段地址和放在寄存器中32位有效地址相加就形成32位線性地址。

對段進行保護從兩個方面:

(1)如果偏移量大於段界線,虛擬地址將沒有意義,系統產生保護異常。

(2)如果要對一個段進行訪問,系統會根據段的保護屬性檢查訪問者是否具有訪問權限。如果沒有則產生異常。

        爲了實現虛擬地址到線性地址的映射需要一個數據結構來描述段,這個數據結構就是段描述賦,它裏面包含三部分:1.短的基地值(在線性地址中間段的起始地址)2.短的界線(在虛擬地址空間中,段內可以使用的最大偏移量)3.段的保護屬性(表示段的特性,比如段是否可被讀出或者寫入,或者該段是否最爲一個程序來執行以及段的特權及等)

        段描述賦組成的表叫段表,其中的表項就是段描述符。段描述符就是描述段屬性的一個8字節的存儲單元。一個段描述符中有32位段基地值和20位段界線等等一些其他的段的屬性。

        在保護模式下,有三種類型的描述符表。全局描述符表(GDT)/中斷描述符表(IDT)/局部描述符表(LDT)。爲了加快對描述符表的訪問專門設計了專門的寄存器GDTR/LDTR/IDTR以存放表的基地值及表的長度界線。

        在保護模式下段寄存器中存放的是段描述符表的索引。索引表示的是段描述符在段描述符表中的位置,把段寄存器也叫選擇符。選擇符(即段寄存器)由三個域,第一個是索引域,第二個是TI爲選擇域,決定從全局描述符表還是局部描述符表中選擇相應的段描述符。第三個域是RPL域決定請求者的特權及,一般是用戶太和內核太兩種。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章