讀書筆記 現代作業系統 2程序與執行緒 2 2執行緒

2021-07-14 12:50:23 字數 1451 閱讀 5458

這種方法將整個執行緒包放在使用者空間中,而核心對此一無所知。

優點:可以在不支援執行緒的作業系統上實現。

由於不需要陷入核心,呼叫都是本地呼叫,速度要比核心實習的快乙個數量級左右

執行為每個程序提供自己定製的排程演算法。

缺點:如果實現阻塞系統的呼叫。使用執行緒的乙個主要目標是執行每個執行緒使用阻塞呼叫,但是還要避免被阻塞的執行緒影響其他執行緒。解決放啊

頁面故障也有類似的問題,(頁面故障:由於記憶體沒有一次性存入所有程式,當讀到記憶體沒有的程式時需要從硬碟讀取,和阻塞類似)

如果乙個執行緒開始執行,那麼該程序中的其他執行緒就不能執行,除非第乙個程序放棄cpu,也就是說在乙個單獨的程序中沒有中斷系統,沒有辦法使用搶占式的排程方式。除非某個執行緒能夠按照自己的以及進入執行時系統,否則排程程式沒有任何機會

還有乙個最大的問題是使用者通常在發生執行緒阻塞的應用中才使用多執行緒,如果無法高效方便的解決執行緒問題,那使用者級執行緒模型的意義何在。

在核心中有用來記錄系統中所有執行緒的執行緒表。當某個執行緒希望建立乙個新執行緒或者撤銷乙個已有執行緒時,它進行乙個系統呼叫,這個系統呼叫通過對執行緒表的更新完成執行緒的建立或呼叫。

核心的執行緒表,儲存每個執行緒的暫存器、狀態和其他資訊。這些資訊和在使用者空間中,但是現在儲存在核心中,這些資訊是傳統內所維護的每個單執行緒程序資訊的子集。當然核心也會維護程序表

所有的阻塞執行緒的呼叫都是以系統呼叫的形式實現,因此代價是很大的。因此在某些系統中不採用頻繁建立和撤銷執行緒的方式,而是採用執行緒池的的方式。

核心執行緒不需要任何新的、非阻塞系統呼叫。

當然核心中實現執行緒也有其他問題,比如說:

執行緒建立程序時,新程序是只有乙個執行緒還是有多個執行緒。通常來說取決於洗一遍要作甚。

訊號到達,該由那個執行緒處理也是乙個比較有意思的問題。

程式設計人員決定有多少個核心級執行緒和多少個使用者級執行緒彼此多路復用。

核心只識別核心級執行緒,其中一些核心級執行緒會被多個程序多路復用。

具體實現

排程程式啟用機制的乙個目標是作為上行呼叫的信賴基礎,這是違反系統內在結構的概念。通過n層呼叫n+1層程式

傳統的方法是將程序或執行緒阻塞在乙個receive系統呼叫上,等待訊息到來。當訊息到達時,該系統呼叫接受訊息,並開啟訊息檢測內容然後處理

乙個訊息到達到,導致系統建立乙個處理該訊息的執行緒,這中線程稱為彈出式執行緒,每個執行緒重新開始,每乙個執行緒彼此之間都完全一樣。這樣就可以快速建立執行緒。訊息到達和處理開始之間的時間非常短。

但是在使用彈出式執行緒之前,需要提前計畫,可以執行在核心或者使用者空間,通常執行在核心更快且容易。但是如果出錯問題更大

不可重用的庫過程

很多庫過程是不可以重用的,就是說在尚未呼叫結束之前不可呼叫。

訊號 有些訊號是執行緒專用的,有些則不是,當執行緒完全在使用者空間實現時,核心根本不知道有執行緒存在,因此很難將訊號傳送給正確的執行緒。還有一些中斷不是執行緒專用的

堆疊管理

核心根據程序增加堆疊,但是如果乙個程序有多個執行緒,則可能出現混亂。

讀書筆記 現代作業系統

ch1.1.作業系統中,抽象非常重要,乙個複雜的任務可以抽象成多個簡單的子任務,將複雜的硬體抽象成簡單的介面,書中針對向上層應用提供的介面做詳細的講解,但是對於使用者 終端使用者 介面不會做研究.2.作業系統中的資源有時間資源和空間資源,以及硬碟的空間資源,時間資源是時間復用的 如cpu的輪轉 空間...

《現代作業系統》讀書筆記之程序一

工作幾年,越來越感覺到作業系統的重要性,記得在上課時老師說過一句話。工作幾年後,必須得返回來看看作業系統,會有與學生時代不一樣的理解。看到別人都在寫寫部落格,自己也手癢想嘗試下。僅僅代表自己的理解,如有錯誤之處,敬請指出。1 程序 在該書中對程序的定義 在程序模型中,計算機上所有可以執行的軟體,通常...

《現代作業系統》讀書筆記 執行緒

執行緒是最小的任務排程單位,是依賴於程序而存在的迷你程序。和程序一樣,執行緒也有三種狀態 執行 就緒 阻塞。我認為,執行緒是程序中任務真正的執行者,而程序提供了記憶體空間 cpu 程式計數器以及暫存器讓執行緒使用。對於程序來說,多個程序之間無法分享記憶體空間,對於一些應用而言,共享記憶體空間的能力是...