二.進(jìn)程管理

2.1進(jìn)程的基本概念

1.程序順序執(zhí)行時的特征:

(1)順序性

??? 處理機(jī)的操作嚴(yán)格按程序規(guī)定順序執(zhí)行。

? ?(2) ? 封閉性

??? 程序一旦開始執(zhí)行仇箱,其計算結(jié)果不受外界因素影響剂桥。

? ?(3) 可再現(xiàn)性

??? 程序執(zhí)行只要初始條件一樣,不論如何停頓斟薇,重復(fù)執(zhí)行多少次結(jié)果都一樣堪滨。

2.并發(fā)程序執(zhí)行時的特征:

????間斷性(運(yùn)行表現(xiàn))

????????多道->程序并發(fā)執(zhí)行->要共享系統(tǒng)的資源 ->形成相互制約的關(guān)系->??相互制約導(dǎo)致并發(fā)程序具有“執(zhí)行——暫透は洌——執(zhí)行”這種間斷性的活動規(guī)律发笔。

不可再現(xiàn)結(jié)果的并發(fā)無意義

3.進(jìn)程

pcb內(nèi)信息

定義:進(jìn)程是進(jìn)程實體的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位铺罢。

特征:①結(jié)構(gòu)性特征韭赘,進(jìn)程的根本——PCB ?

????????????②動態(tài)性

????????????????????進(jìn)程實質(zhì)上是進(jìn)程實體的一次有生命期的執(zhí)行過程泉瞻。程序只是靜態(tài)的一組有序指令袖牙。

????????????????????進(jìn)程最基本特征

????????????③并發(fā)性

????????????????????多個進(jìn)程實體同存于內(nèi)存中鞭达,在一段時間內(nèi)同時運(yùn)行畴蹭。

????????????????????有PCB的程序才能并發(fā)叨襟。

????????????④獨(dú)立性

? ? ? ? ? ? ⑤異步性

基本狀態(tài):

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

????? 進(jìn)程獲得除CPU之外的所有必需資源,一旦得到CPU控制權(quán)右犹,可立即運(yùn)行傀履。

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

????? 進(jìn)程已獲得所有運(yùn)行必需的資源钓账,正在處理機(jī)上執(zhí)行絮宁。

(3)阻塞狀態(tài)(Blocked)

????? 正在執(zhí)行的進(jìn)程由于發(fā)生某事件(請求I/O绍昂、申請緩沖、時間片到)而暫時無法執(zhí)行時跳纳,便放棄CPU后暫停寺庄。

進(jìn)程的三基態(tài)的轉(zhuǎn)換

各種狀態(tài)下的進(jìn)程隊列

單處理機(jī)系統(tǒng)斗塘,執(zhí)行態(tài)的進(jìn)程只有一個馍盟;

就緒態(tài)贞岭、阻塞態(tài)的進(jìn)程可有多個曹步。一般講它們分別排稱一個隊列,稱就緒隊列俊柔、阻塞隊列雏婶。

阻塞隊列有的會根據(jù)不同原因再排成多個隊列留晚。

引入掛起狀態(tài)的狀態(tài)轉(zhuǎn)換圖

4.進(jìn)程控制塊PCB

進(jìn)程實體:代碼段+數(shù)據(jù)段+PCB

定義:存放進(jìn)程的管理和控制信息的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程控制塊。

OS對進(jìn)程進(jìn)行控制和管理圍繞PCB進(jìn)行

分析OS調(diào)度某進(jìn)程的過程

1)赋焕、查該進(jìn)程的PCB隆判,獲取其狀態(tài)、優(yōu)先級臭挽;

2)欢峰、根據(jù)PCB保存的處理機(jī)狀態(tài)信息赤赊,恢復(fù)現(xiàn)場;

3)吹截、根據(jù)PCB中程序和數(shù)據(jù)的內(nèi)存始址凝危,找到其程序和數(shù)據(jù)懦铺;

4)支鸡、執(zhí)行中的同步信號等也要查閱PCB急前,暫停時進(jìn)程執(zhí)行的處理機(jī)環(huán)境保存回PCB瀑构。

重要性

1)寺晌、進(jìn)程控制塊是進(jìn)程存在的唯一標(biāo)志:進(jìn)程創(chuàng)建時呻征,PCB建立并伴隨進(jìn)程運(yùn)行的全過程边篮,直到進(jìn)程撤消而撤消。PCB就象我們的戶口凌受。

