2.2進(jìn)程控制與同步
一像吻、進(jìn)程控制
1杖虾、進(jìn)程控制的基本過(guò)程:
1)進(jìn)程的創(chuàng)建? 2)進(jìn)程的終止? 3)進(jìn)程的阻塞與喚醒? 4)進(jìn)程的掛起和激活
2流昏、系統(tǒng)中運(yùn)行的進(jìn)程并不都是孤立的冀偶,有的進(jìn)程運(yùn)行后,會(huì)調(diào)用其他進(jìn)程來(lái)執(zhí)行花沉,這樣就組成了進(jìn)程間的父子關(guān)系柳爽。
(一)進(jìn)程的創(chuàng)建
1、一個(gè)進(jìn)程創(chuàng)建另一進(jìn)程的原因
1)用戶登錄? ?2)作業(yè)調(diào)度? ??
3)提供服務(wù):運(yùn)行中的用戶程序提出功能請(qǐng)求碱屁,要?jiǎng)?chuàng)建服務(wù)進(jìn)程
4)應(yīng)用請(qǐng)求:應(yīng)用程序自己創(chuàng)建進(jìn)程磷脯,完成特定功能的新進(jìn)程。
2娩脾、創(chuàng)建過(guò)程(重點(diǎn))
(1)申請(qǐng)空白PCB
(2)為新進(jìn)程分配資源:內(nèi)存資源的處理
(3)初始化進(jìn)程控制塊:信息填寫(xiě)
(4)將新進(jìn)程插入就緒隊(duì)列
注:上述過(guò)程不可以被打斷U允摹!
(二)進(jìn)程的終止
1柿赊、引起進(jìn)程終止的事件
1)正常結(jié)束? ?2)異常結(jié)束? ?3)外界干預(yù)
2俩功、終止過(guò)程
(1)根據(jù)進(jìn)程標(biāo)示符,檢索出該進(jìn)程PCB碰声,讀其狀態(tài)诡蜓。
? ? ?如果是執(zhí)行態(tài),就立即終止并置調(diào)度標(biāo)志為真胰挑,指示重新進(jìn)行調(diào)度蔓罚。??
? ? ?如果有子孫程序,也要終止以防成為不可控進(jìn)程洽腺。
(2)歸還全部資源至其父進(jìn)程或系統(tǒng)脚粟。
(3)將該進(jìn)程PCB從所在隊(duì)列或鏈表中移出。
(三)進(jìn)程的阻塞與喚醒
1蘸朋、引起進(jìn)程阻塞和喚醒的事件
1)請(qǐng)求系統(tǒng)服務(wù)的滿足情況
2)啟動(dòng)某種需等待(I/O)操作
3)合作需要的新數(shù)據(jù)尚未到達(dá)
4)執(zhí)行某功能的進(jìn)程暫時(shí)無(wú)新工作可做(如發(fā)送數(shù)據(jù)進(jìn)程)
2、阻塞和喚醒過(guò)程
阻塞:
由進(jìn)程調(diào)用阻塞原語(yǔ)阻塞自己是主動(dòng)行為扣唱。
1)將PCB中的狀態(tài)改為阻塞
2)該P(yáng)CB加入到阻塞隊(duì)列中
3)轉(zhuǎn)進(jìn)程調(diào)度藕坯,將處理機(jī)分配給另一進(jìn)程
4)進(jìn)行進(jìn)程切換团南,即根據(jù)兩切換進(jìn)程的PCB,保護(hù)與重新設(shè)置處理機(jī)狀態(tài)炼彪。
喚醒:
1)把阻塞進(jìn)程從等待該事件的阻塞隊(duì)列中移出
2)將其PCB中的現(xiàn)行狀態(tài)改為就緒
3)將PCB插入到就緒隊(duì)列中吐根。
(四)進(jìn)程的掛起與激活
1、掛起:
掛起原語(yǔ)將指定進(jìn)程或阻塞進(jìn)程掛起辐马。
1)檢查被掛起進(jìn)程狀態(tài)拷橘,活動(dòng)就緒則改為靜止就緒,活動(dòng)阻塞則改為靜止阻塞
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)程。
2檩帐、激活:
1)若掛起進(jìn)程在外存上术幔,將其調(diào)入內(nèi)存
2)檢查進(jìn)程狀態(tài),若處于靜止就緒湃密,則改為活動(dòng)就緒诅挑,若處于靜止阻塞,則改為活動(dòng)阻塞
二泛源、進(jìn)程同步
1拔妥、兩種制約關(guān)系
1)間接相互制約關(guān)系:主要源于資源共享(互斥)
2)直接相互制約關(guān)系:主要源于進(jìn)程合作(有序)
2、進(jìn)程同步的任務(wù):
使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作达箍,從而使程序的執(zhí)行具有可再現(xiàn)性毒嫡。
3、臨界資源:
1)一次僅允許一個(gè)進(jìn)程使用的資源幻梯。
2)共享變量應(yīng)按臨界資源處理兜畸,一個(gè)進(jìn)程還沒(méi)用完畢前不能讓其他進(jìn)程使用。
4碘梢、生產(chǎn)者—消費(fèi)者問(wèn)題:
1)沒(méi)有產(chǎn)品不能取咬摇,沒(méi)有空間不能放。也不能同時(shí)對(duì)一個(gè)空間進(jìn)行取和放
2)緩沖池組織為循環(huán)緩沖
?in加1表示為in:=(in+1)mod n? ? ? ? ? ? ? ? ? ?out加1表示為out:=(out+1)mod n
?當(dāng)(in+1)mod n=out時(shí)表示緩沖池滿? ? ? ??in=out表示緩沖池空
3)若是一群生產(chǎn)者和消費(fèi)者煞躬,生產(chǎn)者之間共同要影響的變量in要互斥肛鹏;消費(fèi)者間的out也一樣;
5恩沛、互斥:
在操作系統(tǒng)中在扰,當(dāng)一個(gè)進(jìn)程進(jìn)入臨界區(qū)使用臨界資源時(shí),另一個(gè)進(jìn)程必須等待雷客,直到占用臨界資源的進(jìn)程退出臨界區(qū)杂穷,我們稱進(jìn)程之間的這種相互制約關(guān)系為“互斥”。
同步:
多個(gè)相互合作的進(jìn)程婚度,在一些關(guān)鍵點(diǎn)上可能需要互相等待或互相交換信息,這種相互制約關(guān)系稱為進(jìn)程同步關(guān)系裹芝。可理解為“有序”娜汁。
6嫂易、臨界區(qū)
1)每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段代碼叫臨界區(qū)。
2)為了正確同步掐禁,對(duì)臨界區(qū)的代碼要增加控制
3)進(jìn)程代碼分四部分:
repeat
entry? section? 進(jìn)入?yún)^(qū):對(duì)欲訪問(wèn)臨界資源檢驗(yàn)怜械。若未被訪問(wèn),設(shè)正在訪問(wèn)標(biāo)志
critical? section? ? ? ? ? ?臨界區(qū):訪問(wèn)臨界資源的代碼
exit? ?section? ? ? ? ? ? ? ? ?退出區(qū):將正在訪問(wèn)的標(biāo)志恢復(fù)為未被訪問(wèn)的標(biāo)志
remainder???section? ? ? 剩余區(qū):其余部分
until?? false
7傅事、同步機(jī)制應(yīng)遵循的規(guī)則
1)空閑讓進(jìn):資源使用最基本原則
2)忙則等待:保證互斥
3)有限等待:合適時(shí)被喚醒防止死等
4)讓權(quán)等待:能主動(dòng)釋放CPU防止忙等
8缕允、實(shí)現(xiàn)互斥的方法:
先修改、后檢查享完、后修改者等待
Repeat
flag[i]=true;? turn=j;
While(flag[j] and turn=j)??do no-op;
操作R的代碼
flag[i]=false;
??? …(其他操作)
Until
false
9灼芭、同步控制的關(guān)鍵
1)不被打斷的進(jìn)行標(biāo)志值的判斷和修改
2)制定一種寫(xiě)法,使標(biāo)志的使用適用于各種具體應(yīng)用情況