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)系組合的其他方案