6進(jìn)程與線程

11.1進(jìn)程的概念

進(jìn)程的定義

進(jìn)程是指一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一次動(dòng)態(tài)執(zhí)行過(guò)程

精髓:正在執(zhí)行的程序述吸。

? ? ? ? ? ?正在計(jì)算機(jī)上執(zhí)行的程序?qū)嵗?/p>

? ? ? ? ? ?能分配給處理器并由處理器執(zhí)行的實(shí)體狈邑。

? ? ? ? ? ?具有以下特征的活動(dòng)單元:一組指令序列的執(zhí)行、一個(gè)當(dāng)前狀態(tài)和相關(guān)的系統(tǒng)資源集。

也可以把進(jìn)程當(dāng)成由一組元素組成的實(shí)體仑扑,進(jìn)程的兩個(gè)基本的元素是程序代碼(可能被執(zhí)行相同程序的其他進(jìn)程共享)和代碼相關(guān)聯(lián)的數(shù)據(jù)集。假設(shè)處理器開(kāi)始執(zhí)行這個(gè)程序代碼麻敌,且我們把這個(gè)執(zhí)行實(shí)體叫做進(jìn)程妇汗。在進(jìn)程執(zhí)行時(shí)帘不,任意給定一個(gè)時(shí)間,進(jìn)程都可以唯一地被表征為以下元素:

標(biāo)識(shí)符:跟這個(gè)進(jìn)程相關(guān)的唯一標(biāo)識(shí)符杨箭,用來(lái)區(qū)別其他進(jìn)程寞焙。

狀態(tài):如果進(jìn)程正在執(zhí)行,那么進(jìn)程處于運(yùn)行態(tài)互婿。

優(yōu)先級(jí):相對(duì)于其他進(jìn)程的優(yōu)先級(jí)捣郊。

程序計(jì)數(shù)器:程序中即將被執(zhí)行的下一條指令的地址。

內(nèi)存指針:包括程序代碼和進(jìn)程相關(guān)數(shù)據(jù)的指針慈参,還有和其

他進(jìn)程共享內(nèi)存塊的指針呛牲。

上下文數(shù)據(jù):進(jìn)程執(zhí)行時(shí)處理器的寄存器中的數(shù)據(jù)。

IO狀態(tài)信息:包括顯式的IO請(qǐng)求驮配、分配給進(jìn)程的IO設(shè)備

(例如磁帶驅(qū)動(dòng)器)和被進(jìn)程使用的文件列表等娘扩。

記賬信息:可能包括處理器時(shí)間總和着茸、使用的時(shí)鐘數(shù)總和、時(shí)間限制琐旁、記賬號(hào)等涮阔。



進(jìn)程的組成

進(jìn)程包含了正在運(yùn)行的一個(gè)程序的所有狀態(tài)信息

代碼數(shù)據(jù)狀態(tài)寄存器

CPU狀態(tài)CR0、指令指針I(yè)P

通用寄存器

AX旋膳、BX澎语、CX…

進(jìn)程占用系統(tǒng)資源

打開(kāi)文件途事、已分配內(nèi)存…

以上所有的構(gòu)成一個(gè)進(jìn)程控制塊

進(jìn)程的特點(diǎn)


動(dòng)態(tài)性

可動(dòng)態(tài)地創(chuàng)建验懊、結(jié)束進(jìn)程

并發(fā)性

進(jìn)程可以被獨(dú)立調(diào)度并占用處理機(jī)運(yùn)行

制約性

因訪問(wèn)共享數(shù)據(jù)/資源或進(jìn)程間同步而產(chǎn)生制約

獨(dú)立性

不同進(jìn)程的工作不相互影響

進(jìn)程與程序的聯(lián)系

■進(jìn)程是操作系統(tǒng)處于執(zhí)行狀態(tài)程序的抽象

程序=文件(靜態(tài)的可執(zhí)行文件)

進(jìn)程=執(zhí)行中的程序=程序+執(zhí)行狀態(tài)

