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

2021-09-14 04:32:57 字數 1716 閱讀 5808

執行緒是最小的任務排程單位,是依賴於程序而存在的迷你程序。和程序一樣,執行緒也有三種狀態——執行、就緒、阻塞。我認為,執行緒是程序中任務真正的執行者,而程序提供了記憶體空間、cpu、程式計數器以及暫存器讓執行緒使用。

對於程序來說,多個程序之間無法分享記憶體空間,對於一些應用而言,共享記憶體空間的能力是必須的,而同乙個程序下的多個程序,是共享程序的記憶體空間的。同時,由於這一特性,執行緒的建立相較於程序,要快得多。

還有一點,可能也是很多人誤解的,那就是執行緒可以加快程式的執行速度。這是一種錯誤的觀點。多執行緒並不能加快程式執行的速度,而是能充分利用 cpu,從而給我們造成了程式速度變快的假象。例如,在 i/o 處理時,執行緒阻塞另乙個執行緒開始,而不需要等待 i/o 完成。

這裡,我們應該知道,在單 cpu 的情況下,某一時刻只能有乙個程序執行,只能有乙個執行緒執行。

執行緒有兩種,乙個是核心態執行緒,乙個是使用者態執行緒。

當在乙個程序中建立乙個核心態執行緒時,這個執行緒便陷入了核心中,同時佔據 cpu、暫存器和程式計數器,並且和程序一樣,將執行緒表存在核心中。核心對這個執行緒是有感知的,並且核心直接參與執行緒的排程。

而使用者態執行緒的狀態是儲存在程序中的。程序中有乙個專門的執行時系統,用於排程使用者執行緒。所以,每個程序可以自己實現自己的排程演算法,從而可以增加程式的靈活度。例如,在乙個執行緒要做可能會造成阻塞的事情時,會通知執行時系統,由執行時系統來通過程序中的執行緒表的執行緒的狀態,來決定排程執行緒。

但是,由於核心不直接參與排程使用者執行緒,那麼就有乙個問題,程序排程執行緒需要執行緒主動讓出,這樣使用者執行緒的權利是非常大的。如果乙個執行緒做了造成本地阻塞的事情而不通知程序,那麼就會使整個程序一直處於阻塞狀態,即使程序中其它執行緒是就緒狀態。

這裡插一句,好像上面的事情和現在說的比較多的協程很相似。沒錯,我認為,協程就是使用者態執行緒,它有相當高的主動權,來通過程序的堆疊來排程,可以有效解決併發的問題。

可以看到,核心執行緒和使用者執行緒都有各自的優點和缺點。

核心執行緒由核心直接排程,在多處理機系統中可以實現同時執行。而且由於是核心排程,執行緒沒有主動權,可以避免執行緒佔據 cpu 太久而導致其他執行緒無法執行。但是由於核心執行緒是核心直接排程的,在排程時會陷入核心,這個代價是非常大的。

使用者執行緒由程序中的執行時系統來排程,所有的執行緒的資料都儲存在程序棧中,而不需要陷入核心,不需要上下文切換,也不需要對快取進行重新整理,所以這樣的排程時非常快的。同時使用者執行緒由程序實現排程演算法,有很強的擴充套件性。但是由於使用者執行緒的主動權非常大,可能會導致執行緒阻塞但其它就緒的執行緒沒有機會執行。而且由於執行緒的資料均儲存在程序的記憶體中,如果執行緒很多,可能會占用相當多的記憶體,從而發生一些問題。

既然核心執行緒和使用者執行緒由各自的優點,那麼可以將它們的有點集合起來。例如,可以使用核心執行緒,並且核心執行緒和使用者執行緒多路復用,通過核心執行緒來控制和使用使用者執行緒。

排程程式啟用的目標是模擬核心執行緒的功能,但是為執行緒提供在使用者空間中才能實現的更好的效能以及更強大的靈活性。

程序的執行時系統,將執行緒分配在處理器上。當核心了解到乙個執行緒阻塞時,它啟動執行時系統,以此當做通知,讓執行時系統決定如何排程自己的擁有的執行緒。

在某個使用者執行緒執行的過程中,發生了乙個硬體中斷,此時 cpu 進入核心態。如果程序中的執行緒需要這個中斷,程序對中斷感興趣,那麼程序將被中斷的執行緒掛起並儲存在堆疊中,然後選擇執行緒進行排程。如果不感興趣,則恢復被中斷的執行緒。

本文是作者閱讀《現代作業系統》的一些總結與理解,僅此記錄下來已被日後翻閱。同時,也分享給各位希望了解這些知識的同道者們。由於作者水平有限,如有錯誤之處,望不吝賜教,謹表感謝。

讀書筆記 現代作業系統

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

現代作業系統 什麼是作業系統?(讀書筆記)

1 抽象是管理複雜性的乙個關鍵。好的抽象可以把乙個幾乎不可能管理的任務劃分為兩個可管理的部分。第一部分是有關抽象的定義和實現,第二部分是用這些抽象解決問題。畫外 上家公司的老闆前一段時間還發了一條類似朋友圈。講抽象和解決問題的。2 程式設計師直接和作業系統及其抽象打交道 終端使用者和使用者介面提供的...

《現代作業系統》讀書筆記 死鎖篇

標籤 讀書筆記 校招 作業系統 面試 可剝奪資源 是指雖然資源佔有者程序需要使用該資源,但另乙個程序可以強行把該資源從佔有者程序處剝奪來歸自己使用。不可剝奪資源 是指除佔有者程序不再需要使用該資源而主動釋放資源,其他程序不得在佔有者程序使用資源過程中強行剝奪。如果乙個程序集合中的每個程序都在等待只能...