CPU上下文切換

LINUX任務運行前,CPU都要知道從任務從哪裏加載、又從哪裏開始運行,也就是說,需要系統事先幫它設置好CPU寄存器和程序計數器
CPU上下文:CPU寄存器和程序計數器
CPU寄存器:
CPU內置容量小、速度極快的內存
程序計數器:
存儲CPU正在執行的指令位置、或者即將執行的下一條指令位置

CPU上下文切換-負載升高

把前一個任務的CPU上下文保存起來,然後加載新任務的上下文到這些寄存器和程序計數器,最後在跳轉到程序計數器所指的位置
類別:進程上下文切換、線程上下文切換、中斷上下文切換
**進程上下文切換:**LINUX按照特權等級,把進程的運行空間分爲內核空間和用戶空間,分包對應下圖,從一個進程切換到另一個進程

LINUX爲每個CPU都維護了一個繼續隊列,將活躍進程(正在運行的進程和正在等待的進程)按照優先級和等待CPU的時間排序,然後選擇最需要CPU的進程,也就是優先級最高和等待時間最長的進程來運行

CPU時間被劃分爲一段段的時間片,這些時間片再被輪流分配給各個進程。這樣,當某個進程的時間片耗盡了,就會被系統掛起,切換到其他正在等待CPU的進程運行

進程和線程
線程是調度的基本單位,而進程則是資源擁有的基本單位
所謂內核中的任務調度,實際上的調度是對象是線程;而進程只是給線程提供了虛擬內存、全局變量等資源
(1)當進程只有一個線程,可以認爲進程就是線程
(2)當進程有多個線程,這些線程會共享相同的虛擬內存和全局變量等資源,這些資源在上下文切換是不需要修改的
(3)線程也有自己的私有數據,比如棧和寄存器,在上下文切換也需要保存

上下文切換工具vmstat 5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章