■同一個(gè)程序的多次執(zhí)行過(guò)程對(duì)應(yīng)為不同進(jìn)程

內(nèi)存:保存代碼和數(shù)據(jù)

CPU:執(zhí)行指令

■進(jìn)程執(zhí)行需要的資源

如命令“l(fā)s”的多次執(zhí)行對(duì)應(yīng)多個(gè)進(jìn)程

進(jìn)程與程序的區(qū)別

■進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的

程序是有序代碼的集合

進(jìn)程是程序的執(zhí)行尸变,進(jìn)程有核心態(tài)/用戶態(tài)

■進(jìn)程是暫時(shí)的义图,程序的永久的

進(jìn)程是一個(gè)狀態(tài)變化的過(guò)程

程序可長(zhǎng)久保存

■進(jìn)程與程序的組成不同

進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊

11.2進(jìn)程控制塊(PCB召烂,Process Control Block)

操作系統(tǒng)管理控制進(jìn)程運(yùn)行所用的信息集合

■操作系統(tǒng)用PCB來(lái)描述進(jìn)程的基本情況以及運(yùn)行變化的過(guò)程(例如ID碱工,哪個(gè)程序,進(jìn)程的狀態(tài))

■PCB是進(jìn)程存在的唯一標(biāo)志

每個(gè)進(jìn)程都在操作系統(tǒng)中有一個(gè)對(duì)應(yīng)的PCB

進(jìn)程控制塊的使用

■進(jìn)程創(chuàng)建

生成該進(jìn)程的PCB

■進(jìn)程終止

回收它的PCB

■進(jìn)程的組織管理

通過(guò)對(duì)PCB的組織管理來(lái)實(shí)現(xiàn)

對(duì)進(jìn)程的所有操作都是通過(guò)進(jìn)程控制塊來(lái)實(shí)現(xiàn)的

進(jìn)程控制信息

■調(diào)度和狀態(tài)信息

調(diào)度進(jìn)程和處理機(jī)使用情況

■進(jìn)程間通信信息

進(jìn)程間通信相關(guān)的各種標(biāo)識(shí)

■存儲(chǔ)管理信息

指向進(jìn)程映像存儲(chǔ)空間數(shù)據(jù)結(jié)構(gòu)(占了那些內(nèi)存奏夫,打開(kāi)哪些文件怕篷,進(jìn)程結(jié)束后操作系統(tǒng)要對(duì)其進(jìn)行回收)

■進(jìn)程所用資源

進(jìn)程使用的系統(tǒng)資源,如打開(kāi)文件等

■有關(guān)數(shù)據(jù)結(jié)構(gòu)連接信息

與PCB相關(guān)的進(jìn)程隊(duì)列


程序酗昼、數(shù)據(jù)廊谓、棧和屬性的集合稱為進(jìn)程映像。


進(jìn)程控制塊的組織

鏈表

·同一狀態(tài)的進(jìn)程其PCB成一鏈表麻削,多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表

各狀態(tài)的進(jìn)程形成不同的鏈表:就緒鏈表蒸痹、阻塞鏈表

索引表

·同一狀態(tài)的進(jìn)程歸入一個(gè)索引表(由索引指向PCB),多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的索引表

各狀態(tài)的進(jìn)行形成不同的索引表:就緒索引表呛哟、阻塞索引表

注:通過(guò)指針指向進(jìn)程控制塊的指針?lè)诺剿饕韮?nèi)叠荠,不同的狀態(tài)構(gòu)成不同的索引表


11.3進(jìn)程狀態(tài)

