作業系統學習(八) 段級保護

2022-02-22 08:10:03 字數 2646 閱讀 9197

在保護模式下,80x86提供了段級和頁級保護機制。這種保護機制根據特權級提供了對某些段和頁面的訪問限制能力。例如,作業系統**和資料存放在要比普通應用程式具有搞特權級的段中。此後處理器的保護機制將會限制應用程式只能按照受控制的和規定的方式訪問作業系統的**和資料。

當使用保護機制時,每個記憶體引用都將受到檢查以驗證記憶體引用是否符合各種保護要求。因為檢查操作是與位址變換同時並行操作,所以處理器效能並沒有受到影響。所有違反保護的操作都將導致產生乙個異常。所進行的保護檢查可分為以下幾類:

段描述符的段限長字段用於防止程式或過程定址到段外記憶體位址。段限長的有效值依賴於顆粒度g標誌的設定狀態。對於資料段,段限長還與標誌e(擴充套件方向)和標誌b(預設棧指標大小和/或上界限)。e標誌是資料段型別的段描述符在型別欄位的乙個位元位。

當g標誌清零時(位元組顆粒度),有效的段長度是20位的段描述符中段限長字段limit的值。在這種情況下,limit的範圍從0到0xfffff(1mb)。 當g標誌置位時(4kb頁顆粒度),處理器把limit欄位的值乘上乙個因子4k,在這種情況下,有效的limit範圍是從0xfff到0xffffffff(4gb)。 當設定了g標誌時,段偏移的低12位不會與limit進行對照檢查。例如,當段限長limit等於0時,偏移值0到0xfff任然是有效的。

除了下擴段(向下擴充套件的段)以外的所有段型別,有效limit的值是段中允許被訪問的最後乙個位址,它要比段長度小1個位元組。任何超出段限長字段指定的有效位址範圍都將導致產生乙個一般保護異常。

對於下擴資料段,段限長具有統樣的功能,但其含義不同,這裡段限長指定了段中最後乙個不允許訪問的位址,因此在設定了b標誌的情況下,有效偏移範圍是從(有效段偏移+1)到0xffffffff;當b清零時,有效偏移範圍是從(有效段偏移+1)到0xffff。當下擴段的段限長為0時,段會有最大長度。

除了對段限長進行檢查,處理器也會堅持描述符表的長度。gdtr、idtr和ldtr暫存器中的16位限長值,處理器用它來防止程式在描述符表的外面選擇描述符。描述符表的限長值指明了表中最後乙個有效位元組。因為每個描述符是8位元組長,因此含有n個描述符項的表應該具有限長值8n-1。

選擇符可以具有0值。這樣的選擇符指向gdt表中的第乙個不用的描述符項。儘管這個空選擇符可以被載入進乙個段暫存器中,但是任何使用這種描述符引用記憶體的企圖都將產生乙個一般保護異常。

除了應用程式**和資料段有描述符以外,處理器還有系統段和門兩種描述符型別。這些資料結構用於管理任務以及異常和中斷。需要注意的是,並非所有的描述符都定義乙個段,門描述符中存放有指向乙個過程入口點的指標。段描述符在兩個地方含有型別資訊,即描述符中的s標誌和型別欄位type。處理器利用這些資訊對由於非法使用段或門導致的程式設計錯誤進行檢測。

s標誌用於指出乙個描述符是系統型別還是**或資料型別的。 type欄位另外提供了4個位元位用於定義**,資料和系統描述符的各種型別。具體檢視**,資料和系統描述符的各種型別請看這兩篇文章:

**段和資料段描述符

系統描述符型別

當操作段選擇符和段描述符時,處理器會隨時檢查型別資訊。主要在以下兩種情況下檢查型別資訊:

當乙個描述符的選擇符載入進段暫存器中。此時某些段暫存器只能存放特定型別的描述符

