作業系統CPU上下文切換

2021-07-23 14:24:22 字數 999 閱讀 9569

在切換時,乙個程序儲存在處理器各暫存器中的中間資料叫做程序的上下文,所以程序的切換實質上就是被中止執行程序與待執行程序上下文的切換。在程序未占用處理器時,程序 的上下文是儲存在程序的私有堆疊中的。  

時間片對於cpu來說是很關鍵的引數,如果時間片太長,就會使系統的互動性能變差,使用者感覺不到並行。如果太短,又會造成系統頻繁的上下文切換,使效能 下降。對於io bound的系統來講並不需要太長的時間片,因為系統主要是io操作;而對於cpu bound的系統來說需要長的時間片以保持cache的有效性。

關於cpu,有3個重要的概念:上下文切換(contextswitchs),執行佇列(runqueue)和使用率(utilization)

上下文切換:

目前流行的cpu在同一時間內只能執行乙個執行緒,超執行緒的處理器可以在同一時間執行多個執行緒(包括多核cpu),linux核心會把多核的處理器當作多個單獨的cpu來識別。

乙個標準的linux核心可以支援執行50~50000個程序執行,對於普通的cpu,核心會排程和執行這些程序。每個程序都會分到cpu的時間片來運 行,當乙個程序用完時間片或者被更高優先順序的程序搶占後,它會備份到cpu的執行佇列中,同時其他程序在cpu上執行。這個程序切換的過程被稱作上下文切 換。過多的上下文切換會造成系統很大的開銷。

執行佇列:

每個cpu都會維持乙個執行佇列,理想情況下,排程器會不斷讓佇列中的程序執行。程序不是處在sleep狀態就是run able狀態。如果cpu過載,就會出現排程器跟不上系統的要求,導致可執行的程序會填滿佇列。佇列愈大,程式執行時間就愈長。

經驗總結:

1. 對於每乙個cpu來說執行佇列不要超過2,例如,如果是雙核cpu就不要超過4;

2. 如果cpu在滿負荷執行,應該符合下列分布,

a) user time:65%~70%

b) system time:30%~35%

c) idle:0%~5%

3.對於上下文切換要結合cpu使用率來看,如果cpu使用滿足上述分布,大量的上下文切換也是可以接受的。

作業系統 上下文切換

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

CPU上下文切換

linux任務執行前,cpu都要知道從任務從 載入 又從 開始執行,也就是說,需要系統事先幫它設定好cpu暫存器和程式計數器 cpu上下文 cpu暫存器和程式計數器 cpu暫存器 cpu內建容量小 速度極快的記憶體 程式計數器 儲存cpu正在執行的指令位置 或者即將執行的下一條指令位置 把前乙個任務...

CPU 上下文切換

乙個酒店,裡面滿滿的客人在吃飯,好比是,酒店裡面的所有人速速離開酒店,讓下一波客人吃。好比是 酒店裡的客人不需要離開酒店,但是服務員就是不給他們上菜,因為服務員去給 vip 客戶服務去了,好在 vip 客戶比較好說話,很快就伺候好了,服務員再來給酒店裡的客人服務 不好意思,這道菜的工序比較複雜,讓您...