2)、進(jìn)程管理和控制的最重要的數(shù)據(jù)結(jié)構(gòu)誊册。

2.2進(jìn)程控制

基本過程:進(jìn)程的創(chuàng)建案怯、進(jìn)程的終止嘲碱、進(jìn)程的阻塞與喚醒麦锯、進(jìn)程的掛起和激活扶欣;

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

1)一個進(jìn)程創(chuàng)建另一進(jìn)程的事件(原因)

(1)用戶登錄:分時情況下用戶的請求

(2)作業(yè)調(diào)度:批處理中

(3)提供服務(wù):運(yùn)行中的用戶程序提出功能請求,要創(chuàng)建服務(wù)進(jìn)程(如打印服務(wù))

(4)應(yīng)用請求:應(yīng)用程序自己創(chuàng)建進(jìn)程,完成特定功能的新進(jìn)程煤痕。(木馬程序)

2)創(chuàng)建過程#*#

(1)申請空白PCB

(2)為新進(jìn)程分配資源

? ????主要是內(nèi)存資源的處理

(3)初始化進(jìn)程控制塊

? ????標(biāo)識符(包括父進(jìn)程的)摆碉、程序計數(shù)器指向程序入口地址巷帝,就緒態(tài)楞泼、優(yōu)先級等信息的填寫堕阔。

(4)將新進(jìn)程插入就緒隊列

注:上述過程很關(guān)鍵超陆,不能被打斷J毖健=髂取屎债!

2.進(jìn)程的終止

1)引起進(jìn)程終止的事件

2)終止過程

對上述事件盆驹,OS調(diào)用內(nèi)核終止原語,執(zhí)行下列過程:

(1)根據(jù)進(jìn)程標(biāo)示符廉丽,檢索出該進(jìn)程PCB正压,讀其狀態(tài)。

? ????*IF 執(zhí)行態(tài)责球,立即終止該進(jìn)程焦履,置調(diào)度標(biāo)志為真,指示重新進(jìn)行調(diào)度雏逾。

? ????*IF 有子孫進(jìn)程嘉裤,亦應(yīng)予以終止,以防成為不可控進(jìn)程栖博。

(2)歸還全部資源至其父進(jìn)程或系統(tǒng)屑宠。

(3)將該進(jìn)程PCB從所在隊列或鏈表中移出。

3.進(jìn)程的阻塞與喚醒

1)引起進(jìn)程阻塞和喚醒的事件

(1)請求系統(tǒng)服務(wù)的滿足情況躺翻;

(2)啟動某種需等待(I/O)操作省店;

(3)合作需要的新數(shù)據(jù)尚未到達(dá)粗俱;

(4)執(zhí)行某功能的進(jìn)程暫時無新工作可做(如發(fā)送數(shù)據(jù)進(jìn)程)偏塞。

2)阻塞和喚醒過程

由進(jìn)程調(diào)用阻塞原語阻塞自己古今,是主動行為:

(1)將PCB中的狀態(tài)改為阻塞

(2)該P(yáng)CB加入到阻塞隊列中

(3)轉(zhuǎn)進(jìn)程調(diào)度抵碟,將處理機(jī)分配給另一進(jìn)程

(4)進(jìn)行進(jìn)程切換宪摧,即根據(jù)兩切換進(jìn)程的PCB,保護(hù)與重新設(shè)置處理機(jī)狀態(tài)。

阻塞與喚醒原語作用相反,成對使用

? ????阻塞進(jìn)程等待的事件發(fā)生時倒谷,有關(guān)進(jìn)程(如放棄該資源的進(jìn)程)調(diào)用喚醒原語把等待該事件的進(jìn)程喚醒倍靡。

(1)把阻塞進(jìn)程從等待該事件的阻塞隊列中移出办桨;

(2)將其PCB中的現(xiàn)行狀態(tài)改為就緒;

(3)將PCB插入到就緒隊列中。

4.進(jìn)程的掛起與激活

? 掛起原語將指定進(jìn)程或阻塞進(jìn)程掛起拦英。

(1)檢查被掛起進(jìn)程的狀態(tài)岗憋,活動就緒則改為靜止就緒,活動阻塞則改為靜止阻塞。

(2)將該P(yáng)CB復(fù)制到內(nèi)存(方便檢查)/外存(對換)指定區(qū)域尿庐。