一個(gè)程序執(zhí)行,啟動(dòng)過(guò)程中就會(huì)導(dǎo)致一個(gè)新的進(jìn)程的創(chuàng)建扫责。創(chuàng)建完了之后它就會(huì)是程序進(jìn)入執(zhí)行的狀態(tài)榛鼎,它會(huì)占用CPU來(lái)執(zhí)行。在執(zhí)行的過(guò)程當(dāng)中由于等待某個(gè)資源或者等待某個(gè)數(shù)據(jù)而進(jìn)入等待狀態(tài)鳖孤,就導(dǎo)致進(jìn)程進(jìn)行等待者娱。一個(gè)優(yōu)先級(jí)低的進(jìn)程正在執(zhí)行,有一個(gè)高優(yōu)先級(jí)的進(jìn)程等待狀態(tài)結(jié)束淌铐,就是它等待的條件已經(jīng)成熟了肺然,要馬上開(kāi)始投入運(yùn)行,當(dāng)前這個(gè)進(jìn)程是會(huì)搶先腿准,先進(jìn)入就緒狀態(tài)這個(gè)進(jìn)程叫搶先际起,而當(dāng)前正在執(zhí)行這個(gè)進(jìn)程叫做被搶占拾碌。處于等待狀態(tài)的進(jìn)程會(huì)碰到被喚醒的情況,外界條件滿足的時(shí)候它會(huì)被喚醒街望,喚醒之后又排到這個(gè)就緒隊(duì)列里頭校翔,它等待占用CPU來(lái)繼續(xù)執(zhí)行。那等最后回到CPU上執(zhí)行灾前,執(zhí)行到最后的某種狀態(tài)防症,整個(gè)程序的工作全部執(zhí)行完,那就有可能進(jìn)到進(jìn)程結(jié)束的狀態(tài)哎甲,那這時(shí)候到達(dá)結(jié)束蔫敲。


進(jìn)程創(chuàng)建

一個(gè)程序執(zhí)行,啟動(dòng)過(guò)程中就會(huì)導(dǎo)致一個(gè)新的進(jìn)程的創(chuàng)建炭玫。

引起進(jìn)程創(chuàng)建的情況

系統(tǒng)初始化時(shí)

用戶請(qǐng)求創(chuàng)建一個(gè)新進(jìn)程

正在運(yùn)行的進(jìn)程執(zhí)行了創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用

注:每一個(gè)進(jìn)程有一個(gè)進(jìn)程控制塊奈嘿,這些相關(guān)的它要占用內(nèi)存,把代碼和數(shù)據(jù)都拷進(jìn)去吞加,這些資源的準(zhǔn)備過(guò)程裙犹,就對(duì)應(yīng)到進(jìn)程創(chuàng)建

進(jìn)程執(zhí)行

創(chuàng)建完了之后它就會(huì)是程序進(jìn)入執(zhí)行的狀態(tài),它會(huì)占用CPU來(lái)執(zhí)行衔憨。

內(nèi)核選擇一個(gè)就緒的進(jìn)程叶圃,讓它占用處理機(jī)并執(zhí)行

■如何選擇?

根據(jù)處理機(jī)調(diào)度算法來(lái)選擇践图,不同的算法特征不一樣

進(jìn)程等待

在執(zhí)行的過(guò)程當(dāng)中由于等待某個(gè)資源或者等待某個(gè)數(shù)據(jù)而進(jìn)入等待狀態(tài)掺冠,就導(dǎo)致進(jìn)程進(jìn)行等待。

■進(jìn)程進(jìn)入等待(阻塞)的情況:

請(qǐng)求并等待系統(tǒng)服務(wù)平项,無(wú)法馬上完成

啟動(dòng)某種操作赫舒,無(wú)法馬上完成(例如讀寫操作)

需要的數(shù)據(jù)沒(méi)有到達(dá)

■只有進(jìn)程自身才能知道何時(shí)需要等待某種事件的發(fā)生(等待事件的進(jìn)入一定是正在運(yùn)行這個(gè)進(jìn)程本身內(nèi)部的原因所導(dǎo)致的,它不是由于外部原因所導(dǎo)致的)

進(jìn)程搶占

