程序切換小結

2021-07-22 20:49:22 字數 755 閱讀 7159

linux與任何分時系統一樣,通過乙個程序到另乙個程序的切換,達到表面上多個程序同時執行的神奇效果。然而程序之間是如何切換的,並且怎樣去決定切換程序。

程序鍊錶

為了控制程序的執行,核心必須有能力掛起正在cpu執行的程序,恢復以前掛起的程序執行。

所有程序共享cpu暫存器,程序恢復時必須裝入暫存器的一組資料(硬體上下文tss)。在程序切換時,首先要儲存掛起程序的硬體上下文,同時要裝載喚醒程序的硬體上下文。這塊linux實現的是使用軟體執行程序切換。這樣可以通過move指令檢查裝入暫存器值的合法性。

程序描述符中的thread欄位,包含了大部分的cpu暫存器,eax,ebx這些通用的暫存器儲存在核心堆疊中。

程序切換執行的操作:

struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct task_struct *next_p)

/** now maybe reload the debug registers

*/if (unlikely(next->debugreg[7]))

if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr))

handle_io_bitmap(next, tss);

return prev_p;

}`

程序切換和執行緒切換

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

程序切換與執行緒切換

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

程序切換與執行緒切換

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