在進程間切換

在進程間切換

在前面瞭解過,運行在操作系統上的多個進程可以併發執行,而進程的併發就需要進程間進行切換。

操作系統完成進程的切換,問題來了:當一個進程正在運行,操作系統怎麼獲得CPU的控制權

操作系統重獲CPU控制權的方法

1.協作方式:等待系統調用

通過yield系統調用:這個系統調用只是將CPU的控制權交給操作系統。

或者當程序發生異常時,會陷入操作系統,操作系統再次控制CPU。

弊端:如果程序中沒有通過系統調用將控制權交給操作系統,也不會出現問題,操作系統也就沒了作用。

2.非寫作方式:操作系統進行控制

爲了解決協作方式必須顯式的進行系統調用,在硬件(時鐘設備)的幫助下,使用非協作的方式,將CPU的控制權交給操作系統。

時鐘中斷:始終設備可以隔固定的時間產生一次中斷。產生中斷時,當前正在運行的程序暫停執行,改爲執行預先配置的中斷處理程序。中斷處理程序,將CPU控制權交給操作系統

使用中斷需要的技術支持:保存和恢復上下文

當進程進行切換時,爲了保證下次切換回來時,CPU的內部寄存器(上下文)與切換之前一樣,就需要進行保存和恢復上下文。

保存和恢復上下文:假設當前進程爲A,操作系統要切換到進程B,就需要將A的各個寄存器的值保存起來;將B的上下文進行恢復。

首先直接執行協議(時鐘中斷)

操作系統@啓動時(內核模式) 硬件 程序(用戶模式)
初始化陷阱表    
  記住一以下地址:
系統調用處理程序
始終處理程序
 
啓動中斷時鐘    
  啓動時鐘
每隔x毫秒中斷CPU
 
操作系統@運行時(內核模式) 硬件 程序(用戶模式)
    進程A執行中
  時鐘中斷
保存上下文(將寄存器的值保存到內核棧)

轉向內核模式
程序計數器跳到中斷處理程序
 
執行中斷處理程序
調用switch()例程(上下文切換)
中斷返回
切換到進程B
   
  恢復B的上下文
轉向用戶模式
程序計數器跳入進程B
 
    進程B執行中

 

 

發佈了221 篇原創文章 · 獲贊 116 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章