一個(gè)優(yōu)先級(jí)低的進(jìn)程正在執(zhí)行闽瓢,有一個(gè)高優(yōu)先級(jí)的進(jìn)程等待狀態(tài)結(jié)束接癌,就是它等待的條件已經(jīng)成熟了,要馬上開(kāi)始投入運(yùn)行扣讼,當(dāng)前這個(gè)進(jìn)程是會(huì)搶先缺猛,先進(jìn)入就緒狀態(tài)這個(gè)進(jìn)程叫搶先,而當(dāng)前正在執(zhí)行這個(gè)進(jìn)程叫做被搶占椭符。

■進(jìn)程會(huì)被搶占的情況

高優(yōu)先級(jí)進(jìn)程就緒

進(jìn)程執(zhí)行當(dāng)前時(shí)間用完(操作系統(tǒng)分配的運(yùn)行時(shí)間(時(shí)間片)用完了)

進(jìn)程喚醒

處于等待狀態(tài)的進(jìn)程會(huì)碰到被喚醒的情況荔燎,外界條件滿足的時(shí)候它會(huì)被喚醒,喚醒之后又排到這個(gè)就緒隊(duì)列里頭销钝,它等待占用CPU來(lái)繼續(xù)執(zhí)行有咨。

■喚醒進(jìn)程的情況:

被阻塞進(jìn)程需要的資源可被滿足

被阻塞進(jìn)程等待的事件到達(dá)

■進(jìn)程只能被別的進(jìn)程或操作系統(tǒng)喚醒

進(jìn)程結(jié)束

那等最后回到CPU上執(zhí)行,執(zhí)行到最后的某種狀態(tài)蒸健,整個(gè)程序的工作全部執(zhí)行完座享,那就有可能進(jìn)到進(jìn)程結(jié)束的狀態(tài)婉商,那這時(shí)候到達(dá)結(jié)束

■進(jìn)程結(jié)束的情況:

正常退出(自愿的)

錯(cuò)誤退出(自愿的)

致命錯(cuò)誤(強(qiáng)制性的)

被其他進(jìn)程所殺(強(qiáng)制性的)

注:要把進(jìn)程執(zhí)行所占用的所有資源還給操作系統(tǒng)以便于它能把它分配給

新的進(jìn)程使用

精髓:導(dǎo)致進(jìn)程終止的原因



11.4三狀態(tài)進(jìn)程模型


進(jìn)程在整個(gè)生命周期分為三種基本狀態(tài):就緒,運(yùn)行渣叛,等待丈秩。

運(yùn)行狀態(tài)(Running)

進(jìn)程正在處理機(jī)上運(yùn)行

注:一次只有一個(gè)進(jìn)程在處理器上運(yùn)行。

就緒狀態(tài)(Ready)

進(jìn)程獲得了除處理機(jī)之外的所需資源淳衙,得到處理機(jī)即可運(yùn)行蘑秽。

當(dāng)進(jìn)程分配到CPU并執(zhí)行時(shí),可能發(fā)生以下幾種事件:

1進(jìn)程可能發(fā)出一個(gè)I/O請(qǐng)求箫攀,并被放到I/O隊(duì)列中 .

2進(jìn)程可能創(chuàng)建一個(gè)新的子進(jìn)程肠牲,并等待其結(jié)束。

3進(jìn)程可能會(huì)由于中斷而強(qiáng)制釋放CPU匠童,并被放回到就緒隊(duì)列中埂材。

等待狀態(tài)(又稱阻塞狀態(tài)Blocked )

進(jìn)程正在等待某一事件的出現(xiàn)而暫停運(yùn)行

創(chuàng)建狀態(tài)(New)

一個(gè)進(jìn)程正在被創(chuàng)建塑顺,還沒(méi)被轉(zhuǎn)到就緒狀態(tài)之前的狀態(tài)

結(jié)束狀態(tài)(Exit)

一個(gè)進(jìn)程正在從系統(tǒng)中消失時(shí)的狀態(tài)汤求,這是因?yàn)檫M(jìn)程結(jié)束或由于其他原因所導(dǎo)致

過(guò)程解讀

