複製鏈接
請複製以下鏈接發送給好友

核心態

鎖定
在處理器的存儲保護中,主要有兩種權限狀態,一種是核心態(管態),也被稱為特權態;一種是用户態(目態)。核心態是操作系統內核所運行的模式,運行在該模式的代碼,可以無限制地對系統存儲、外部設備進行訪問。
中文名
核心態
又    稱
特權態
類    型
操作系統內核所運行的模式
相    關
無限制地對系統存儲
功    能
外部設備進行訪問

核心態簡介

微核操作系統基於安全與優雅的考慮,試圖將運行在特權態的代碼數量最小化。
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信息裝入相應的寄存器,開始執行中斷處理程序,這時就轉到了內核態的程序執行了。 [1] 
參考資料