天天看點

一緻代碼段和非一緻代碼段.

一緻碼段,非一緻碼段 conforming code segment 之是以出現這個定義是因為系統要安全:核心要和使用者程式分開.核心一定要安全.不能被使用者程式幹涉. 但是有時候使用者程式也需要讀取核心的某些資料,怎麼辦呢? 于是os将核心程式開辟一些可以供用使用者程式通路的段.但是不允許使用者程式寫入資料. 1.核心不用知道使用者程式的資料.核心不用調用使用者程式的資料.核心不用轉移到使用者程式中來. 2.使用者程式隻能通路到核心的某些共享的段.我們稱這些段為一緻代碼段 3.使用者程式不能通路核心不共享的段. 1.在x86中的資料和代碼是按段來存放的:[section] 2...............程式是通過選擇子/門調用等等來在段之間來回走動的. 3.每一個選擇子/門調用選擇子是有分等級的:這個是在選擇符的結構中:RPL(最後2位) 4:每一個代碼段/資料段也是有分等級的.:這個是在gdt描述符中. 調用的選擇符和被調用的段都分了等級.那麼這些等級在哪裡使用呢?在一緻代碼段.也就是共享段中使用. 既然是共享是以就有規則了: 對于一緻代碼段:也就是共享的段. 1.特權級高的程式不允許通路特權級低的資料:核心态不允許調用使用者态的資料. 2. 特權級低的程式可以通路到特權級高的資料.但是特權級不會改變:使用者态還是使用者态. 對于普通代碼段.也就是非一緻代碼段: 0.隻允許同級間通路. 1.絕對禁止不同級通路:核心态不用使用者态.使用者态也不使用核心态. 總結:似乎這些東西跟我們初學者預想的那樣不同.核心态是老大.想用通路誰都可以.其實錯了.結果恰恰相反. 這是因為防止使用者篡改核心态的資料.導緻核心态執行使用者代碼.而造成核心崩潰. 核心壞了.什麼事都可能發生. notes:要注意特權級和特權級數的問題. 特權級數 特權級 0 系統級:特權級高 特權級數低 3 使用者級:特權級低 特權級數高