『操作系统』 进程的描述与控制 Part4 线程
文章目錄
- 2.8 線程及其實現(xiàn)
- 1.線程的概念
- 練習(xí)題
- 2.線程的實現(xiàn)及控制
- 例題
- 練習(xí)題
2.8 線程及其實現(xiàn)
1.線程的基本概念
2.線程的實現(xiàn)及控制
引入進程 的目的:
使多個程序能并發(fā)執(zhí)行,提高資源利用率和系統(tǒng)吞吐量。
引入線程 的目的:
應(yīng)用的需要/ 開銷的考慮/ 性能的提升
開銷的考慮
(1)進程相關(guān)的操作:
- 創(chuàng)建進程
- 撤消進程
- 進程通信
- 進程切換
→ 時間/空間開銷大,限制了并發(fā)度的提高。
(2)線程的開銷小
- 創(chuàng)建一個新線程花費時間少(撤銷亦如此)
- 兩個線程切換花費時間少
- 線程之間相互通信無須調(diào)用內(nèi)核(同一進程內(nèi)的線程共享內(nèi)存和文件)
性能的提升
- 多個線程,有的計算,有的I/O,進一步提高并發(fā)度。
- 充分利用多處理器的優(yōu)勢。
1.線程的概念
在同一進程增加了多個執(zhí)行序列(線程)
(1)線程:進程中的一個運行實體,是CPU的調(diào)度單位,有時將線程稱為輕量級進程
進程與線程
- 進程是資源分配單位
- 線程是CPU執(zhí)行單位
多線程優(yōu)點 - 切換速度快(地址空間不變)
- 系統(tǒng)開銷小
- 通訊容易(共享數(shù)據(jù)空間)
(2)線程模型
每個線程擁有自己的棧:局部變量、返回地址
(3)線程控制塊 - TCB(Thread control block)
標志線程存在的數(shù)據(jù)結(jié)構(gòu), 其中包含對線程管理需要的全部信息. - 內(nèi)容
線程標識、線程狀態(tài)
調(diào)度參數(shù)、現(xiàn)場(通用寄存器,PC,SP) - 存放位置
用戶級線程:目態(tài)空間
核心級線程:管態(tài)空間
(4)線程的屬性:并發(fā)性、共享性、動態(tài)性
- 輕型實體:只有一點必不可少的、能保證獨立運行的資源
- CPU調(diào)度的基本單位
- 可并發(fā)執(zhí)行
- 共享進程資源
(5)線程的優(yōu)點
- 快速切換;
- 易于通信;
- 并行度高;
- 節(jié)省內(nèi)存;
- 減少管理開銷。
(6)線程的基本狀態(tài)
- 執(zhí)行狀態(tài)
- 就緒狀態(tài)
- 阻塞狀態(tài)
(7)線程的創(chuàng)建和終止
-
線程的創(chuàng)建
利用線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用);
創(chuàng)建成功后,返回一個線程標識符。 -
線程的終止方式
自愿退出
被其它線程強行終止
(8)線程與進程的比較
- 線程:作為CPU調(diào)度單位。
線程只擁有必不可少的資源,如:線程狀態(tài)、寄存器上下文和棧
同樣具有就緒、阻塞和執(zhí)行三種基本狀態(tài) - 進程:其它資源分配單位(存儲器、文件、IO等)。
- 調(diào)度:線程作為CPU調(diào)度的基本單位,而進程只作為其它資源分配單位。
- 并發(fā)性:進程之間可以并發(fā),且一個進程的多個線程之間亦可并發(fā)。
- 擁有資源:進程間相互獨立,同一進程的各線程間共享資源。某進程內(nèi)的線程在其它進程不可見。
- 系統(tǒng)開銷:線程上下文切換比進程上下文切換要快得多。
練習(xí)題
1. 線程機制中,一個進程可以對應(yīng)多個線程,一個線程也可以對應(yīng)若干個進程。
解答: 錯!
一個進程可以擁有若干個線程,線程從屬于該進程,同一進程內(nèi)所有線程共享該進程的地址空間,而不同進程之間的地址空間是完全獨立的,如果一個線程可以對應(yīng)若干個進程,那么也就意味著不同進程之間的地址空間可以共享,這顯然是不合適的。
2.線程的實現(xiàn)及控制
- 用戶級線程——User-level thread
- 核心級線程——Kernel-level thread
- 混合線程——Hybrid approach
(1)用戶級線程和內(nèi)核支持線程
- 內(nèi)核支持線程,它們是依賴于內(nèi)核的,即無論是用戶進程中的線程,還是系統(tǒng)進程中的線程,它們的創(chuàng)建、撤消、切換都由內(nèi)核實現(xiàn)。
- 用戶級線程,對于這種線程的創(chuàng)建、撤消、和切換,都不用系統(tǒng)調(diào)用來實現(xiàn)。內(nèi)核并不知道用戶級線程的存在。
(2)核心級線程
- 所有線程管理由核心完成
- 沒有線程庫,但核心提供API
- 核心維護進程和線程的上下文
- 線程之間的切換需要核心支持
- 以線程為基礎(chǔ)進行調(diào)度
當一個線程想去創(chuàng)建一個新線程或撤消已存在的線程時,它發(fā)出一個內(nèi)核調(diào)用,完成創(chuàng)建和回收工作。
實現(xiàn)方法: - 基于系統(tǒng)調(diào)用
- 創(chuàng)建、撤銷、狀態(tài)轉(zhuǎn)換由操作系統(tǒng)完成
優(yōu)點:
- 對多處理器,核心可以同時調(diào)度同一進程的多個線程
- 某線程阻塞,其它線程仍可執(zhí)行
缺點:
- 應(yīng)用程序線程在用戶態(tài)運行,而線程調(diào)度和管理在內(nèi)核實現(xiàn),在同一進程中,控制權(quán)從一個線程傳送到另一個線程時需要用戶態(tài)-內(nèi)核態(tài)-用戶態(tài)的模式切換,系統(tǒng)開銷較大。
- 調(diào)度算法不能靈活控制
(3)用戶級線程
運行時系統(tǒng):用于管理和控制線程的函數(shù)集合。
(4)線程庫
提供線程運行管理系統(tǒng):
- 創(chuàng)建、撤消線程
- 在線程之間傳遞消息和數(shù)據(jù)
- 調(diào)度線程執(zhí)行
- 保護和恢復(fù)線程上下文
用戶級的線程庫能在不支持線程的操作系統(tǒng)中實現(xiàn)線程
- 切換效率高
- 允許每一個進程有自已定制的調(diào)度算法
實現(xiàn)方法:
- 基于library函數(shù),系統(tǒng)不可見
- 線程創(chuàng)建、撤銷、狀態(tài)轉(zhuǎn)換在目態(tài)完成
- TCB在用戶空間,每個進程一個系統(tǒng)棧
優(yōu)點:
- 不依賴于操作系統(tǒng),調(diào)度靈活
- 切換無須從目態(tài)到管態(tài),速度快
- ULT可運行在任何操作系統(tǒng)上(只需要線程庫),可以在一個不支持線程的OS上實現(xiàn)
缺點:
- 核心只將處理器分配給進程,在多處理機中同一進程中多個線程不能真正并行
- 一個線程進入系統(tǒng)受阻,進程中其它線程不能執(zhí)行
例題
1. 設(shè)進程A擁有1個用戶級線程,進程B擁有100個用戶級線程,則在系統(tǒng)調(diào)度時各占用幾個時間片?
答:1個
2. 設(shè)進程A擁有1個內(nèi)核級線程,進程B擁有100個內(nèi)核級線程,則在系統(tǒng)調(diào)度時各占用幾個時間片?
答:A:1個;B:100個
用戶級線程與核心級線程的比較
(5)混合線程
- 在混合式線程系統(tǒng)中,內(nèi)核支持KLT多線程的建立、調(diào)度和管理;
- 同時,也提供線程庫,允許用戶應(yīng)用程序建立、調(diào)度和管理ULT;
- 一個應(yīng)用程序的多個ULT映射成一些KLT,程序員可按應(yīng)用需要和機器配置調(diào)整KLT數(shù)目,以達到較好效果;
- 混合式中,一個應(yīng)用中的多個線程能同時在多處理器上并行運行,且阻塞一個線程時并不需要封鎖整個進程。如果設(shè)計得當,混合式多線程機制能夠結(jié)合了兩者優(yōu)點,舍去缺點。
練習(xí)題
1. 在以下描述中,(C)并不是多線程系統(tǒng)的特長。
A. 利用線程并行地執(zhí)行矩陣的乘法運算
B. Web服務(wù)器利用線程響應(yīng)HTTP請求
C. 鍵盤驅(qū)動程序為每一個正在運行的應(yīng)用配備一個線程,用以響應(yīng)該應(yīng)用的鍵盤輸入
D. 基于GUI的調(diào)試程序用不同的線程分別處理用戶輸入、計算和跟蹤等操作
2. 同一進程中的多個線程有哪些成分是共用的,哪些成分是私用的?
答: 線程的公有成分包括:
代碼區(qū)、數(shù)據(jù)區(qū)、動態(tài)堆空間。
線程的私有成分包括:
線程控制塊;
一個執(zhí)行棧;
運行時動態(tài)分給線程的寄存器。
3. [2012考研試題 31]下列關(guān)于進程和線程的敘述中,正確的是(A)
A.不管系統(tǒng)是否支持線程,進程都是資源分配的基本單位
B.線程是資源分配的基本單位,進程是調(diào)度的基本單位
C.系統(tǒng)級線程和用戶級線程的切換都需要內(nèi)核的支持
D.同一進程中的各個線程擁有各自不同的地址空間
4. 在支持多線程的系統(tǒng)中,進程P創(chuàng)建的若干線程不嗯呢該共享的事(D)
A.進程的代碼段
B.進程P中打開的文件
C.進程P的全局變量
D.進程P中某線程的棧指針
5. 下列對線程的描述中,(B)是錯誤的。
A.不同的線程可執(zhí)行相同的程序
B.線程是資源分配單位
C.線程是調(diào)度和執(zhí)行單位
D.同一進程中的線程可共享該進程的主存空間
6. 以下說法中哪個是正確的?(C)
A.線程是進程中可獨立執(zhí)行的子任務(wù),一個進程可以包含一個或多個線程,一個線程可以屬于一個或多個進程。
B.線程又稱為輕型進程,因為線程都比進程小。
C.多線程技術(shù)具有明顯的優(yōu)越性,如速度快、通信簡便、并行性高等。
D.由于線程不作為資源分配單位,線程之間可以無約束地并行執(zhí)行。
**7.**進程與線程的根本區(qū)別是(C)
A.進程要占用一個進程控制塊,開銷較大,而線程無此開銷
B.進程會增加死鎖的機會,而線程有效避免了這一問題
C. 進程是資源分配單位,而線程是調(diào)度和執(zhí)行的單位
D. 進程是調(diào)度和執(zhí)行的單位,而線程是資源分配單位
8. 用戶級線程執(zhí)行時,同一進程不同線程的切換不需要內(nèi)核支持。
答: 正確
9. 在支持線程的操作系統(tǒng)中,同一個進程中的各個線程共享該進程的用戶棧。
答: 錯誤
總結(jié)
以上是生活随笔為你收集整理的『操作系统』 进程的描述与控制 Part4 线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎么打开dcm文件
- 下一篇: 『操作系统』微内核结构的操作系统几何?(