■NULL→創(chuàng)建

一個(gè)新進(jìn)程被產(chǎn)生出來(lái)執(zhí)行一個(gè)程序

■創(chuàng)建→就緒

當(dāng)進(jìn)程被創(chuàng)建完成并初始化后,一切就緒準(zhǔn)備運(yùn)行時(shí)严拒,變?yōu)榫途w狀態(tài)

■就緒→運(yùn)行

處于就緒狀態(tài)的進(jìn)程被進(jìn)程調(diào)度程序選中后扬绪,就分配到處理機(jī)上來(lái)運(yùn)行

■運(yùn)行→結(jié)束

當(dāng)進(jìn)程表示它已經(jīng)完成或者因出錯(cuò),當(dāng)前運(yùn)行進(jìn)程會(huì)由操作系統(tǒng)作結(jié)束處理

■運(yùn)行→就緒

處于運(yùn)行狀態(tài)的進(jìn)程在其運(yùn)行過(guò)程中裤唠,由于分配給它的處理機(jī)時(shí)間片用完而讓出處理機(jī)

■運(yùn)行→等待

當(dāng)進(jìn)程請(qǐng)求某資源且必須等待時(shí)

■等待→就緒

當(dāng)進(jìn)程要等待某事件到來(lái)時(shí)挤牛,它從阻塞狀態(tài)變到就緒狀態(tài)

11.5掛起進(jìn)程模型

處在掛起狀態(tài)的進(jìn)程映像在磁盤上,目的是減少進(jìn)程占用內(nèi)存


掛起狀態(tài)

■等待掛起狀態(tài)(Blocked-suspend)

進(jìn)程在外存并等待某事件的出現(xiàn)

■就緒掛起狀態(tài)(Ready-suspend)

進(jìn)程在外存种蘸,但只要進(jìn)入內(nèi)存墓赴,即可運(yùn)行

注:進(jìn)不到內(nèi)存里的原因是內(nèi)存的空間不夠或者說(shuō)它的優(yōu)先級(jí)不夠高

與掛起相關(guān)的狀態(tài)轉(zhuǎn)換

掛起(Suspend):把一個(gè)進(jìn)程從內(nèi)存轉(zhuǎn)到外存

■等待->等待掛起

沒(méi)有進(jìn)程處于就緒狀態(tài)或就緒進(jìn)程要求更多內(nèi)存資源

■就緒->就緒掛起

當(dāng)有高優(yōu)先級(jí)等待(系統(tǒng)認(rèn)為會(huì)很快就緒的)進(jìn)程和低優(yōu)先級(jí)就緒進(jìn)程

■運(yùn)行->就緒掛起

對(duì)搶先式分時(shí)系統(tǒng),當(dāng)有高優(yōu)先級(jí)等待掛起進(jìn)程因事件出現(xiàn)而進(jìn)入就緒掛起

注:比如說(shuō)有高優(yōu)先級(jí)等待的進(jìn)程因事件的出現(xiàn)而進(jìn)入就緒,而這時(shí)候呢沒(méi)有足夠的內(nèi)存空間,就會(huì)把當(dāng)前正在運(yùn)行的這個(gè)進(jìn)程搶先并且把它變成掛起就緒的狀態(tài)

與掛起相關(guān)的狀態(tài)轉(zhuǎn)換

在外存時(shí)的狀態(tài)轉(zhuǎn)換

■等待掛起->就緒掛起

當(dāng)有等待掛起進(jìn)程因相關(guān)事件出現(xiàn)

激活(Activate):把一個(gè)進(jìn)程從外存轉(zhuǎn)到內(nèi)存

■就緒掛起->就緒

沒(méi)有就緒進(jìn)程或掛起就緒進(jìn)程優(yōu)先級(jí)高于就緒進(jìn)程

■等待掛起->等待

當(dāng)一個(gè)進(jìn)程釋放足夠內(nèi)存航瞭,并有高優(yōu)先級(jí)等待掛起進(jìn)程

