上下文切換(也稱做程序切換或任務切換):是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。
程序(有時候也稱做任務):是指乙個程式執行的例項。
上下文:是指某一時間點 cpu 暫存器和程式計數器的內容。
暫存器:是 cpu 內部的數量較少但是速度很快的記憶體(與之對應的是 cpu 外部相對較慢的 ram 主記憶體)。暫存器通過對常用值(通常是運算的中間值)的快速訪問來提高計算機程式執行的速度。
程式計數器:是乙個專用的暫存器,用於表明指令序列中 cpu 正在執行的位置,存的值為正在執行的指令的位置或者下乙個將要被執行的指令的位置,具體依賴於特定的系統。
i/o可以被定義為任何資訊流入或流出 cpu 與主記憶體(ram)。也就是說,一台電腦的 cpu和記憶體與該電腦的使用者(通過鍵盤或滑鼠)、儲存裝置(硬碟或磁碟驅動)還有其他電腦的任何交流都是 i/o。
稍微詳細描述一下,上下文切換可以認為是核心(作業系統的核心)在 cpu 上對於程序(包括執行緒)進行以下的活動:
(1)掛起乙個程序,將這個程序在 cpu 中的狀態(上下文)儲存於記憶體中的某處;
(2)在記憶體中檢索下乙個程序的上下文並將其在 cpu 的暫存器中恢復;
(3)跳轉到程式計數器所指向的位置(即跳轉到程序被中斷時的**行),以恢復該程序。
上下文切換有時被描述為:核心掛起 cpu當前執行的程序,然後繼續執行之前掛起的眾多程序中的某乙個。儘管這麼說對於澄清概念有所幫助,但是這句話本身可能有一點令人困惑。因為通過定義可以知道,程序是指乙個程式執行的例項。所以說成掛起乙個程序的執行可能更適合一些。上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。
其他的程式,如應用程式,在最開始都是執行在使用者態,但是他們能通過系統呼叫來執行部分核心的**。系統呼叫在類 unix 系統中是指活躍的程序(正在執行在 cpu 上的程序)對於核心所提供的服務的請求,例如輸入/輸出(i/o)和程序建立(建立乙個新的程序)。
這兩種模式(使用者態和核心態)在類 unix 系統中共存意味著當系統呼叫發生時 cpu 切換到核心態是必要的。這應該叫做模式切換而不是上下文切換,因為沒有改變當前的程序。
上下文切換通常是計算密集型的。也就是說,它需要相當可觀的處理器時間,在每秒幾十上百次的切換中,每次切換都需要納秒量級的時間。所以,上下文切換對系統來說意味著消耗大量的 cpu 時間,事實上,可能是作業系統中時間消耗最大的操作。
linux相比與其他作業系統(包括其他類 unix 系統)有很多的優點,其中有一項就是,其上下文切換和模式切換的時間消耗非常少。
CPU上下文切換
linux任務執行前,cpu都要知道從任務從 載入 又從 開始執行,也就是說,需要系統事先幫它設定好cpu暫存器和程式計數器 cpu上下文 cpu暫存器和程式計數器 cpu暫存器 cpu內建容量小 速度極快的記憶體 程式計數器 儲存cpu正在執行的指令位置 或者即將執行的下一條指令位置 把前乙個任務...
CPU 上下文切換
乙個酒店,裡面滿滿的客人在吃飯,好比是,酒店裡面的所有人速速離開酒店,讓下一波客人吃。好比是 酒店裡的客人不需要離開酒店,但是服務員就是不給他們上菜,因為服務員去給 vip 客戶服務去了,好在 vip 客戶比較好說話,很快就伺候好了,服務員再來給酒店裡的客人服務 不好意思,這道菜的工序比較複雜,讓您...
筆記 cpu上下文,上下文切換
cpu 上下文 cpu 暫存器,是 cpu 內建的容量小 但速度極快的記憶體。而程式計數器,則是用來儲存 cpu 正在執行的指令位置 或者即將執行的下一條指令位置。它們都是 cpu 在執行任何任務前,必須的依賴環境。cpu 上下文切換 就是先把前乙個任務的 cpu 上下文 也就是 cpu 暫存器和程...