3 處理器模式切換
4系統任務與使用者程序
1 程序上下文與中斷上下文
程序上下文所謂的「程序上下文」,就是乙個程序在執行的時候,cpu的所有暫存器中的值、程序的狀態以及堆疊上的內容(暫存器位於cpu上,速度快,堆疊位於記憶體上,速度慢),當核心需要切換到另乙個程序時,它需要儲存當前程序的所有狀態,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。
中斷上下文所謂的「中斷上下文」,其實也可以看作就是硬體
為了讓核心處理中斷
而傳遞過來的這些引數和核心需要儲存的一些其他環境(主要是當前被中斷的程序環境)。
2 程序上下文切換
2.1 概念
乙個cpu看上去都像是在併發的執行多個程序,這是通過處理器在程序間切換來實現的。
作業系統實現這種交錯執行的機制稱為上下文切換。
2.2 步驟
即儲存舊程序的上下文(修改舊程序的pcb資訊,將舊程序的pcb加入相關佇列),選擇乙個將要執行的程序(修改被選中程序的pcb資訊,為其設定位址空間),恢復新程序的上下文。
如果現在有兩個併發的程序:外殼程序和hello程序。3 處理器模式切換開始只有外殼程序在執行,即等待命令列上的輸入,當我們讓他執行hello程式時,外殼通過呼叫乙個專門的函式,即係 統呼叫,來執行我們的請求,系統呼叫會將控制權傳遞給作業系統。
作業系統儲存外殼程序的上下文,建立乙個新的hello程序及其上下文,然後將控制權傳遞給新的hello程序。
hello程序終止後,作業系統恢復外殼程序的上下文,並將控制權傳回給他,外殼程序將繼續等待下乙個命令列輸入。
很明顯,此處的新、舊程序均為外殼程序,將要執行的程序是hello程序
3.1 概念
這兩種模式(使用者態和核心態)在類 unix 系統中共存意味著當系統呼叫發生時 cpu 切換到核心態是必要的。這應該叫做模式切換而不是上下文切換,因為沒有改變當前的程序。
3.2 步驟
①儲存被中斷的處理器現場資訊
②處理器從使用者態->核心態
③如果處理中斷,可根據所規定的中斷級別設定中斷遮蔽位
④根據系統呼叫號或中斷號,從系統呼叫表或中斷入口位址表中找到系統服務例程或中斷處理程式的位址
4系統任務與使用者程序
系統任務是核心態執行作業系統**的程序,使用者程序是使用者態執行作業系統**的程序,二者並無本質上的區別,只是稱呼不同!
上下文切換
1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...
上下文切換
上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...
上下文切換
vmstat cs 每秒上下文切換次數 的疑惑 in 每秒cpu中斷次數 shell vmstat 1 procs memory swap io system cpu r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 45939...