狀態(tài)隊(duì)列

■由操作系統(tǒng)來(lái)維護(hù)一組隊(duì)列诫硕,表示系統(tǒng)中所有進(jìn)程的當(dāng)前狀態(tài)

■不同隊(duì)列表示不同狀態(tài)

就緒隊(duì)列、各種等待隊(duì)列

■根據(jù)進(jìn)程狀態(tài)不同刊侯,進(jìn)程PCB加入相應(yīng)隊(duì)列

進(jìn)程狀態(tài)變化時(shí)章办,它所在的PCB會(huì)從一個(gè)隊(duì)列

換到另一個(gè)


精髓:掛起的一些總結(jié)

掛起態(tài)進(jìn)程的特點(diǎn):

1)進(jìn)程不能立即執(zhí)行。

2)進(jìn)程可能是或不是正在等待一個(gè)事件滨彻。如果是藕届,阻塞條件不依賴于掛起條件,阻塞事件 的發(fā)生不會(huì)使進(jìn)程立即被執(zhí)行亭饵。

3)為阻止進(jìn)程執(zhí)行休偶,可以通過(guò)代理把這個(gè)進(jìn)程置于掛起狀態(tài),代理可以是進(jìn)程自己辜羊,也可以是父進(jìn)程或操作系統(tǒng)踏兜。

4)除非代理顯式地命令系統(tǒng)進(jìn)行狀態(tài)轉(zhuǎn)換懂算,否則進(jìn)程無(wú)法從這個(gè)狀態(tài)中轉(zhuǎn)移。

導(dǎo)致掛起的原因


11.6線程的概念

為什么引入線程

每個(gè)進(jìn)程內(nèi)部它的指令執(zhí)行是有一個(gè)叫指令指針的寄存器來(lái)描述當(dāng)前這個(gè)進(jìn)程執(zhí)行到什么地方庇麦,但是在實(shí)際使用的時(shí)候计技,在一個(gè)進(jìn)程內(nèi)部希望它有更好的并發(fā)性,那這就是引入線程的原因山橄。

多線程的解決思路

在進(jìn)程內(nèi)部增加一類實(shí)體垮媒,滿足以下特性:

(1)實(shí)體之間可以并發(fā)執(zhí)行

(2)實(shí)體之間共享相同的地址空間

這種實(shí)體就是線程(Thread)

線程的概念

線程是進(jìn)程的一部分,描述指令流執(zhí)行狀態(tài)航棱。它是進(jìn)程中的指令執(zhí)行流的最小單元睡雇,是CPU調(diào)度的基本單位。

■進(jìn)程的資源分配角色:進(jìn)程由一組相關(guān)資源構(gòu)成饮醇,包括地址空間(代碼段它抱、數(shù)據(jù)段)、打開(kāi)的文件等各種資源

■線程的處理機(jī)調(diào)度角色:線程描述在進(jìn)程資源環(huán)境中的指令流執(zhí)行狀態(tài)

注:把相關(guān)的關(guān)于執(zhí)行流的狀態(tài)的信息變成是線程控制塊,線程控制塊也從屬于進(jìn)程控制塊,用指針指向它.此時(shí)就可以有多個(gè)指令指針朴艰,多個(gè)堆棧和多個(gè)CPU里的寄存器的現(xiàn)場(chǎng)保護(hù)观蓄,這個(gè)現(xiàn)場(chǎng)保護(hù)是和執(zhí)行流相關(guān)的。

線程是CPU使用的基本單元祠墅,它由線程ID,程序計(jì)數(shù)器侮穿、寄存器集合和棧組成。它與屬于同一進(jìn)程的其他線程共享代碼段毁嗦、數(shù)據(jù)段和其他操作系統(tǒng)資源亲茅。


進(jìn)程和線程的關(guān)系


線程= 進(jìn)程 - 共享資源

線程的優(yōu)點(diǎn):

一個(gè)進(jìn)程中可以同時(shí)存在多個(gè)線程

