日期: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 就是...