系統呼叫,上下文切換及中斷概念的彙總

2021-09-19 18:28:31 字數 913 閱讀 2188

仔細揣摩了一段時間.

系統呼叫過程,使用者程序進入核心態,程序棧進入核心態棧, cpu進入核心態,cpu使用者態各暫存器的值儲存到核心態棧,執行核心態**. 執行完從核心態返回到使用者態,包括程序棧返回到使用者態棧,cpu返回到使用者態,cpu各暫存器的值用之前儲存在核心態棧的值還原.  核心在執行系統呼叫時處於程序上下文中,current指標指向當前程序,即引發系統呼叫的程序。

1 系統呼叫的過程中 可以發生程序切換(1 來自時鐘中斷,時間片用完,schedule()。2核心態**執行過程中阻塞,主動schedule() )。 

2 系統呼叫的過程中 可以發生中斷,中斷任意時刻可以發生,中斷不屬於任何乙個程序上下文. 

a 當前程序是使用者態  cpu進入核心態,使用棧進入到中斷棧,並且在中斷棧儲存使用者態各暫存器的值,執行中斷**,中斷**執行過程中 不能被阻塞, 不能被切換。執行完中斷**後,從中斷棧恢復使用者態暫存器值,cpu進入使用者態。(使用者態進入到核心棧時,該棧時空的,中斷**可以直接使用程序的核心態棧)

b 當前程序是核心態,使用棧進入到中斷棧,並且在中斷棧儲存核心態各暫存器的值,執行中斷**,執行完中斷**後,從中斷棧恢復核心態暫存器值.

c 中斷**執行時,處在中斷上下文.不屬於任何乙個程序上下文.

d 每cpu變數中會有兩個棧單獨用於中斷過程 分別用於軟中斷和硬中斷 (2.6.x版本後)

3 從核心態返回到使用者態的過程中,有很多事情都是這個環節裡面做的.

a  .檢查 need_resched,當前程序是否需要發起schedule() ,這個過程也會發生程序切換

b  會檢查所有程序是否有訊號到達(深入理解linux核心 第三版 422頁 ),  訊號的處理是在這個過程來觸發的。之前看了很多資料,都沒發現乙個可以進入訊號處理的入口. 幾乎所有的文章都是講怎麼發訊號,怎麼處理訊號.就是沒有乙個說道有訊號達到的程序是如何感知到,並且被排程.

系統呼叫,上下文切換及中斷概念的彙總

仔細揣摩了一段時間.系統呼叫過程,使用者程序進入核心態,程序棧進入核心態棧,cpu進入核心態,cpu使用者態各暫存器的值儲存到核心態棧,執行核心態 執行完從核心態返回到使用者態,包括程序棧返回到使用者態棧,cpu返回到使用者態,cpu各暫存器的值用之前儲存在核心態棧的值還原.核心在執行系統呼叫時處於...

系統呼叫 上下文 中斷

系統呼叫 在作業系統上如果想要執行你的程式,就得靠自己從面向底層硬體的 編起,但這件事太枯燥,且不是每個人都能做到,這樣作業系統就替我們做這些事情,把硬體封裝,統一提供一套介面,這些介面就是系統呼叫 系統呼叫把應用程式的請求傳給核心,當作業系統接收到系統呼叫請求後,會讓處理器進入核心模式,呼叫相應的...

作業系統 上下文切換

程序上下文是程序執行活動全過程的靜態描述。我們把已執行過的程序指令和資料在相關暫存器與堆疊中的內容稱為程序上文,把正在執行的指令和資料在暫存器與堆疊中的內容稱為程序正文,把待執行的指令和資料在暫存器與堆疊中的內容稱為程序下文。上下文切換的任務是 將cpu切換到另乙個程序需要儲存原來程序的狀態並裝入新...