各個(gè)線程之間可以并發(fā)地執(zhí)行

各個(gè)線程之間可以共享地址空間和文件等資源

線程的缺點(diǎn):

一個(gè)線程崩潰,會(huì)導(dǎo)致其所屬進(jìn)程的所有線程崩潰

不同操作系統(tǒng)對(duì)線程的支持


線程與進(jìn)程的比較

■進(jìn)程是資源分配單位狗准,線程是CPU調(diào)度單位

■進(jìn)程擁有一個(gè)完整的資源平臺(tái)克锣,而線程只獨(dú)享指令流執(zhí)行的必要資源,如寄存■器和棧(相互需要保存的信息就少了腔长,執(zhí)行就快了)

■線程具有就緒袭祟、等待和運(yùn)行三種基本狀態(tài)和狀態(tài)間的轉(zhuǎn)換關(guān)系

■線程能減少并發(fā)執(zhí)行的時(shí)間和空間開(kāi)銷

線程的創(chuàng)建時(shí)間比進(jìn)程短

線程的終止時(shí)間比進(jìn)程短

同一進(jìn)程內(nèi)的線程切換時(shí)間比進(jìn)程短

由于同一進(jìn)程的各線程間共享內(nèi)存和文件資源,可不通過(guò)內(nèi)核進(jìn)行直接通信

11.7用戶進(jìn)程

線程的三種實(shí)現(xiàn)方式

■用戶線程:在用戶空間實(shí)現(xiàn)

POSIX Pthreads饼酿,Mach C-threads榕酒,Solaris threads

■內(nèi)核線程:在內(nèi)核中實(shí)現(xiàn)

Windows,Solaris故俐,Linux

■輕量級(jí)進(jìn)程:在內(nèi)核中實(shí)現(xiàn)想鹰,支持用戶線程

Solaris ??????(LightWeight Process)

用戶線程


由一組用戶級(jí)的線程庫(kù)函數(shù)來(lái)完成線程的管理,包括線程的創(chuàng)建药版、終止辑舷、同步和調(diào)度等

注:線程控制塊是在用戶態(tài)的,由用戶應(yīng)用程序自己來(lái)維護(hù)

用戶線程的特征

■不依賴于操作系統(tǒng)的內(nèi)核

內(nèi)核不了解用戶線程的存在

可用于不支持線程的多進(jìn)程操作系統(tǒng)

■在用戶空間實(shí)現(xiàn)的線程機(jī)制

每個(gè)進(jìn)程有私有的線程控制塊(TCB)列表

TCB由線程庫(kù)函數(shù)維護(hù)

■同一進(jìn)程內(nèi)的用戶線程切換速度快

無(wú)需用戶態(tài)/核心態(tài)切換

■允許每個(gè)進(jìn)程擁有自已的線程調(diào)度算法

用戶線程的不足

■線程發(fā)起系統(tǒng)調(diào)用而阻塞時(shí)槽片,則整個(gè)進(jìn)程進(jìn)入等待

■不支持基于線程的處理機(jī)搶占

除非當(dāng)前運(yùn)行線程主動(dòng)放棄何缓,它所在進(jìn)程的其他線程無(wú)法搶占CPU

■只能按進(jìn)程分配CPU時(shí)間

多個(gè)線程進(jìn)程中肢础,每個(gè)線程的時(shí)間片較少

11.8內(nèi)核線程


由內(nèi)核通過(guò)系統(tǒng)調(diào)用實(shí)現(xiàn)的線程機(jī)制,由內(nèi)核完成線程的創(chuàng)建碌廓、終止和管理

內(nèi)核線程的特征

■由內(nèi)核維護(hù)PCB和TCB

■線程執(zhí)行系統(tǒng)調(diào)用而被阻塞不影響其他線程

■線程的創(chuàng)建传轰、終止和切換開(kāi)銷相對(duì)較大