(3)*若掛起的進(jìn)程是執(zhí)行態(tài)皮假,則需重新進(jìn)行進(jìn)程調(diào)度。

注意:進(jìn)程只能掛起自己或其子孫進(jìn)程。

激活原語的執(zhí)行過程

(1)若掛起進(jìn)程在外存上,將其調(diào)入內(nèi)存肛根;

(2)檢查進(jìn)程狀態(tài),若處于靜止就緒,則改為活動就緒草冈,若處于靜止阻塞隙赁,則改為活動阻塞蠕趁。

*關(guān)于調(diào)度

(1)進(jìn)程控制中,狀態(tài)轉(zhuǎn)換和調(diào)度密切相關(guān)早处。

(2)運(yùn)行態(tài)進(jìn)程的改變必然產(chǎn)生調(diào)度行為

(3)只要產(chǎn)生新就緒態(tài)進(jìn)程桃序,就需考慮調(diào)度策略

(4)只要是采用搶占式調(diào)度忱反,要檢查新就緒進(jìn)程是否可搶占CPU,引起新的調(diào)度巩割。

2.3進(jìn)程同步

兩種制約關(guān)系:

(1).間接相互制約關(guān)系:主要源于資源共享,表現(xiàn)為

????進(jìn)程A---打印機(jī)資源---進(jìn)程B(互斥)

(2).直接相互制約關(guān)系:主要源于進(jìn)程合作嗦嗡,表現(xiàn)為

????進(jìn)程A寫緩沖---進(jìn)程B讀緩沖(有序)

1.進(jìn)程同步的基本概念

1)進(jìn)程同步的主要任務(wù):

? ?使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作滋恬,從而使程序的執(zhí)行具有可再現(xiàn)性。

調(diào)度抱究。

2)臨界資源

理解同步

同步

3)臨界區(qū)

每個進(jìn)程中訪問臨界資源的那段代碼叫臨界區(qū)恢氯。為了正確同步,對臨界區(qū)的代碼要增加控制

(1)進(jìn)入?yún)^(qū):對欲訪問的臨界資源進(jìn)行檢鼓寺。若此刻未被訪問勋拟,設(shè)正在訪問的標(biāo)志

(2)臨界區(qū):訪問臨界資源的代碼。

(3)退出區(qū):將正在訪問的標(biāo)志恢復(fù)為未被訪問的標(biāo)志

(4)剩余區(qū):其余部分

實現(xiàn)互斥的方法應(yīng)符合如下每條原則

空閑讓進(jìn):資源使用最基本原則

忙則等待:保證互斥

有限等待:合適時被喚醒防止死等

讓權(quán)等待:能主動釋放CPU防止忙等

4)同步機(jī)制應(yīng)遵循的規(guī)則

①關(guān)中斷

進(jìn)入鎖測試前關(guān)閉中斷妈候,直到完成鎖測試并上鎖后才能打開中斷敢靡。進(jìn)程在臨界區(qū)執(zhí)行期間,系統(tǒng)不響應(yīng)中斷苦银,從而不引發(fā)調(diào)度啸胧。

缺點(diǎn):

濫用風(fēng)險

關(guān)中斷時間過長會影響效率,限制CPU交叉執(zhí)行能力

不適用于多CPU系統(tǒng)

同步控制的關(guān)鍵

主要涉及”判斷”和”修改標(biāo)志”操作

(1)不應(yīng)被打斷(原語幔虏,OS核心態(tài)運(yùn)行)

(2)如何制定一種寫法纺念,使標(biāo)志的使用適用于各種具體應(yīng)用情況?

2.信號量機(jī)制

1) 整型信號量

最初的信號量機(jī)制想括,兩個原子操作對一個共享整型量進(jìn)行操作陷谱。

信號量定義為一個整型量;根據(jù)初始情況賦相應(yīng)的值瑟蜈;僅能通過兩個原子操作來訪問叭首。

P操作? wait(S):

????????????? While S<=0 do no-op;

????????????? S:=S-1;

V操作? signal(S):? ?

????????????? S:=S+1;

2)記錄型信號量

(1)整型信號量符合“有限等待”原則

????lsignal釋放資源后,當(dāng)CPU被分配給等待進(jìn)程后踪栋,等待進(jìn)程仍可繼續(xù)執(zhí)行焙格,可以符合“有限等待”。

