二.進程(3)進程同步

2.3 進程同步

1. 理解同步的含義

2. 信號量機制控制進程同步

3. 管程

進程間有什么相互影響?

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

1. 間接相互制約關(guān)系:主要源于資源共享,表現(xiàn)為進程A---打印機資源---進程B(互斥)

2. 直接相互制約關(guān)系:主要源于進程合作,表現(xiàn)為進程A寫緩沖---進程B讀緩沖(有序)

1.進程同步的基本概念

1)進程同步的主要任務(wù):使并發(fā)執(zhí)行的諸進程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。


R1和R2為處理機中的兩個寄存器。兩個進程各自對x作加1操作。


所以對生產(chǎn)者和消費者而言,counter應(yīng)作為臨界資源,應(yīng)對其互斥訪問

若是一群生產(chǎn)者和消費者生產(chǎn)者之間共同要影響的變量in要互斥;消費者間的out也一樣

理解同步

互斥:在操作系統(tǒng)中,當一個進程進入臨界區(qū)使用臨界資源時,另一個進程必須等待,直到占用臨界資源的進程退出臨界區(qū),我們稱進程之間的這種相互制約關(guān)系為“互斥”。

同步:多個相互合作的進程,在一些關(guān)鍵點上可能需要互相等待或互相交換信息,這種相互制約關(guān)系稱為進程同步關(guān)系。可理解為“有序”。

如:生產(chǎn)和消費的“有序”關(guān)系靠對counter的正確判斷達到,而對counter的修改必須“互斥”修改。



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

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

?空閑讓進:資源使用最基本原則

?忙則等待:保證互斥

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

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



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

主要涉及”判斷”和”修改標志”操作

? 不應(yīng)被打斷(原語,OS核心態(tài)運行)

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

硬件同步機制

? 許多計算機提供一些特殊的硬件指令,允許對一個字中的內(nèi)容進行檢測和修正,或?qū)蓚€字的內(nèi)容進行交換。利

用這些特殊指令解決臨界區(qū)問題。

? 進入臨界區(qū)往往跟其標志有關(guān),可將標志看做一個鎖,“鎖開”進入并關(guān)鎖,“鎖關(guān)”必須等待,初始時鎖是打開的。

關(guān)中斷

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

【】缺點:

l 濫用風(fēng)險

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

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


【】完全利用軟件方法,有很大局限性,也不適于多進程,現(xiàn)在已很少采用。

【】硬件指令機械操作可保證鎖開、關(guān)操作不被打斷;適用于任意數(shù)目的進程。但等待要耗費CPU時間,不能實現(xiàn)“讓權(quán)等待”,從等待進程中隨機選擇一個進入臨界區(qū),有的進程可能一直選不上,難以實現(xiàn)較為復(fù)雜的進程同步問題。

2.信號量機制



2)記錄型信號量

【】 整型信號量符合“有限等待”原則

?signal釋放資源后,當CPU被分配給等待進程后,等待進程仍可繼續(xù)執(zhí)行,可以符合“有限等待”。

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

?整型信號量的wait操作,當s ≤0時,當前進程會占著CPU不斷測試;

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

改進:條件不符時應(yīng)能夠主動放棄CPU

新問題:放棄CPU的進程進入阻塞隊列:因等待某信號量而放棄CPU的等待進程會有“若干”個,需將它們組織

管理起來,并在合適的時候喚醒。

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

【】不僅要有值的處理,還有隊列的處理。

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

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

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

【】 代碼描述:

type Semaphore=record

value:integer;

L:list of PCB;

end;

?操作:S.Value,S.L


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

? 當≥0,代表可供并發(fā)進程使用的資源實體數(shù)

? 當<0,表示正在等待使用該資源的進程數(shù)。

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

? 信號量所代表的意義

? 賦初值

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

【】除初值外,信號量的值僅能由標準原子操作P、V操作來改變。 PV操作是荷蘭語通過和釋放的意思。

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

【】實現(xiàn)進程互斥

【】實現(xiàn)進程間的前趨關(guān)系(有序)


互斥信號量注意點:

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

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

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

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

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


控制同步順序的注意點

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

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


2)民航售票系統(tǒng)問題

【】 n個售票處。每個售票處通過終端訪問系統(tǒng)的公用數(shù)據(jù)區(qū)

【】假定公用數(shù)據(jù)區(qū)中分別用Ri表示某時間i次航班的現(xiàn)存票數(shù)。

【】Pi表示某售票處的處理進程,試用信號量實現(xiàn)進程間的互斥關(guān)系。


5)信號量集

【】引入原因:

l 每次只能獲得或釋放一個單位的資源,低效;

l 某些時候資源分配有下限的限制;

l 修改:在大于可分配設(shè)置的下界值t前提下,每次可分配d個。


信號量集的一個特例

【】 只有一個信號量S的幾種特殊情況:

l Swait(S,? d, d),,允許每次申請d個資源,若現(xiàn)有資源數(shù)少于d,不予分配。

l Swait(S,1,1),蛻化為一般的記錄型信號量,一次申請一個,至多分配一個(S>1時可計數(shù),或S=1時可控制互斥)。

l Swait(S,1,0),當S>=1時,允許多個進程進入某特定區(qū),當S變?yōu)?后,阻止任何進程進入特定區(qū),相當于可控開關(guān)。并不對S資源的數(shù)


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

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

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

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

4. 檢查代碼,模擬機器運行,體驗信號量的變化和程序運行過程是否正確。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容