剛剛看了別的博文,才知道不是只有系統呼叫才切換到核心態,還有別的操作可以切換到核心;
這是使用者態程序主動要求切換到核心的一種方式,使用者態程序通過系統呼叫申請使用作業系統提供的的服務完成工程的過程,比如fork()實際上就是執行了乙個建立新程序的系統呼叫。而系統呼叫的機制其核心還是使用了作業系統為使用者特別開放了乙個中斷來實現的,例如linux的int&0x80中斷。
當cpu在執行使用者態下的程式的時候,發生了某些事先不可知的異常,這是會觸發由當前執行的程序切換到處理此異常的相關程式中,也就轉到了核心態,比如缺頁異常。
當外圍裝置完成使用者的請求操作的操作後,會向cpu傳送相應的中斷訊號,這是cpu會暫停執行下一條即將要執行的指令從而轉向去執行與中斷訊號對應的處理程式,如果先前執行的指令是在使用者態下執行,那麼這個轉換的過程自然也就由使用者態轉到核心態的切換。比如硬碟的讀寫操作完成,系統會切換到硬碟讀寫的中斷處理程式中執行後續操作等。
這3種方式是系統在執行時由使用者態轉到核心態的最主要方式,其中系統呼叫可以認為是使用者程序主動發起的,異常和外圍裝置中斷則是被動的。
參考資料:
從使用者態切換到核心態
在linux系統中,每個系統呼叫被賦予乙個系統呼叫號。這樣通過這個系統呼叫號就可以關聯系統呼叫。當使用者空間執行的程序執行乙個系統呼叫的時候,這個系統呼叫號就告訴核心需要呼叫哪個。核心記錄了系統調表中所有已註冊過的系統呼叫的列表,這個表為每乙個有效的系統呼叫指定了唯一的系統呼叫號。使用者空間程式無法...
使用者態切換到核心態(May 22)
一般來講,從使用者態切換到核心態主要通過以下方式 1.系統呼叫 windows int 0x2e,linux int 0x80 2.中斷 3.異常 4.裡直接int 0x3 除錯斷點 5.彙編指令 sysenter sy it 1.系統呼叫 windows ntstatus stdcall ntre...
init程序如何從核心態切換到使用者態
大家都知道如何產生乙個新的程序。通過sys fork,之後再呼叫 sys execve 系統初啟後 核心態 的第乙個使用者態程序是init。這要涉及到內層 特權級高 向外層 特權級低 轉移的問題。通常情況下,核心是不會呼叫使用者層的 要想實現這逆向的轉移,一般做法是在使用者程序的核心棧 tss es...