(2)但整型信號量不符合“讓權(quán)等待”原則

????整型信號量的wait操作夷都,當(dāng)s≤0時眷唉,當(dāng)前進(jìn)程會占著CPU不斷測試;

????信號量原語不能被打斷囤官,這個占有CPU的進(jìn)程會一直不斷的占據(jù)CPU循環(huán)下去冬阳,陷入忙等。

*信號量結(jié)構(gòu)信息發(fā)生變化

(1)不僅要有值的處理党饮,還有隊列的處理肝陪。

(2)此時形成記錄型數(shù)據(jù)結(jié)構(gòu),包括兩部分:

????整型變量value(代表資源數(shù)目)

????進(jìn)程鏈表L(鏈接所有等待進(jìn)程):

(3)代碼描述:

????????????????type?

????????????????????Semaphore=record

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?value:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?integer;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?L:list? of?PCB;

????????????????????end;

(4)操作:S.Value刑顺,S.L

????Value>0氯窍,表示當(dāng)前可用資源的數(shù)量饲常;

????Value≤0,其絕對值表示等待使用該資源的進(jìn)程數(shù)狼讨,即在該信號量隊列上排隊的PCB的個數(shù)贝淤。

*P、V操作也有所變化

(1)不僅修改資源數(shù)政供,還要處理進(jìn)程的阻塞播聪、喚醒等操作。先修改資源數(shù)布隔,再判斷處理离陶。

?????定義信號量semaphore代表可用資源實體的數(shù)量。又叫信號燈衅檀。

?????當(dāng)≥0招刨,代表可供并發(fā)進(jìn)程使用的資源實體數(shù)

?????當(dāng)<0,表示正在等待使用該資源的進(jìn)程數(shù)术吝。

(2)建立一個信號量必須經(jīng)過說明计济,包括

?????信號量所代表的意義

?????賦初值

?????建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)茸苇,以便指向等待使用臨界區(qū)的進(jìn)程排苍。

(3)除初值外,信號量的值僅能由標(biāo)準(zhǔn)原子操作P学密、V操作來改變淘衙。PV操作是荷蘭語通過和釋放的意思。

3)信號量的基本應(yīng)用

(1)實現(xiàn)進(jìn)程互斥

(2)實現(xiàn)進(jìn)程間的前趨關(guān)系(有序)

實現(xiàn)多個進(jìn)程互斥

設(shè)置一互斥信號量mutex腻暮,初值為1彤守。

互斥信號量注意點(diǎn):

1.互斥信號量mutex初值為1;

2.每個進(jìn)程中將臨界區(qū)代碼置于P(mutex)和V(mutex)原語之間

3.必須成對使用P和V原語(在同一進(jìn)程中)哭靖,不能次序錯誤具垫、重復(fù)或遺漏:

????遺漏P原語則不能保證互斥訪問

????遺漏V原語則不能在使用臨界資源之后將其釋放(給其他等待的進(jìn)程);

實現(xiàn)有序

前趨關(guān)系:

? ????并發(fā)執(zhí)行的進(jìn)程P1和P2中试幽,分別有代碼C1和C2筝蚕,要求C1要在C2開始前完成;

? ? ? 為每對前趨關(guān)系設(shè)置一個同步信號量S12铺坞,并賦初值為0起宽。則只有V操作所在進(jìn)程獲得cpu時能運(yùn)行

控制同步順序的注意點(diǎn):

(1)信號量值為0的點(diǎn)是限制的關(guān)鍵所在;

(2)成對使用P和V原語(在有先后關(guān)系的兩個進(jìn)程中)济榨,不能次序錯誤坯沪、重復(fù)或遺漏,否則同步順序出錯擒滑。

4)AND型信號量

(1)出現(xiàn)原因:一些應(yīng)用往往需要兩個或多個共享資源腐晾,而不是前述的一個資源叉弦。進(jìn)程同時要求的共享資源越多,發(fā)生死鎖可能性越大赴魁。

(2)解決思想:一次性分配給進(jìn)程所需資源卸奉,用完一起釋放。Wait操作時對它所有需要的資源都要判斷颖御,有AND條件榄棵,故稱“AND同步”、“同時wait”潘拱。

5)信號量集

(1)引入原因:

????每次只能獲得或釋放一個單位的資源疹鳄,低效;某些時候資源分配有下限的限制芦岂;修改:在大于可分配設(shè)置的下界值t前提下瘪弓,每次可分配d個。

