使用者態和核心態的切換

2021-10-09 19:49:35 字數 449 閱讀 9120

系統呼叫:比如fork()方法,直接fork出乙個執行緒(具體的底層實現是軟體中斷,下面會講)

異常:當cpu在執行使用者空間的程式時,發生了異常,處理異常的話就必須在核心態進行處理,比如缺頁異常

外圍裝置的中斷:當進行檔案io操作完成後,硬體io裝置會向cpu發出乙個中斷訊號,如果這時候cpu正在執行使用者空間的程式,而又因為中斷會呼叫核心態的程式,所以就完成了使用者態到核心態的切換

軟體中斷 --

int$0x80

--system_call()

+ 系統呼叫號

使用者態的程式是不能直接進行系統呼叫的

使用者態的程式呼叫int&0x80這個指令來產生乙個中斷異常

這個異常會讓程式陷入核心態並且呼叫system_call()方法

再通過eax暫存器找到當前系統呼叫號,傳給system_call()完成系統能夠呼叫

核心態與使用者態切換

a.系統呼叫 這是使用者態程序主動要求切換到核心態的一種方式,使用者態程序通過系統呼叫申請使用作業系統提供的服務程式完成工作,比如前例中fork 實際上就是執行了乙個建立新程序的系統呼叫。而系統呼叫的機制其核心還是使用了作業系統為使用者特別開放的乙個中斷來實現,例如linux的int 80h中斷。b...

Linux使用者態切換核心態介紹

在linux系統中,所有中斷服務程式都屬於核心 如果乙個中斷產生時任務正在使用者 中執行,那麼該中斷就會引起cpu特權級從3級到0級的變化,此時cpu就會進行使用者態堆疊到核心態堆疊的切換操作。cpu會從當前任務的任務狀態段tss中取得新堆疊的段選擇符和偏移值。因為中斷服務程式在核心中,屬於0級特權...

從使用者態切換到核心態

在linux系統中,每個系統呼叫被賦予乙個系統呼叫號。這樣通過這個系統呼叫號就可以關聯系統呼叫。當使用者空間執行的程序執行乙個系統呼叫的時候,這個系統呼叫號就告訴核心需要呼叫哪個。核心記錄了系統調表中所有已註冊過的系統呼叫的列表,這個表為每乙個有效的系統呼叫指定了唯一的系統呼叫號。使用者空間程式無法...