在前面了解過,執行在作業系統上的多個程序可以併發執行,而程序的併發就需要程序間進行切換。
作業系統完成程序的切換,問題來了:當乙個程序正在執行,作業系統怎麼獲得cpu的控制權
通過yield系統呼叫:這個系統呼叫只是將cpu的控制權交給作業系統。
或者當程式發生異常時,會陷入作業系統,作業系統再次控制cpu。
弊端:如果程式中沒有通過系統呼叫將控制權交給作業系統,也不會出現問題,作業系統也就沒了作用。
為了解決協作方式必須顯式的進行系統呼叫,在硬體(時鐘裝置)
的幫助下,使用非協作的方式,將cpu的控制權交給作業系統。
時鐘中斷:始終裝置可以隔固定的時間產生一次中斷。產生中斷時,當前正在執行的程式暫停執行,改為執行預先配置的中斷處理程式。中斷處理程式,將cpu控制權交給作業系統
當程序進行切換時,為了保證下次切換回來時,cpu的內部暫存器(上下文)與切換之前一樣,就需要進行儲存和恢復上下文。
儲存和恢復上下文:假設當前程序為a,作業系統要切換到程序b,就需要將a的各個暫存器的值儲存起來;將b的上下文進行恢復。
作業系統@啟動時(核心模式)
硬體程式(使用者模式)
初始化陷阱表
啟動中斷時鐘
啟動時鐘
每隔x毫秒中斷cpu
作業系統@執行時(核心模式)
硬體程式(使用者模式)
程序a執行中
時鐘中斷
儲存上下文(將暫存器的值儲存到核心棧)
轉向核心模式
程式計數器跳到中斷處理程式
執行中斷處理程式
呼叫switch()例程(上下文切換)
中斷返回
切換到程序b
恢復b的上下文
轉向使用者模式
程式計數器跳入程序b
程序b執行中
程序間的狀態切換
在任意時刻下,通常只有乙個程序可以被載入到計算機的cpu上執行。任何乙個程序在它的生命週期內都會處於下面三種狀態,使用這三種狀態可以簡單描述執行在計算機上的程序之間的狀態切換,程序的一生都處在這三種狀態間相互轉換。cpu在排程程序時,只會去作業系統維護的處於就緒態的程序pcb鍊錶中排程,所以三狀態模...
作業系統的多程序組織 程序間切換
使用者使用計算機就是啟動了一堆程序 使用者管理計算機就是管理這一堆程序 即根據pcb 根據狀態形成不同的佇列放在不同的位置。多個程序如何組織呢?用pcb放在不同的佇列中 就緒 阻塞 用狀態轉化來推進多個程序的執行 排程選擇下乙個程序,得到下乙個程序的pcb,把上乙個程序的執行現場儲存起來,把下乙個程...
程序狀態與各狀態間的切換
程序的狀態簡單分為ready,running,wait。就緒,執行,等待 當程序在cpu上執行時,程序處於執行狀態,程序獲取所有必要資源,只剩下等待cpu去排程時,程序處於就緒狀態,乙個執行中的程序有時會需要等待某個事件,此時會有執行狀態變換成阻塞狀態,例如i o請求。當等待的事件發生後,狀態切換為...