(2)信號量集的一個特例

只有一個信號量S的幾種特殊情況:lSwait(S,d, d)禽最,允許每次申請d個資源腺怯,若現(xiàn)有資源數(shù)少于d,不予分配川无。lSwait(S,1, 1)呛占,蛻化為一般的記錄型信號量,一次申請一個懦趋,至多分配一個(S>1時可計數(shù)晾虑,或S=1時可控制互斥)。lSwait(S,1, 0)仅叫,當(dāng)S>=1時帜篇,允許多個進(jìn)程進(jìn)入某特定區(qū),當(dāng)S變?yōu)?后诫咱,阻止任何進(jìn)程進(jìn)入特定區(qū)笙隙,相當(dāng)于可控開關(guān)。并不對S資源的數(shù)量產(chǎn)生影響坎缭。

(3)*體驗Swait(S,1, 0)的開關(guān)作用(選看)

給車庫位數(shù)定義資源信號量S=5通行證p=0

*信號量題目做題一般方法:

1.分析問題竟痰,找出同步、互斥關(guān)系

2.根據(jù)資源設(shè)置信號量變量

3.寫出代碼過程幻锁,并注意P凯亮、V操作的位置

4.檢查代碼,模擬機(jī)器運(yùn)行哄尔,體驗信號量的變化和程序運(yùn)行過程是否正確假消。

2.5

管程:

管程的組成

1.一組局部變量

2.對局部變量操作的一組過程

3.對局部變量進(jìn)行初始化的語句。

(聯(lián)想面向?qū)ο笾械念悾?/p>

2.管程特點(diǎn)

任何進(jìn)程只能通過調(diào)用管程提供的過程入口才能進(jìn)入管程訪問共享數(shù)據(jù)岭接;

就如同使用臨界資源富拗,就要先通過其信號量的申請臼予。

任何時刻,僅允許一個進(jìn)程在管程中執(zhí)行某個內(nèi)部過程啃沪。

管程如何實現(xiàn)同步?

對共享變量互斥操作:

? 管程的特點(diǎn)直接實現(xiàn)了該要求粘拾,進(jìn)程一次一個進(jìn)入管程調(diào)用內(nèi)部過程操作共享變量。

管程的互斥訪問完全由編譯程序在編譯時自動添上创千,無須程序員關(guān)心缰雇,能保證正確。

操作的同步控制:

靠條件變量的操作管理實現(xiàn)追驴。

? 進(jìn)入管程但不能獲取資源操作的過程將阻塞械哟,并在滿足條件時被喚醒執(zhí)行。

3.條件變量

(主要作用就是進(jìn)程同步的阻塞和喚醒控制)

局部于管程的變量有兩種:

普通變量

條件變量(用于控制進(jìn)程阻塞和喚醒)

類似信號量變量殿雪,但不取具體值暇咆;相當(dāng)于每個阻塞隊列的隊列指針。

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

對條件變量的操作需結(jié)合對普通變量的條件判斷丙曙,從而控制進(jìn)程狀態(tài)爸业。

保證進(jìn)程互斥地訪問共享變量,并方便地阻塞和喚醒進(jìn)程亏镰。管程可以以函數(shù)庫的形式實現(xiàn)扯旷。相比之下,管程比信號量好控制拆挥。

管程可增強(qiáng)模塊的獨(dú)立性:系統(tǒng)按資源管理的觀點(diǎn)分解成若干模塊薄霜,用數(shù)據(jù)表示抽象系統(tǒng)資源某抓,使同步操作相對集中纸兔,從而增加了模塊的相對獨(dú)立性

引入管程可提高代碼的可讀性,便于修改和維護(hù)否副,正確性易于保證:采用集中式同步機(jī)制汉矿。一個操作系統(tǒng)或并發(fā)程序由若干個這樣的模塊所構(gòu)成,一個模塊通常較短备禀,模塊之間關(guān)系清晰

管程缺點(diǎn):

大多數(shù)常用的編程語言中沒有實現(xiàn)管程洲拇,如果某種語言本身不支持管程,那么加入管程是很困難的曲尸。

雖然大多數(shù)編程語言也沒有實現(xiàn)信號量赋续,但可將P、V操作作為一個獨(dú)立的子例程或操作系統(tǒng)的管理程序調(diào)用加入

