核心態

在處理器的存儲保護中,主要有兩種許可權狀態,一種是核心態(管態),也被稱為特權態;一種是用戶態(目態)。核心態是作業系統核心所運行的模式,運行在該模式的代碼,可以無限制地對系統存儲、外部設備進行訪問。

基本介紹

  • 中文名:核心態
  • 又稱:特權態
  • 類型作業系統核心所運行的模式
  • 相關:無限制地對系統存儲
  • 功能外部設備進行訪問
簡介,用戶態切換到核心態的3種方式,

簡介

微核作業系統基於安全與優雅的考慮,試圖將運行在特權態的代碼數量最小化。
x86結構很特別地具有四種特權等級,特權級別最高的是ring 0,被視作核心態;級別最低的是ring 3,常被看作用戶態;rings 1 and 2則很少被使用。
386及以上的CPU實現了4個特權級模式(WINDOWS只用到了其中兩個),其中特權級0(Ring0)是留給作業系統代碼,設備驅動程式代碼使用的,它們工作於系統核心態;而特權極3(Ring3)則給普通的用戶程式使用,它們工作在用戶態。運行於處理器核心態的代碼不受任何的限制,可以自由地訪問任何有效地址,進行直接連線埠訪問。而運行於用戶態的代碼則要受到處理器的諸多檢查,它們只能訪問映射其地址空間頁表項中規定的在用戶態下可訪問頁面的虛擬地址,且只能對任務狀態段(TSS)中I/O許可點陣圖(I/O Permission Bitmap)中規定的可訪問連線埠進行直接訪問(此時處理器狀態和控制標誌暫存器EFLAGS中的IOPL通常為0,指明當前可以進行直接I/O的最低特權級別是Ring0)。以上的討論只限於保護模式作業系統,象DOS這種實模式作業系統則沒有這些概念,其中的所有代碼都可被看作運行在核心態。既然運行在核心態有如此之多的優勢,那么病毒當然沒有理由不想得到Ring0。處理器模式從Ring3向Ring0的切換髮生在控制權轉移時,有以下兩種情況:訪問調用門的長轉移指令CALL,訪問中斷門或陷阱門的INT指令。具體的轉移細節由於涉及複雜的保護檢查和堆疊切換,不再贅述,請參閱相關資料。現代的作業系統通常使用中斷門來提供系統服務,通過執行一條陷入指令來完成模式切換,在INTEL X86上這條指令是INT,如在WIN9X下是INT30(保護模式回調),在LINUX下是INT80,在WINNT/2000下是INT2E。用戶模式的服務程式(如系統DLL)通過執行一個INTXX來請求系統服務,然後處理器模式將切換到核心態,工作於核心態的相應的系統代碼將服務於此次請求並將結果傳給用戶程式
UNIX系統把執行狀態(UNIX核心為進程設定了9種狀態:執行,就緒,睡眠,“創建”與“僵死”,“被搶占”等)分為兩種:一種是用戶態執行,表示進程正處於用戶狀態之中執行;另一種是核心態執行,表示一個套用進程執行系統調用後,或I/O中斷、時鐘中斷後,進程便處於核心態執行。
這兩種狀態的主要差別是: 處於用戶態執行時,進程所能訪問的記憶體空間和對象受到限制,其所處於占有的處理機是可被搶占的 ; 而處於核心態執行中的進程,則能訪問所有的記憶體空間和對象,且所占有的處理機是不允許被搶占的。

用戶態切換到核心態的3種方式

(1) 系統調用這是用戶態進程主動要求切換到核心態的一種方式,用戶態進程通過系統調用申請使用作業系統提供的服務程式完成工作。而系統調用的機制其核心還是使用了作業系統為用戶特別開放的一個中斷來實現,例如Linux的int 80h中斷。
(2) 異常當CPU在執行運行在用戶態下的程式時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的核心相關程式中,也就轉到了核心態,比如缺頁異常。
(3) 外圍設備的中斷當外圍設備完成用戶請求的操作後,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程式,如果先前執行的指令是用戶態下的程式,那么這個轉換的過程自然也就發生了由用戶態到核心態的切換。比如硬碟讀寫操作完成,系統會切換到硬碟讀寫的中斷處理程式中執行後續操作等。
這3種方式是系統在運行時由用戶態轉到核心態的最主要方式,其中系統調用可以認為是用戶進程主動發起的,異常和外圍設備中斷則是被動的。
具體的切換步驟:
① 從當前進程的描述符中提取其核心棧的ss0及esp0信息。
②使用ss0和esp0指向的核心棧將當前進程的cs,eip,eflags,ss,esp信息保存起來,這個過程也完成了由用戶棧到核心棧的切換過程,同時保存了被暫停執行的程式的下一條指令。
③ 將先前由中斷向量檢索得到的中斷處理程式的cs,eip信息裝入相應的暫存器,開始執行中斷處理程式,這時就轉到了核心態的程式執行了。

相關詞條

熱門詞條

聯絡我們