當指令訪問乙個段,而該段的描述符已經載入進段暫存器中。指令只能使用某些預定義的方法來訪問某些段。

處理器的斷保護機制可以識別4個特權級(或特權層),0級到3級。數值越大,特權越小。下圖說明了這些特權級如何能被解釋成保護環形式。 環中心(保留給最高端的**、資料和堆疊)用於最緊要軟體的段,通常用於作業系統核心部分;中間兩個換用於較為緊要的軟體。只使用2個特權級的系統應該使用特權級0和3。

處理器利用特權級來防止執行在較低特權級的程式或任務訪問具有較高特權級的乙個段,除非是在受控的條件下。當處理器檢測到乙個違反特權級的操作時,它就會產生乙個一般保護性異常。

為了在各個**段和資料段之間進行特權級檢測處理,處理器可以識別以下三種型別的特權級:

當前特權級cpl,cpl是當前長在執行程式或任務的特權級。它存放在cs和ss段暫存器的位0和位1中。通常,cpl等於當前**段的特權級。當程式把控制轉移到另乙個具有不同特權級的**段中時,處理器就會改變cpl。當訪問乙個一致性**段時,則處理器對cpl的設定有些不同,特權級值高於(即低特權級)或等於一致**段dpl的任何段都可以訪問一致**段。並且當處理器訪問乙個特權級不同與cpl的一致**段時,cpl並不會被修改成一致帶碼段的dpl。

描述符特權級dpl,dpl是乙個段或門的特權級。它存放在段或門描述符的dpl欄位中。在當前執行**段試圖訪問乙個段或門時,段或門的dpl會用來與cpl以及段或門選擇符中的rpl作比較。根據被訪問的段或門的型別不同,dpl也有不同的含義:

請求特權級rpl,rpl是一種賦予段選擇符的超越特權級,它存放在選擇符的位0和位1中。處理器會同時檢查rpl和cpl,以確定是否執行訪問乙個段。及時程式或任務具有足夠的特權級(cpl)來訪問乙個段,但是如果提供的rpl特權級 不足的話訪問也將被拒絕。也即如果段選擇符的rpl其數值大與cpl,那麼rpl將覆蓋cpl(即使用rpl作為檢查比較的特權級),反之亦然。即始終取rpl和cpl中數值最大的特權級作為訪問段時的比較物件。因此,rpl可以用來確保高特權級的**不會代表應用程式去訪問乙個段,除非應用程式自己具有訪問這個段的許可權(??)。

當段描述符的段選擇符被載入進乙個段暫存器時就會進行特權級檢查操作,但用於資料訪問的檢查方式和那些用於在**段之間進行程式控制轉移的檢查方式不一樣。

作業系統學習

看了幾天的資料,今天終於有時間把測試環境搭建起來。模擬機bochs nasm ultraiso 模擬機bochs的設定不難,在網上搜了些資料和參考了bochs的說明檔案,基本上就可以組建並執行起來。在網上下了個dos的映象,執行bochs從a盤啟動,之後把硬碟分割槽格式化,乙個最基礎的測試環境就完成...

作業系統學習

1 處理器硬體故障中斷事件 由處理器,記憶體儲器,匯流排等故障引起 程式性中斷事件 2 處理器執行機器指令引起 1.1 除數為零,運算元溢位等算術異常 1.3 終止程序指令 終止程序 3 自願性中斷事件 1.1 處理器執行陷入指令請求os服務引起 1.2 請求分配外設,請求io等 1.3 處理流程是...

作業系統學習筆記

這裡專門摘錄作業系統相關筆試題和面試題!也當作自己的乙個複習!乙個很全的作業系統常考知識集合 1.分段式儲存和分頁式儲存,以及段頁式儲存的區別 分頁是一維儲存,分段是二維的 因為分頁給出虛擬位址後,作業系統會自動劃分頁號和偏移量 而分段給出位址後,需要知道段號和偏移量,段的長度是可變的!故是二維的 ...