x86架構實模式和保護模式

2021-09-27 03:59:26 字數 1361 閱讀 5834

實模式——real model

保護模式——protected model

cs(code segment)——**段

ds(date segment)——資料段

es(extra segment)——附加段

ss(stack segment)——棧段

保護模式又稱虛擬位址保護模式,與之相對的是實模式

保護模式是在80286系列開始實現的一種cpu操作模式。在此之前,只有實模式。但是為了保持向前相容,即在新的處理器上依然能夠執行老的軟體和系統,所以在現代的計算機上電後,系統會首先執行在實模式下,然後再轉換為保護模式。

實模式的記憶體定址方式:分段定址(段基址*16+段內偏移)

因為在16位cpu中暫存器只有16位,及最大只可以定址216=64k 的空間,然而cpu的位址線卻有20根,即最大可支援220=1m的位址空間,所以為了能夠讓cpu利用更大的記憶體空間,就需要採用分段定址的方式,即把1m的記憶體分為許多段(最大為64k),在段基址暫存器中存放段基位址,而在段內偏移暫存器中存放段內偏移量,在定址時,就把cs<<4+ip,即可得到實際記憶體位址。

保護模式與實模式的最大區別是:

如前所述,保護模式可以利用更大的記憶體空間,所以,定址方式要更複雜一些,在cs、ds、es、ss四個段暫存器上又新增了兩個輔助段暫存器(這兩個段暫存器的性質與es是一樣的,所以沒有全稱,命名方式也只是根據現有cs\ds\es,新增fs\gs而已)。並且為了實現保護模式(訪問限制),段暫存器的作用也與實模式中不同,不再是乙個單純的段基址,而是變成了指向乙個資料結構的指標,在該資料接收中記錄著段基位址和訪問許可權等資訊。

定址方式有:

這裡的分段與實模式中的分段模式不一樣,因為在保護模式中,記憶體空間很大,需要通過各種表來記錄每個段的位址。然後在這個表中找到目標段的基位址。

實模式:奇葩的存在

因為在x86架構的系列晶元中,最開始只有16位的cpu,其就是執行在16位模式下,也就是實模式。然後從80286開始推出了32位cpu,硬體效能有了很大的提高,新增了很多功能,相應的就推出了32位的保護模式。但是對於當時的絕大多數軟體來說只能執行在16位模式下。因此,需要對16位軟體進行向前相容。所以在32位的cpu中保留了16位cpu的能力,最直觀的表現就是在32位的8個通用暫存器中有四分之一是依然是16位暫存器,連名字都沒有變。可以說是在16位cpu的暫存器上進行了擴容。所以在32位cpu上依然可以執行16位的程式和系統。為了相容16位程式,就開發出了虛擬8086模式,該模式記憶體定址模式與實模式一樣。為了相容16位系統,就在開機時依然採用實模式,這樣,如果執行16位系統的話就直接執行在實模式下。如果執行的是32位系統,在上電時,使用實模式啟動基礎功能,然後轉換為保護模式以啟用32位cpu的更多功能。

x86保護模式筆記

以下為自己的總結的x86保護模式知識 x86虛擬位址空間64tb,通過分段 分頁對映到物理記憶體。而linux 實際上只是有限的使用了分段機制 比如使用了段的特權級保護 並沒有利用分段機制實現虛擬化,所以linux下每個程序的虛擬空間,或者說程式設計空間只有4gb,而不是64tb。假設現在我們要利用...

X86保護模式程式設計總結(1)

系統設計的步驟 1,初始化相關硬體.並裝入系統.2,取得並測試相應硬體的引數.並初始化如x387等硬體.3,載入gdt到gdtr 第乙個描述符必須為0,至少需要乙個 段和乙個資料段 4,載入idt到idtr 必須先關中斷,載入完後可開啟 5,設定cr0中pe 1 也可和pg位一起設,並用jmp大跳 ...

X86保護模式程式設計總結(4)

cpu標識 eflage標誌位 8086cpu 第12 15位始終置位 intel286cpu 在實模式下,12 15位始終清除 32位cpu 在實模式下,第15位始終清除,第12 14位具有最後被裝入的值.在保護模式下,第14位具有最後被裝入的值,第15位被清除.第18位 intel486和pen...