進(jìn)程同步機(jī)制有幾種 同步機(jī)制應(yīng)遵循哪些基本準(zhǔn)則?為什么?
同步機(jī)制應(yīng)遵循哪些基本準(zhǔn)則?為什么?在多道程序設(shè)計(jì)環(huán)境中,當(dāng)程序同時(shí)執(zhí)行時(shí),由于資源共享和進(jìn)程協(xié)作,同一系統(tǒng)中進(jìn)程之間可能存在以下兩種形式的約束:(1)間接相互約束。同一系統(tǒng)中的進(jìn)程通常共享某些資源。
同步機(jī)制應(yīng)遵循哪些基本準(zhǔn)則?為什么?
在多道程序設(shè)計(jì)環(huán)境中,當(dāng)程序同時(shí)執(zhí)行時(shí),由于資源共享和進(jìn)程協(xié)作,同一系統(tǒng)中進(jìn)程之間可能存在以下兩種形式的約束:(1)間接相互約束。同一系統(tǒng)中的進(jìn)程通常共享某些資源。(2) 兩者之間存在著直接的相互制約關(guān)系,這種制約關(guān)系主要來(lái)源于過(guò)程之間的合作。因此,在使用系統(tǒng)中的關(guān)鍵資源時(shí),各進(jìn)程應(yīng)該相互排斥,以共享資源。為了實(shí)現(xiàn)進(jìn)程互斥進(jìn)入自己的關(guān)鍵區(qū)域,我們可以采用軟件的方法,但更多的時(shí)候是在系統(tǒng)中設(shè)置一種特殊的同步機(jī)制來(lái)協(xié)調(diào)每個(gè)進(jìn)程的運(yùn)行。所有的同步機(jī)制都應(yīng)該遵循以下四個(gè)原則:(1)空閑接納:因?yàn)楫?dāng)沒(méi)有進(jìn)程在關(guān)鍵區(qū)域時(shí),表示關(guān)鍵資源處于空閑狀態(tài)。一個(gè)請(qǐng)求進(jìn)入關(guān)鍵區(qū)域的進(jìn)程應(yīng)該被允許立即進(jìn)入它自己的關(guān)鍵區(qū)域,以便有效地利用關(guān)鍵資源。(2) 忙時(shí)等待:因?yàn)楫?dāng)現(xiàn)有進(jìn)程進(jìn)入關(guān)鍵區(qū)域時(shí),它表示正在訪問(wèn)關(guān)鍵資源,因此其他試圖進(jìn)入關(guān)鍵區(qū)域的進(jìn)程必須等待,以確保對(duì)關(guān)鍵資源的互斥訪問(wèn)。(3) 有限等待:因?yàn)檎?qǐng)求訪問(wèn)關(guān)鍵資源的進(jìn)程應(yīng)該能夠在有限的時(shí)間內(nèi)進(jìn)入自己的關(guān)鍵區(qū)域,以免陷入“死等待”狀態(tài)。(4) 給予等待的權(quán)利:因?yàn)楫?dāng)進(jìn)程不能進(jìn)入自己的關(guān)鍵區(qū)域時(shí),它應(yīng)該立即釋放處理器,以避免進(jìn)程進(jìn)入“忙”狀態(tài)
一個(gè)信號(hào)量只能被設(shè)置為初始值一次,然后只能由P或v操作,可以看出,信號(hào)量機(jī)制必須有公共內(nèi)存,不能在分布式操作系統(tǒng)中使用,這是其最大的弱點(diǎn)。信號(hào)量機(jī)制功能強(qiáng)大,但信號(hào)量的操作比較分散,控制、讀、寫(xiě)和維護(hù)都比較困難。增加了程序員的編碼負(fù)擔(dān);核心操作P-V分散在每個(gè)用戶程序的代碼中,不易控制和管理;一旦出錯(cuò),后果嚴(yán)重,不易發(fā)現(xiàn)和糾正。(b) 自旋鎖:自旋鎖是一種保護(hù)共享資源的鎖機(jī)制。如果調(diào)用者請(qǐng)求的資源被占用,也就是說(shuō),自旋鎖已經(jīng)被另一個(gè)執(zhí)行單元持有,調(diào)用者將在那里循環(huán)以查看自旋鎖是否已經(jīng)被持有和釋放。自旋鎖(Spin lock)是一種相對(duì)低級(jí)的保護(hù)數(shù)據(jù)結(jié)構(gòu)和代碼片段的原始方法,它可能會(huì)導(dǎo)致以下兩個(gè)問(wèn)題:1。僵局;2。CPU資源占用過(guò)多。傳統(tǒng)的自旋鎖會(huì)因無(wú)序競(jìng)爭(zhēng)(c)管理而導(dǎo)致“公平”問(wèn)題:信號(hào)量機(jī)制強(qiáng)大,但信號(hào)量操作分散,難以控制、讀寫(xiě)和維護(hù)。因此,后來(lái)提出了一個(gè)集中式的同步過(guò)程tube進(jìn)程。其基本思想是將共享變量及其操作集中在一個(gè)模塊中,操作系統(tǒng)或并發(fā)程序由這些模塊組成。這樣,模塊之間的連接清晰,易于維護(hù)和修改,易于保證正確性。(d) 交會(huì):過(guò)程直接相互作用。(E) 分布式系統(tǒng):由于分布式操作系統(tǒng)中沒(méi)有公共內(nèi)存,所以所有參數(shù)都是值參數(shù),不能是指針。(f) 原語(yǔ)是一個(gè)不間斷的過(guò)程。
請(qǐng)列舉幾種進(jìn)程的同步機(jī)制,并比較其優(yōu)缺點(diǎn)?
同步機(jī)制的基本規(guī)則如下:(1)當(dāng)空閑接納進(jìn)程處于關(guān)鍵區(qū)域時(shí),相應(yīng)的關(guān)鍵資源處于空閑狀態(tài),因此可以允許請(qǐng)求進(jìn)入關(guān)鍵區(qū)域的進(jìn)程立即進(jìn)入自己的關(guān)鍵區(qū)域,以有效利用關(guān)鍵資源資源。(2) 當(dāng)一個(gè)進(jìn)程進(jìn)入它自己的關(guān)鍵區(qū)域時(shí),意味著相應(yīng)的關(guān)鍵資源正在被訪問(wèn)。因此,所有其他試圖進(jìn)入關(guān)鍵區(qū)域的進(jìn)程都必須等待,以確保這些進(jìn)程訪問(wèn)關(guān)鍵資源是互斥的。(3) 有限等待一個(gè)請(qǐng)求訪問(wèn)關(guān)鍵資源的進(jìn)程,應(yīng)該確保該進(jìn)程能夠在有限的時(shí)間內(nèi)進(jìn)入自己的關(guān)鍵區(qū)域,以免陷入“死等待”狀態(tài)。(4) 當(dāng)進(jìn)程不能進(jìn)入自己的關(guān)鍵區(qū)域時(shí),應(yīng)立即釋放處理器,避免進(jìn)程陷入“忙等待”狀態(tài)。