通過(guò)系統(tǒng)調(diào)用/內(nèi)核函數(shù),在內(nèi)核實(shí)現(xiàn)

■以線程為單位進(jìn)行CPU時(shí)間分配

多線程的進(jìn)程可獲得更多CPU時(shí)間

精髓:

■主要缺點(diǎn):在把控制從一個(gè)線程傳送到同一個(gè)進(jìn)程內(nèi)的另一個(gè)線程時(shí)谷婆,需要到內(nèi)核的狀態(tài)切換慨蛙。

輕權(quán)進(jìn)程(LightWeight Process)

內(nèi)核支持的用戶線程。一個(gè)進(jìn)程可有一個(gè)或多個(gè)輕量級(jí)進(jìn)程纪挎,每個(gè)輕權(quán)進(jìn)程由一個(gè)單獨(dú)的內(nèi)核線程來(lái)支持期贫。(Solaris/Linux)

用戶線程與內(nèi)核線程的對(duì)應(yīng)關(guān)系


線程與進(jìn)程關(guān)系組合的其他方案


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市异袄,隨后出現(xiàn)的幾起案子通砍,更是在濱河造成了極大的恐慌,老刑警劉巖烤蜕,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件封孙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玖绿,警方通過(guò)查閱死者的電腦和手機(jī)敛瓷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)斑匪,“玉大人,你說(shuō)我怎么就攤上這事锋勺∈慈常” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵庶橱,是天一觀的道長(zhǎng)贮勃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)苏章,這世上最難降的妖魔是什么寂嘉? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮枫绅,結(jié)果婚禮上泉孩,老公的妹妹穿的比我還像新娘。我一直安慰自己并淋,他們只是感情好寓搬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著县耽,像睡著了一般句喷。 火紅的嫁衣襯著肌膚如雪镣典。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天唾琼,我揣著相機(jī)與錄音兄春,去河邊找鬼。 笑死锡溯,一個(gè)胖子當(dāng)著我的面吹牛神郊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趾唱,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涌乳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了甜癞?” 一聲冷哼從身側(cè)響起夕晓,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悠咱,沒(méi)想到半個(gè)月后蒸辆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡析既,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年躬贡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眼坏。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拂玻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宰译,到底是詐尸還是另有隱情檐蚜,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布沿侈,位于F島的核電站闯第,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缀拭。R本人自食惡果不足惜咳短,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛛淋。 院中可真熱鬧咙好,春花似錦、人聲如沸铣鹏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至葵第,卻和暖如春绘迁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卒密。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工缀台, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哮奇,地道東北人膛腐。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鼎俘,于是被迫代替她去往敵國(guó)和親哲身。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 又來(lái)到了一個(gè)老生常談的問(wèn)題贸伐,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢勘天? 今天就這個(gè)問(wèn)題開(kāi)始,來(lái)談?wù)劜?..
    tangsl閱讀 4,088評(píng)論 0 23
  • 進(jìn)程的描述與控制 1.前趨圖與程序執(zhí)行1.1 前趨圖介紹:描述程序先后執(zhí)行順序捉邢,又稱為有向無(wú)循環(huán)圖脯丝,可記為DAG(...
    孫夢(mèng)翔閱讀 698評(píng)論 0 1
  • 進(jìn)程和線程 進(jìn)程線程的區(qū)別1、進(jìn)程是什么伏伐?是具有一定獨(dú)立功能的程序宠进、它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,重點(diǎn)...
    HeartGo閱讀 1,193評(píng)論 0 4
  • 第三章 公交卡和硬幣 洛揚(yáng)今天的飛機(jī)就要回國(guó)藐翎。查理提前一天給洛揚(yáng)發(fā)了信息材蹬,提議洛揚(yáng)先把論文的抄襲解釋簽個(gè)字,這樣查...
    李想想閱讀 468評(píng)論 0 0
  • js 基礎(chǔ) var val = (1,2,4)val //4 var obj = {}Object.defineP...
    jobn_joy閱讀 336評(píng)論 0 1