【作業系統】程式的描述與控制[執行緒](4)
寫在前面
資料來源於我的作業系統老師,WYQ老師
2.8 執行緒及其實現
1.執行緒的基本概念
2.執行緒的實現及控制
引入程式 的目的:
使多個程式能併發執行,提高資源利用率和系統吞吐量。
引入執行緒 的目的:
應用的需要/ 開銷的考慮/ 效能的提升
開銷的考慮
(1)程式相關的操作:
- 建立程式
- 撤消程式
- 程式通訊
- 程式切換
→ 時間/空間開銷大,限制了併發度的提高。
(2)執行緒的開銷小
- 建立一個新執行緒花費時間少(撤銷亦如此)
- 兩個執行緒切換花費時間少
- 執行緒之間相互通訊無須呼叫核心(同一程式內的執行緒共享記憶體和檔案)
效能的提升
- 多個執行緒,有的計算,有的I/O,進一步提高併發度。
- 充分利用多處理器的優勢。
1.執行緒的概念
在同一程式增加了多個執行序列(執行緒)
(1)執行緒:程式中的一個執行實體,是CPU的排程單位,有時將執行緒稱為輕量級程式
程式與執行緒
- 程式是資源分配單位
- 執行緒是CPU執行單位
多執行緒優點 - 切換速度快(地址空間不變)
- 系統開銷小
- 通訊容易(共享資料空間)
(2)執行緒模型
每個執行緒擁有自己的棧:區域性變數、返回地址
(3)執行緒控制塊 - TCB(Thread control block)
標誌執行緒存在的資料結構, 其中包含對執行緒管理需要的全部資訊. - 內容
執行緒標識、執行緒狀態
排程引數、現場(通用暫存器,PC,SP) - 存放位置
使用者級執行緒:目態空間
核心級執行緒:管態空間
(4)執行緒的屬性:併發性、共享性、動態性
- 輕型實體:只有一點必不可少的、能保證獨立執行的資源
- CPU排程的基本單位
- 可併發執行
- 共享程式資源
(5)執行緒的優點
- 快速切換;
- 易於通訊;
- 並行度高;
- 節省記憶體;
- 減少管理開銷。
(6)執行緒的基本狀態
- 執行狀態
- 就緒狀態
- 阻塞狀態
(7)執行緒的建立和終止
-
執行緒的建立
利用執行緒建立函式(或系統呼叫);
建立成功後,返回一個執行緒識別符號。 -
執行緒的終止方式
自願退出
被其它執行緒強行終止
(8)執行緒與程式的比較
- 執行緒:作為CPU排程單位。
執行緒只擁有必不可少的資源,如:執行緒狀態、暫存器上下文和棧
同樣具有就緒、阻塞和執行三種基本狀態 - 程式:其它資源分配單位(儲存器、檔案、IO等)。
- 排程:執行緒作為CPU排程的基本單位,而程式只作為其它資源分配單位。
- 併發性:程式之間可以併發,且一個程式的多個執行緒之間亦可併發。
- 擁有資源:程式間相互獨立,同一程式的各執行緒間共享資源。某程式內的執行緒在其它程式不可見。
- 系統開銷:執行緒上下文切換比程式上下文切換要快得多。
練習題
1. 執行緒機制中,一個程式可以對應多個執行緒,一個執行緒也可以對應若干個程式。
解答: 錯!
一個程式可以擁有若干個執行緒,執行緒從屬於該程式,同一程式內所有執行緒共享該程式的地址空間,而不同程式之間的地址空間是完全獨立的,如果一個執行緒可以對應若干個程式,那麼也就意味著不同程式之間的地址空間可以共享,這顯然是不合適的。
2.執行緒的實現及控制
- 使用者級執行緒——User-level thread
- 核心級執行緒——Kernel-level thread
- 混合執行緒——Hybrid approach
(1)使用者級執行緒和核心支援執行緒
- 核心支援執行緒,它們是依賴於核心的,即無論是使用者程式中的執行緒,還是系統程式中的執行緒,它們的建立、撤消、切換都由核心實現。
- 使用者級執行緒,對於這種執行緒的建立、撤消、和切換,都不用系統呼叫來實現。核心並不知道使用者級執行緒的存在。
(2)核心級執行緒
- 所有執行緒管理由核心完成
- 沒有執行緒庫,但核心提供API
- 核心維護程式和執行緒的上下文
- 執行緒之間的切換需要核心支援
- 以執行緒為基礎進行排程
當一個執行緒想去建立一個新執行緒或撤消已存在的執行緒時,它發出一個核心呼叫,完成建立和回收工作。
實現方法: - 基於系統呼叫
- 建立、撤銷、狀態轉換由作業系統完成
優點:
- 對多處理器,核心可以同時排程同一程式的多個執行緒
- 某執行緒阻塞,其它執行緒仍可執行
缺點:
- 應用程式執行緒在使用者態執行,而執行緒排程和管理在核心實現,在同一程式中,控制權從一個執行緒傳送到另一個執行緒時需要使用者態-核心態-使用者態的模式切換,系統開銷較大。
- 排程演算法不能靈活控制
(3)使用者級執行緒
執行時系統:用於管理和控制執行緒的函式集合。
(4)執行緒庫
提供執行緒執行管理系統:
- 建立、撤消執行緒
- 線上程之間傳遞訊息和資料
- 排程執行緒執行
- 保護和恢復執行緒上下文
使用者級的執行緒庫能在不支援執行緒的作業系統中實現執行緒
- 切換效率高
- 允許每一個程式有自已定製的排程演算法
實現方法:
- 基於library函式,系統不可見
- 執行緒建立、撤銷、狀態轉換在目態完成
- TCB在使用者空間,每個程式一個系統棧
優點:
- 不依賴於作業系統,排程靈活
- 切換無須從目態到管態,速度快
- ULT可執行在任何作業系統上(只需要執行緒庫),可以在一個不支援執行緒的OS上實現
缺點:
- 核心只將處理器分配給程式,在多處理機中同一程式中多個執行緒不能真正並行
- 一個執行緒進入系統受阻,程式中其它執行緒不能執行
例題
1. 設程式A擁有1個使用者級執行緒,程式B擁有100個使用者級執行緒,則在系統排程時各佔用幾個時間片?
答:1個
2. 設程式A擁有1個核心級執行緒,程式B擁有100個核心級執行緒,則在系統排程時各佔用幾個時間片?
答:A:1個;B:100個
使用者級執行緒與核心級執行緒的比較
(5)混合執行緒
- 在混合式執行緒系統中,核心支援KLT多執行緒的建立、排程和管理;
- 同時,也提供執行緒庫,允許使用者應用程式建立、排程和管理ULT;
- 一個應用程式的多個ULT對映成一些KLT,程式設計師可按應用需要和機器配置調整KLT數目,以達到較好效果;
- 混合式中,一個應用中的多個執行緒能同時在多處理器上並行執行,且阻塞一個執行緒時並不需要封鎖整個程式。如果設計得當,混合式多執行緒機制能夠結合了兩者優點,捨去缺點。
練習題
1. 在以下描述中,(C)並不是多執行緒系統的特長。
A. 利用執行緒並行地執行矩陣的乘法運算
B. Web伺服器利用執行緒響應HTTP請求
C. 鍵盤驅動程式為每一個正在執行的應用配備一個執行緒,用以響應該應用的鍵盤輸入
D. 基於GUI的除錯程式用不同的執行緒分別處理使用者輸入、計算和跟蹤等操作
2. 同一程式中的多個執行緒有哪些成分是共用的,哪些成分是私用的?
答: 執行緒的公有成分包括:
程式碼區、資料區、動態堆空間。
執行緒的私有成分包括:
執行緒控制塊;
一個執行棧;
執行時動態分給執行緒的暫存器。
3. [2012考研試題 31]下列關於程式和執行緒的敘述中,正確的是(A)
A.不管系統是否支援執行緒,程式都是資源分配的基本單位
B.執行緒是資源分配的基本單位,程式是排程的基本單位
C.系統級執行緒和使用者級執行緒的切換都需要核心的支援
D.同一程式中的各個執行緒擁有各自不同的地址空間
4. 在支援多執行緒的系統中,程式P建立的若干執行緒不嗯呢該共享的事(D)
A.程式的程式碼段
B.程式P中開啟的檔案
C.程式P的全域性變數
D.程式P中某執行緒的棧指標
5. 下列對執行緒的描述中,(B)是錯誤的。
A.不同的執行緒可執行相同的程式
B.執行緒是資源分配單位
C.執行緒是排程和執行單位
D.同一程式中的執行緒可共享該程式的主存空間
6. 以下說法中哪個是正確的?(C)
A.執行緒是程式中可獨立執行的子任務,一個程式可以包含一個或多個執行緒,一個執行緒可以屬於一個或多個程式。
B.執行緒又稱為輕型程式,因為執行緒都比程式小。
C.多執行緒技術具有明顯的優越性,如速度快、通訊簡便、並行性高等。
D.由於執行緒不作為資源分配單位,執行緒之間可以無約束地並行執行。
**7.**程式與執行緒的根本區別是(C)
A.程式要佔用一個程式控制塊,開銷較大,而執行緒無此開銷
B.程式會增加死鎖的機會,而執行緒有效避免了這一問題
C. 程式是資源分配單位,而執行緒是排程和執行的單位
D. 程式是排程和執行的單位,而執行緒是資源分配單位
8. 使用者級執行緒執行時,同一程式不同執行緒的切換不需要核心支援。
答: 正確
9. 在支援執行緒的作業系統中,同一個程式中的各個執行緒共享該程式的使用者棧。
答: 錯誤
相關文章
- 『作業系統』 程式的描述與控制 Part 1 前驅圖與程式執行作業系統
- 作業系統3——程式的描述與控制作業系統
- 【作業系統】程式與執行緒作業系統執行緒
- 作業系統(二)——程式的描述與控制(1)作業系統
- 【作業系統】 第二章 程式管理 程式的描述與控制作業系統
- 作業系統系列----程式與程式 程式的描述作業系統
- 作業系統-執行緒作業系統執行緒
- 作業系統-執行緒和程式的區別作業系統執行緒
- 作業系統_程式和執行緒的區別作業系統執行緒
- 作業系統知識回顧(2)--程式與執行緒作業系統執行緒
- LINUX作業系統知識:程式與執行緒詳解Linux作業系統執行緒
- 作業系統:多執行緒作業系統執行緒
- 作業系統——深入理解程式和執行緒作業系統執行緒
- 作業系統複習(程式、執行緒、死鎖)作業系統執行緒
- 作業系統中的執行緒種類作業系統執行緒
- Java 執行緒和作業系統的執行緒有啥區別?Java執行緒作業系統
- 程式,核心執行緒,使用者執行緒,協程,纖程......作業系統世界觀執行緒作業系統
- 【作業系統】1.程序和執行緒作業系統執行緒
- ucore作業系統學習(四) ucore lab4核心執行緒管理作業系統執行緒
- 理解作業系統之程式和執行緒作業系統執行緒
- 執行緒、執行緒與程式、ULT與KLT執行緒
- 作業系統實驗——程式控制作業系統
- 作業系統的執行環境作業系統
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- java基礎:執行緒與程式;執行緒的分工,協作,互斥;volatile關鍵字Java執行緒
- 程式與執行緒執行緒
- 執行緒與程式執行緒
- java 執行作業系統命令Java作業系統
- Android程式框架:執行緒與執行緒池Android框架執行緒
- 執行緒控制之休眠執行緒執行緒
- 一個故事講完程式、執行緒和協程(作業系統基礎知識)執行緒作業系統
- 作業系統中的描述符和GDT作業系統
- Python 執行 Linux 作業系統命令PythonLinux作業系統
- Python系統程式設計之執行緒Python程式設計執行緒
- 多執行緒-作業練習執行緒
- 程式與執行緒的產生執行緒
- PHP 的多程式與執行緒PHP執行緒
- 程式與執行緒的區別執行緒