2.6進(jìn)程通信

進(jìn)程通信是指進(jìn)程之間的信息交換另患。

一纽乱、低級通信——進(jìn)程之間的互斥和同步

? 信號量機(jī)制是有效的同步工具,但作為通信工具缺點(diǎn)如下:

(1)效率低(通信量少)

(2)通信對用戶不透明(程序員實現(xiàn)昆箕,操作系統(tǒng)只提供共享存儲器供代碼操作)

二鸦列、高級進(jìn)程通信

? 用戶直接利用操作系統(tǒng)提供的一組通信命令租冠,高效地傳送大量數(shù)據(jù)的通信方式。

操作系統(tǒng)隱藏了進(jìn)程通信的細(xì)節(jié)薯嗤,對用戶透明顽爹,減少了通信程序編制上的復(fù)雜性。

1.進(jìn)程通信的類型:

高級通信機(jī)制可歸結(jié)為四大類

①共享存儲器系統(tǒng)(操作存儲區(qū)方式)

? 相互通信的進(jìn)程共享某些數(shù)據(jù)結(jié)構(gòu)或共享存儲區(qū)骆姐,進(jìn)程之間能夠通過這些空間進(jìn)行通信镜粤。

a.基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式(低級)

b.基于共享存儲區(qū)的通信方式(高級)

2.消息傳遞通信的實現(xiàn)方法

1)直接通信方式

? 發(fā)送進(jìn)程利用OS所提供的發(fā)送命令(原語),直接把消息發(fā)送給目標(biāo)進(jìn)程玻褪。此時繁仁,發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式提供對方的標(biāo)識符。通常利用系統(tǒng)通信命令(原語):

? Send(Receiver, message);

? Receive(Sender, message);

2)間接通信方式

? 基于共享數(shù)據(jù)結(jié)構(gòu)的實體用來暫存發(fā)送給目標(biāo)進(jìn)程的消息归园;接收進(jìn)程則從該實體中黄虱,取出對方發(fā)送給自己的消息。通常把這種實體稱為信箱庸诱。

消息在信箱中可以安全地保存捻浦,只允許核準(zhǔn)的目標(biāo)用戶隨時讀取。既可實時通信桥爽,又可非實時通信朱灿。

3.消息傳遞系統(tǒng)的實現(xiàn)

? 單機(jī)和網(wǎng)絡(luò)環(huán)境下的高級進(jìn)程通信廣泛采用“消息傳遞”方式,需要考慮的問題:

? ? 1通信鏈路的建立

? ? 2 消息格式

? ? 3同步方式

4.消息緩沖隊列通信機(jī)制

美國Hansan提出钠四,在RC 4000系統(tǒng)上實現(xiàn)盗扒。后被廣泛應(yīng)用于本地進(jìn)程通信。

①不需管理鏈路

②定義簡單數(shù)據(jù)結(jié)構(gòu)(亦即消息格式)

③實現(xiàn)發(fā)送和接收的操作原語

1.線程的引入

多道程序管理:追求效率的目的下實現(xiàn)“并發(fā)”

2.線程的屬性

多線程OS中缀去,一個進(jìn)程包括多個線程侣灶,每個線程都是利用CPU的基本單位。

輕型實體:只需一點(diǎn)必不可少的缕碎、能保證獨(dú)立運(yùn)行的資源褥影。(TCB)

獨(dú)立調(diào)度和分派的基本單位:調(diào)度切換迅速且開銷小。

可并發(fā)執(zhí)行

共享進(jìn)程資源:同進(jìn)程中的線程可共享相同的進(jìn)程地址空間咏雌、已打開文件凡怎、信號量機(jī)構(gòu)

3.線程的信息

(TCB管理什么信息?)

狀態(tài)參數(shù)

標(biāo)識符赊抖、運(yùn)行狀態(tài)统倒、優(yōu)先級、寄存器狀態(tài)氛雪、堆棧房匆、專有存儲器、信號屏蔽等。

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

執(zhí)行坛缕、就緒墓猎、阻塞

4.線程的創(chuàng)建和終止

在多線程OS中,應(yīng)用程序啟動時赚楚,通常只有一個線程(初始化線程)在執(zhí)行毙沾,它根據(jù)需要再創(chuàng)建若干線程。

創(chuàng)建新線程

