作業系統保護模式Protected Mode

2021-06-21 11:33:49 字數 2315 閱讀 6280

保護模式,是一種80286系列和之後的x86相容

cpu操作模式。保護模式有一些新的特色,設計用來增強

多工和系統穩定度,像是 記憶體保護,

分頁系統,以及硬體支援的 虛擬記憶體。大部分的現今 x86 

作業系統

都在保護模式下執行,包含 linux、freebsd、以及 

微軟windows 2.0 和之後版本。

保護模式與實模式相對應。在80286以前,cpu只有實時模式,位址匯流排有20位,而記憶體位址是16位,也就是最多能夠訪問2^20=1m的記憶體空間。在80286及以後,記憶體位址改為16位或32位,至少可以訪問到2^32=4g的記憶體空間。但為了保證後續的cpu能夠執行舊的cpu,只能保持向下相容。因此,8

0286及以後的cpu首先進入實模式,然後通過切換機制再進入到保護模式。

保護模式與實模式相比,主要是兩個差別:一是提供了段間的保護機制,防止程式間胡亂訪問位址帶來的問題,二是訪問的記憶體空間變大,見前面的描述。

在8086/8088時代,處理器只存在一種操作模式(operation mode),當時由於不存在其它操作模式,因此這種模式也沒有被命名。自從80286到80386開始,處理器增加了另外兩種操作模式——保護模式和

系統管理模式smm(system management mode),因此,8086/8088的模式被命名為實位址模式rm(real-address mode)。

保護模式是處理器的本機模式,在這種模式下,處理器支援所有的指令和所有的體系結構特性,提供最高的效能和相容性。對於所有的新型

應用程式和作業系統來說,建議都使用這種模式。為了保證pm的相容性,處理器允許在受保護的,多工的環境下執行rm程式。這個特性被稱做虛擬8086模式(virtual -8086 mode),儘管它並不是乙個真正的處理器模式。virtual-8086模式實際上是乙個pm的屬性,任何任務都可以使用它。

rm提供了intel 8086處理器的程式設計環境,另外有一些擴充套件(比如切換到pm或smm的能力)。當主機被power-up或reset後,處理器處於rm下。

smm是乙個對所有intel處理器都統一的標準體系結構特性。出現於intel386 sl晶元。這個模式為os實現平台指定的功能(比如

電源管理或系統安全)提供了一種透明的機制。當外部的smm interrupt pin(smi#)被啟用或者從apic(advanced programming interrupt controller)收到乙個smi,處理器將進入smm。在smm下,當儲存當前正在執行程式的整個上下文(context)時,處理器切換到乙個分離的位址空間。然後smm指定的**或許被透明的執行。當從smm返回時,處理器將回到被系統管理中斷之前的狀態。

由於機器在power-up或reset之後,處理器處於rm狀態,而對於intel 80386以及其後的晶元,只有使用pm才能發揮出最大的作用。所以我們就面臨著乙個從rm切換到pm的問題。

本文不討論smm,本節的重點集中於在booting階段如何從rm切換到pm,這裡不會過多的討論pm的細節,因為《intel architecture software developer』s manual volume 3: system programming》中有非常詳盡和準確的介紹。

全域性描述表(gdt global descriptor table):在保護模式下,乙個重要的必不可少的

資料結構就是它。

為什麼要有gdt?我們首先考慮一下在實時模式下的程式設計模型:

在實時模式下,我們對乙個記憶體位址的訪問是通過segment:offset的方式來進行的,其中segment是乙個段的base address,乙個segment的最大長度是64 kb,這是16-bit系統所能表示的最大長度。

而offset則是相對於此segment base address的偏移量。base address+offset就是乙個記憶體絕對位址。由此,我們可以看出,乙個段具備兩個因素:base address和limit(段的最大長度),而對乙個記憶體位址的訪問,則是需要指出:使用哪個段?以及相對於這個段base address的offset,這個offset應該小於此段的limit。當然對於16-bit系統,limit不要指定,預設為最大長度64kb,而 16-bit的offset也永遠不可能大於此limit。我們在實際程式設計的時候,使用16-bit段暫存器cs(code segment),ds(data segment),ss(stack segment)來指定segment,cpu將段暫存器中的數值向左偏移4-bit,放到20-bit的位址線上就成為20-bit的base address。

到了保護模式,記憶體的管理模式分為兩種,段模式和頁模式,其中頁模式也是基於段模式的。也就是說,保護模式的記憶體管理模式事實上是:純段模式和段頁式。進一步說,段模式是必不可少的,而頁模式則是可選的——如果使用頁模式,則是段頁式;否則這是純段模式。

動手製作作業系統 認識實模式與保護模式

因為計算機啟動後按照實模式定址,cpu只能訪問1m的記憶體,所以為了訪問1m記憶體後更大的空間,就需要進入到保護模式,保護模式不僅有更大的位址空間,還將程式分成了4個特權級 0 4 數字越小特權級越高,在涉及特權級的操作時,處理器將會對特權級進行比較,最終允許訪問或者拒絕訪問。描述符 乙個特殊的資料...

《自己動手寫作業系統》讀書筆記 初識保護模式

書本第三章第一節是 認識保護模式 初步 講解了保護模式下全域性描述符表gdt 段描述符 段選擇子 從實模式進入保護模式等內容。去年看這個的時候,如果不是有以前學習保護模式時做的筆記,還真 不好懂呢,因為作者提供的材料不夠系統,對僅學習過8086組合語言的人來說,是不太好理解的。下面的內容大體以我以前...

作業系統學習筆記 保護模式 中斷和異常(1)

中斷和異常 中斷通常分為同步中斷和非同步中斷。同步中斷 當指令執行時由cpu控制單元產生的,稱為同步,是因為只有當一條指令終止執行後cpu才會發出中斷。非同步中斷 由其他硬體裝置依照cpu時鐘訊號隨機產生的。在inter微處理器手冊上,將同步中斷稱為異常 將非同步中斷稱為中斷。異常和中斷向量 每個需...