作業系統 執行緒總結

2022-01-10 03:14:41 字數 1644 閱讀 2561

日期:2019/5/3

程序的特點:

關鍵點:

所有執行緒共享程序的狀態和資源。例如,全域性變數,檔案描述符表。當乙個執行緒以讀許可權開啟檔案,其他執行緒也能讀取(無需重複open)

執行緒的優點:

2大類:使用者級執行緒(user level thread)和核心級執行緒(kernel level thread)。

ult執行緒管理由應用程式完成,核心意識不到執行緒的存在。(通訊、排程等通過執行緒庫實現)

ult執行緒排程與程序排程的關係,也是ult與klt的本質區別。

初始狀態:

執行緒庫中:執行緒2執行

os核心中:程序b執行

假設1:執行緒2進行了乙個將會阻塞程序b的系統呼叫(例如io操作)。那麼:

核心把b阻塞,切換到另外乙個程序。

假設3:執行緒2執行到需要執行緒1執行某些動作的乙個點。(例如,1負責資料輸入,2負責計算和輸出這種情況)

執行緒2阻塞,執行緒庫排程執行緒1執行。

總結:ult優點:

ult缺點:

純klt下,執行緒管理由核心完成,應用級沒有執行緒管理的**(只提供api)。

如上圖4.5(b),此時核心的排程單位是執行緒,乙個執行緒阻塞,其他執行緒仍然在真的執行(前提cpu是多核)。

但執行緒排程需要陷入核心,時間花銷更大。

一組對比實驗:

linux中的程序/任務由乙個task_struct表示,它包含以下資訊:

傳統linux核心:

現代linux核心:

fork底層是通過clone系統呼叫實現,將所有標誌位清零。標誌位如下:

當進行程序切換時,核心先檢查當前程序的頁目錄位址是否與被排程的程序相同。若相同,則他們共享乙個位址空間,此時上下文切換僅僅是pc指標的跳轉。注意:clone可以使同乙個程序組的轉殖程序共享同一記憶體空間,但不能共享同乙個使用者棧,每個clone程序都有獨立的棧。

作業系統 執行緒

靜態鏈結庫是乙個或多個obj檔案的打包,所以有人乾脆把obj檔案生成lib檔案的過程稱為archive,即合併在一起。比如你鏈結乙個靜態庫,如果其中有錯,他會準確的找到是哪個obj有錯,即靜態lib只是殼子。當我們的應用工程在使用靜態庫鏈結時,靜態鏈結庫要參與編譯,在生成執行檔案之前的鏈結過程中,將...

作業系統 執行緒

執行緒是cpu使用的基本單元,它由執行緒id 程式計數器 暫存器集合和棧組成。它與屬於同一程序的其他執行緒共享 段,資料段和其他作業系統資源,如開啟檔案和訊號。乙個傳統重量級的程序只有單個控制線程,如果程序有多個控制線程,那麼它能夠同時做多個任務。多執行緒程式設計的優點 響應度高 如果對乙個互動程式...

作業系統 執行緒

多核cpu計算機,程序內部的各個執行緒可以占用不同的cpu。共享記憶體位址空間,執行緒通訊無需系統干預。共享程序的資源。每個執行緒都有執行緒id 執行緒控制塊 tcb 幾乎不擁有系統資源。作業系統中,執行緒又分為使用者級和核心級執行緒。使用者級執行緒 ult,user level thread 就是...