通過頁表理解程序切換和執行緒切換開銷上的區別

2021-09-28 08:05:48 字數 473 閱讀 7268

為什麼用多執行緒或多程序?

程式的大部分耗時在等待io上,瓶頸不在cpu上時,可以提高cpu利用率

需要集中快速處理大量資料,並且不受先後順序影響

執行緒的實現可以分為兩類:

程序切換都需要核心態轉換

程序切換與執行緒切換的最主要區別:程序切換涉及到虛擬位址空間的切換而執行緒切換則不會。因為每個程序都有自己的虛擬位址空間,而執行緒是共享所在程序的虛擬位址空間的,因此同乙個程序中的執行緒進行執行緒切換時不涉及虛擬位址空間的轉換。把虛擬位址轉換為實體地址需要查詢頁表,頁表查詢是乙個很慢的過程,因此通常使用tlb(translation lookaside buffer)來快取頁位址,用來加速頁表查詢。當程序切換後頁表也要進行切換,頁表切換後tlb就失效了,那麼虛擬位址轉換為實體地址就會變慢,表現出來的就是程式執行會變慢,而執行緒切換則不會導致tlb失效,因為執行緒執行緒無需切換位址空間,因此我們通常說執行緒切換要比較程序切換塊,原因就在這裡。

程序切換和執行緒切換

為了控制程序的執行,核心必須有能力掛起正在cpu上執行的程序,並恢復以前掛起的某個程序的執行。這種行為被稱為程序切換 process switch 任務切換 task switch 或上下文切換 content switch 原文 程序切換分兩步 1.切換頁目錄以使用新的位址空間 2.切換核心棧和硬...

程序切換與執行緒切換

原文 為了控制程序的執行,核心必須有能力掛起正在cpu上執行的程序,並恢復以前掛起的某個程序的執行。這種行為被稱為程序切換 process switch 任務切換 task switch 或上下文切換 content switch 程序切換分兩步 1.切換頁目錄以使用新的位址空間 2.切換核心棧和硬...

程序切換與執行緒切換

為了更好的了解上下文切換,需要我們了解虛擬記憶體的概念。虛擬記憶體是作業系統為每個程序提供的一種抽象,每個程序都有屬於自己的 私有的 位址連續的虛擬記憶體,當然我們知道最終程序的資料及 必然要放到物理記憶體上,那麼必須有某種機制能記住虛擬位址空間中的某個資料被放到了哪個物理記憶體位址上,這就是所謂的...