? 利用線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用)宠页,提供相應(yīng)參數(shù)左胞。線程創(chuàng)建函數(shù)執(zhí)行完后,返回一個線程標(biāo)識符供以后使用举户。

線程被終止:

? 不立即釋放資源烤宙,只有當(dāng)進(jìn)程中的其它線程執(zhí)行分離函數(shù)后,資源才分離出來能被其它線程利用俭嘁。

? ? 被終止而未釋放資源的線程仍可被需要它的線程調(diào)用躺枕,使其重新恢復(fù)運(yùn)行。

5.多線程系統(tǒng)中的進(jìn)程

進(jìn)程只是用于分配系統(tǒng)資源

包括多個線程

不是執(zhí)行實體供填,線程在進(jìn)程范圍內(nèi)作為執(zhí)行實體拐云。

6.線程的管理

n同步和通信機(jī)制

1)互斥鎖

比較簡單的,控制線程互斥訪問資源近她;

適用于高頻度使用的關(guān)鍵共享數(shù)據(jù)和程序段叉瘩;

nunlock和lock兩個鎖操作原語;

2)條件變量

與互斥鎖一起使用

鎖保證互斥進(jìn)入臨界區(qū)粘捎,但利用條件變量使線程阻塞

注意不滿足條件時薇缅,wait條件變量:

釋放互斥鎖

進(jìn)程阻塞在條件變量指向隊列中

被喚醒后要重新再設(shè)互斥鎖

3)信號量

私用信號量(privatesamephore)

用于同進(jìn)程的線程間同步,數(shù)據(jù)結(jié)構(gòu)存放在應(yīng)用程序的地址空間攒磨。屬于特定進(jìn)程泳桦,OS感知不到其存在。

公用信號量(publicsamephore)

用于不同進(jìn)程間或不同進(jìn)程中線程的同步咧纠,數(shù)據(jù)結(jié)構(gòu)由OS管理蓬痒,存放在受保護(hù)的系統(tǒng)存儲區(qū)泻骤。

二漆羔、線程的實現(xiàn)方式

1.內(nèi)核線程KST(kernel-level thread)

依賴于內(nèi)核,利用系統(tǒng)調(diào)用由OS內(nèi)核在內(nèi)核空間完成創(chuàng)建狱掂、撤消演痒、切換等線程工作。

時間片分配給線程趋惨,所以多線程的進(jìn)程獲得更多CPU時間鸟顺。

2.用戶線程ULT(user-level thread)

無須利用系統(tǒng)調(diào)用,不依賴于OS核心。進(jìn)程利用線程庫函數(shù)創(chuàng)建讯嫂、同步蹦锋、調(diào)度和管理控制用戶線程。

調(diào)度由應(yīng)用軟件內(nèi)部進(jìn)行欧芽,通常采用非搶先式和更簡單的規(guī)則莉掂,也無需用戶態(tài)/核心態(tài)切換,速度比kst快

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末千扔,一起剝皮案震驚了整個濱河市憎妙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曲楚,老刑警劉巖厘唾,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異龙誊,居然都是意外死亡抚垃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門趟大,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讯柔,“玉大人,你說我怎么就攤上這事护昧』昶” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵惋耙,是天一觀的道長捣炬。 經(jīng)常有香客問我,道長绽榛,這世上最難降的妖魔是什么湿酸? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮灭美,結(jié)果婚禮上推溃,老公的妹妹穿的比我還像新娘。我一直安慰自己届腐,他們只是感情好铁坎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犁苏,像睡著了一般硬萍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上围详,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天朴乖,我揣著相機(jī)與錄音,去河邊找鬼。 笑死买羞,一個胖子當(dāng)著我的面吹牛袁勺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畜普,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼魁兼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漠嵌?” 一聲冷哼從身側(cè)響起咐汞,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儒鹿,沒想到半個月后化撕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡约炎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年植阴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圾浅。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掠手,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狸捕,到底是詐尸還是另有隱情喷鸽,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布灸拍,位于F島的核電站做祝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸡岗。R本人自食惡果不足惜混槐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轩性。 院中可真熱鬧声登,春花似錦、人聲如沸揣苏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舒岸。三九已至在验,卻和暖如春陌宿,著一層夾襖步出監(jiān)牢的瞬間绿店,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工次氨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庆亡。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓开瞭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壳澳。 傳聞我的和親對象是個殘疾皇子岂贩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348