GeekOS中的執行緒切換

2021-06-16 18:34:13 字數 478 閱讀 9934

在geekos中有兩個地方會發生執行緒切換

1.中斷函式中,當執行完中斷例程handle_interrupt的時候,可能會進行一次執行緒切換。

在handle_interrupt中,執行完中斷函式後,cpu會檢查搶占標誌g_preemptiondisabled和排程標誌g_needrschedule,若g_preemptiondisabled==0,g_needrschedule==1,則從可執行佇列中選擇乙個新執行緒執行。

2.某執行緒呼叫schedule()主動放棄cpu,注意在schedule()前,需要關中斷(schedule中使用了多個全域性變數)。

schedule()最終會呼叫switch_to_thread來進行執行緒的切換。

執行緒切換的核心在我看來,關鍵在於一句彙編語句

iret

iret從棧中彈出新的**段cs以及**段中的指令位址eip,然後跳到eip處執行。

GeekOS 中的程序同步方法

geekos採用了兩種同步方法用來保護臨界區 0.關中斷 1.互斥量 void init screen void begin int atomic 用於禁止中斷,end int atomic ifag 允許中斷。這裡使用了ifag標誌記錄下進入進入臨界區之前的中斷狀態,在end int atomic...

執行緒切換的開銷

從單執行緒應用到多執行緒應用帶來的不僅僅是好處。也會帶來開銷。不要僅僅在乙個應用中使用多執行緒僅僅是因為你能夠 會 使用多執行緒。你應該能確定使用多執行緒帶來的好處要遠遠多於它帶來的花銷。如果不能夠確定,那麼請嘗試測量應用的效能和響應性,不僅僅是猜測。儘管多執行緒應用的某些部分要比單執行緒應用更加簡...

程序切換和執行緒切換

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