在實模式下,經過段部件的處理,直接輸出的就是實體地址,cpu可以直接用此位址訪問記憶體。
在保護模式下: 稱為線性位址,不過此時段基址已經不是真正的位址,而是乙個稱為選擇子。它本質是個索引,類似於陣列下標,通過這個索引便能在gdt中找到相應的段描述符,在該描述符中記錄了該段的起始、大小等資訊,這樣便得到了段基址。當沒有開啟位址分頁功能時,此線性位址就被當作實體地址來用,可直接訪問記憶體;若開啟了分頁功能,此線性位址就是虛擬位址(虛擬位址、線性位址在分頁機制下是乙個概念)。
這是因為最終的位址是由段基址+段內偏移位址組合而成的,由於段基址已經有預設值了,要麼在實模式下的預設段暫存器中,要麼就是在保護模式下的預設段選擇子暫存器指向的段描述符中,所以只要給出段內偏移位址就行了。
總結:線性位址、虛擬位址都不是真實的記憶體位址,他們都是用來描述程式或任務的位址空間。由於分頁功能是需要在保護模式下開啟的,32位系統保護模式下的定址空間是4gb,所以虛擬位址或者線性位址就是0~4gb的範圍。
轉換過程如下:
線性位址給cpu看的 。cpu不需要知道有多少外設,什麼種類的外設,反正它都是用位址來訪問,線性位址能讓cpu把任何裝置當成記憶體。
邏輯位址是給程式的,不需要知道硬體是怎麼設計的。
實體地址是給實際的硬體看的。
邏輯位址要經過作業系統轉換成線性位址給cpu,cpu發出線性位址給mmu再將線性位址進行轉換得到實體地址去訪問裝置。
當cpu在保護模式下時,必分段,在由實模式轉到保護模式前,必須設定段描述符表和gdt,段描述符存在段描述符表中,此時gdtr使用的是肯定是實體地址【實模式下都是段:偏移形成實體地址,gdtr中32位基址可以直接儲存實模式下任何位址】;然後在開啟cr0暫存器標誌位則進入保護模式;因為保護模式要用到段描述符表gdt,用gdtr找到它,最終才能找到段基址。
進入保護模式後:【開啟分頁後需要再重新更新gdt,此時gdtr使用的是線性位址】
1、未開啟分頁時,在保護模式下的 線性位址= 段描述符表中的基址【段選擇子】 + 偏移【邏輯位址】= 實體地址;
2、開啟分頁時,在保護模式下的 線性位址= 段描述符中的基址【段選擇子】 + 偏移【邏輯位址】,由於大部分段描述符中的基位址為0,所以此時的線性位址=程式的邏輯位址,這時候cpu需要將線性位址經過cpu內部mmu轉換為實體地址才能訪問記憶體;
cr3儲存頁目錄位址【實體地址】,如果儲存的是線性位址的話,這樣的話就會遞迴,因為線性位址轉實體地址必須要用到cr3才能找到頁目錄首位址。
物理 線性 虛擬 邏輯 有效位址
在實模式下,經過段部件的處理,直接輸出的就是實體地址,cpu可以直接用此位址訪問記憶體。在保護模式下 稱為線性位址,不過此時段基址已經不是真正的位址,而是乙個稱為選擇子。它本質是個索引,類似於陣列下標,通過這個索引便能在gdt中找到相應的段描述符,在該描述符中記錄了該段的起始 大小等資訊,這樣便得到...
實體地址 虛擬位址 邏輯位址 線性位址
實際計算機的物理記憶體的位址,為32位或者64位。常見的記憶體條就是一類ram 隨機儲存儲存器,特點就是加電狀態下可任意讀寫,斷電後資訊消失 現代os都提供一技術 虛擬記憶體 virtual memory 它可以使給使用者錯覺好像自己在使用比實際物理記憶體大得多的記憶體,實際上通過對映把虛擬記憶體的...
實體地址 虛擬位址 線性位址以及邏輯位址
是記憶體中的記憶體單元實際位址,是記憶體中每個記憶體單元的編號,這個編號是順序排好的,實體地址的大小決定了記憶體中有多少個記憶體單元,實體地址的大小由位址匯流排的位寬決定。虛擬位址是cpu保護模式下的乙個概念,保護模式是80286系列和之後的x86相容cpu操作模式,在cpu引導完作業系統核心後,作...