王道操作系统考研笔记——2.1.5 线程概念与多线程模型
文章目錄
- 2.1.5 線程概念與多線程模型
- 2.1.5.1 線程的來(lái)源
- 2.1.5.2 線程機(jī)制帶來(lái)的變化
- 2.1.5.3 線程的屬性
- 2.1.5.4 線程的實(shí)現(xiàn)方式
- 2.1.5.5 多線程模型
- 2.1.5.6 小結(jié)
2.1.5 線程概念與多線程模型
2.1.5.1 線程的來(lái)源
在很久以前還沒(méi)有引入進(jìn)程之前,系統(tǒng)中的各個(gè)程序只能串行執(zhí)行。比如你想要邊聽(tīng)歌邊開(kāi)QQ,這是不可能做到的,只能先做一件事再做一件事。
后來(lái)引入進(jìn)程后,系統(tǒng)中的各個(gè)程序可以并發(fā)執(zhí)行。也就是說(shuō),可以同時(shí)聽(tīng)歌和開(kāi)QQ。但是,即使引入了進(jìn)程,也不能在QQ中同時(shí)視頻聊天和傳輸文件。這是因?yàn)椴僮飨到y(tǒng)每一次執(zhí)行都是按照進(jìn)程為單位來(lái)執(zhí)行的。
從上面的例子來(lái)看,進(jìn)程是程序的一次執(zhí)行。但是這些功能顯然不可能是由一個(gè)程序順序處理就能實(shí)現(xiàn)的。
有的進(jìn)程可能需要“同時(shí)做很多事”,而傳統(tǒng)的進(jìn)程只能串行地執(zhí)行一系列程序。為此,引入了線程來(lái)提高并發(fā)度。
在傳統(tǒng)中,進(jìn)程是程序執(zhí)行流的最小單位,也就是說(shuō),CPU每次執(zhí)行任務(wù),最少執(zhí)行一個(gè)進(jìn)程。而后在現(xiàn)在,CPU每次執(zhí)行任務(wù),最少執(zhí)行一個(gè)線程,線程是進(jìn)程的子集。也就是說(shuō),引入線程后,線程成為了程序執(zhí)行流的最小單位。
綜上所述,我們可以把線程理解為“輕量級(jí)進(jìn)程”。線程是一個(gè)基本的CPU執(zhí)行單元,也是程序執(zhí)行流的最小單位。引入線程之后,不僅是進(jìn)程之間可以并發(fā),進(jìn)程內(nèi)的各線程之間也可以并發(fā),從而進(jìn)一步提升了系統(tǒng)的并發(fā)度,使得一個(gè)進(jìn)程內(nèi)也可以并發(fā)處理各種任務(wù)(如QQ視頻、文字聊天、傳文件)。引入線程后,進(jìn)程只作為除CPU之外的系統(tǒng)資源的分配單元(如打印機(jī)、內(nèi)存地址空間等都是分配給進(jìn)程的)。
2.1.5.2 線程機(jī)制帶來(lái)的變化
| 傳統(tǒng)進(jìn)程機(jī)制中,進(jìn)程是資源分配、調(diào)度的基本單位 | 傳統(tǒng)進(jìn)程機(jī)制中,只能進(jìn)程間并發(fā) | 傳統(tǒng)的進(jìn)程間并發(fā),需要切換進(jìn)程的運(yùn)行環(huán)境,系統(tǒng)開(kāi)銷(xiāo)很大。 |
| 引入線程后,進(jìn)程是資源分配的基本單位,線程是調(diào)度的基本單位 | 引入線程后,各線程間也能并發(fā),提高了并發(fā)度 | 線程間并發(fā),如果是同一進(jìn)程內(nèi)的線程切換,則不需要切換進(jìn)程環(huán)境,系統(tǒng)開(kāi)銷(xiāo)小,也就是說(shuō)引入線程后,并發(fā)所帶來(lái)的系統(tǒng)開(kāi)銷(xiāo)減小。 |
切換進(jìn)程環(huán)境的類(lèi)比:
去圖書(shū)館看書(shū)。
切換進(jìn)程運(yùn)行環(huán)境 = 有一個(gè)不認(rèn)識(shí)的人要用桌子,你需要把你的書(shū)(運(yùn)行環(huán)境)收走,他把自己的書(shū)(運(yùn)行環(huán)境)放到桌上。
同一進(jìn)程內(nèi)的線程切換 = 你的舍友要用到這張書(shū)桌,可以不把桌子上的書(shū)收走,因?yàn)榇蠹冶舜苏J(rèn)識(shí)(屬于同一個(gè)進(jìn)程)。
2.1.5.3 線程的屬性
2.1.5.4 線程的實(shí)現(xiàn)方式
用戶級(jí)線程由應(yīng)用程序通過(guò)線程庫(kù)實(shí)現(xiàn)。所有的線程管理工作都由應(yīng)用程序負(fù)責(zé)(包括線程切換)。用戶級(jí)線程中,線程切換可以在用戶態(tài)下即可完成,無(wú)需操作系統(tǒng)干預(yù)。在用戶看來(lái),是有多個(gè)線程;但是對(duì)于操作系統(tǒng)內(nèi)核來(lái)說(shuō),并意識(shí)不到線程的存在。即用戶級(jí)線程對(duì)用戶不透明,對(duì)操作系統(tǒng)透明。
內(nèi)核級(jí)線程(Kernel-Level Thread,KTL,又稱為“內(nèi)核支持的線程”)
內(nèi)核級(jí)線程的管理工作由操作系統(tǒng)內(nèi)核完成。線程調(diào)度、切換等工作都由內(nèi)核負(fù)責(zé),因此內(nèi)核級(jí)線程的切換必然需要在核心態(tài)下才能完成。
在同時(shí)支持用戶級(jí)線程和內(nèi)核級(jí)線程的系統(tǒng)中,可采用兩者組合的方式:將n個(gè)用戶級(jí)線程映射到m個(gè)內(nèi)核級(jí)線程上(n>=m)
需要重點(diǎn)關(guān)注的是:操作系統(tǒng)只“看得見(jiàn)”內(nèi)核級(jí)線程,因此只有內(nèi)核級(jí)線程才是處理機(jī)分配的單位。
拿上面的映射圖來(lái)說(shuō),該進(jìn)程由兩個(gè)內(nèi)核級(jí)線程和三個(gè)用戶級(jí)線程構(gòu)成,在用戶看來(lái),這個(gè)進(jìn)程中有三個(gè)線程。但即使該進(jìn)程在一個(gè)4核處理機(jī)的計(jì)算機(jī)上運(yùn)行,也最多只能被分配到兩個(gè)核,最多只能有兩個(gè)用戶線程并行執(zhí)行。
2.1.5.5 多線程模型
在同時(shí)支持用戶級(jí)線程和內(nèi)核級(jí)線程的系統(tǒng)中,由幾個(gè)用戶級(jí)線程映射到幾個(gè)內(nèi)核級(jí)線程的問(wèn)題引出了“多線程模型”問(wèn)題。
多對(duì)一模型
多個(gè)用戶及線程映射到一個(gè)內(nèi)核級(jí)線程。每個(gè)用戶進(jìn)程只對(duì)應(yīng)一個(gè)內(nèi)核級(jí)線程。
優(yōu)點(diǎn):用戶級(jí)線程的切換在用戶空間即可完成,不需要切換到核心態(tài),線程管理的系統(tǒng)開(kāi)銷(xiāo)小,效率高。
缺點(diǎn):當(dāng)一個(gè)用戶級(jí)線程被阻塞后,整個(gè)進(jìn)程都會(huì)被阻塞,并發(fā)度不高。多個(gè)線程不可在多核處理機(jī)上并行運(yùn)行。
一對(duì)一模型
一個(gè)用戶及線程映射到一個(gè)內(nèi)核級(jí)線程。每個(gè)用戶進(jìn)程有與用戶級(jí)線程同數(shù)量的內(nèi)核級(jí)線程。
優(yōu)點(diǎn):當(dāng)一個(gè)線程被阻塞后,別的線程還可以繼續(xù)執(zhí)行,并發(fā)能力強(qiáng),多線程可在多核處理機(jī)上并行執(zhí)行。
缺點(diǎn):一個(gè)用戶進(jìn)程會(huì)占用多個(gè)內(nèi)核級(jí)線程,線程切換由操作系統(tǒng)內(nèi)核完成,需要切換到核心態(tài),因此線程管理的成本高,開(kāi)銷(xiāo)大。
多對(duì)多模型
n用戶線程映射到m個(gè)內(nèi)核級(jí)線程(n>=m)。每個(gè)用戶進(jìn)程對(duì)于m個(gè)內(nèi)核級(jí)線程。
其克服了多對(duì)一模型和一對(duì)多模型的缺點(diǎn)。
2.1.5.6 小結(jié)
這一小節(jié)的知識(shí)點(diǎn)易作為選擇題考查。
總結(jié)
以上是生活随笔為你收集整理的王道操作系统考研笔记——2.1.5 线程概念与多线程模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 八种ADSL接入情况中断流现象分析
- 下一篇: java信息管理系统总结_java实现科