摘要:在分布式操作系統(tǒng)等一些有多個(gè)進(jìn)程同時(shí)活躍的應(yīng)用中,必須妥善解決不同進(jìn)程對資源的需求,即同步與互斥問題。文章提出了一種基于消息槽的K資源互斥算法,介紹了該算法的原理,詳細(xì)描述了該算法的運(yùn)作過程,并進(jìn)行了深入的分析。分析結(jié)果表明,該算法能夠有效地滿足K資源分布式環(huán)境下同步與互斥的要求。
關(guān)鍵詞:K資源互斥;進(jìn)程;消息槽;算法
引言
關(guān)于資源互斥以及K資源互斥的問題,有很多算法已經(jīng)被提出來了,其中有一些還是相當(dāng)不錯(cuò)的,比如基于令牌的K資源互斥算法和基于仲裁集的K資源互斥算法等。本文在分析吸取他人成果的基礎(chǔ)上,提出了基于消息槽的K資源互斥算法,下文將對該算法進(jìn)行描述并進(jìn)行討論。
1 K資源互斥算法
所謂消息槽,就像一個(gè)大卡車,卡車上分成了很多部分,每一部分可以容納—個(gè)貨物;當(dāng)有人要把自己的貨物給別人時(shí),他就等著這個(gè)大卡車的到來,然后在車上找到一個(gè)空閑的貨位,把貨物放上去;大卡車?yán)^續(xù)往前,到了收貨人那里,收貨人把貨物卸下來,原來的這個(gè)貨位也就再次成為可用的了。
這里所說的消息槽,就像這個(gè)大卡車,槽中共分出K槽位,每個(gè)槽位代表對一個(gè)資源的操作情況,即該資源目前是否被使用。當(dāng)一個(gè)節(jié)點(diǎn)要使用資源時(shí),就等著消息槽的到來,然后在其中找出若干空閑的槽位,并聲明,這些資源已被占用。使用完之后,再將這些槽位釋放。
1.1 前提與假設(shè)
(1)系統(tǒng)中的所有節(jié)點(diǎn)組織成一個(gè)環(huán)形結(jié)構(gòu),消息槽,就像一個(gè)令牌,沿著這個(gè)邏輯環(huán)在系統(tǒng)中循環(huán)往復(fù)地傳送。
(2)消息槽中共有K槽位,相應(yīng)的,系統(tǒng)中有K資源,每個(gè)槽位代表對一個(gè)資源的使用情況。初始時(shí),每個(gè)槽位的內(nèi)容都為空。
(3)在消息槽的末尾,另設(shè)一項(xiàng)數(shù)據(jù),記錄當(dāng)前別的某個(gè)節(jié)點(diǎn)所需要的資源數(shù)。平常該項(xiàng)數(shù)據(jù)固定為0,當(dāng)某個(gè)節(jié)點(diǎn)發(fā)現(xiàn)消息槽中空閑的資源數(shù)不能滿足自己的要求時(shí),就把這一位填上自己所需要的資源數(shù),等到釋放資源時(shí),再將這項(xiàng)數(shù)據(jù)重新清0。
(4)為防止某些節(jié)點(diǎn)長期占用資源,導(dǎo)致另一些節(jié)點(diǎn)被餓死,并為提高資源的利用率,采用時(shí)間片(比如消息槽轉(zhuǎn)了n圈)的方法,當(dāng)一個(gè)節(jié)點(diǎn)使用資源持續(xù)一定時(shí)間后,必須將資源釋放,若還要使用,則需重新申請。
1.2 算法的運(yùn)作過程描述
(1)請求資源
若節(jié)點(diǎn)i申請使用a個(gè)資源,當(dāng)i等到消息槽到達(dá)時(shí),如果消息槽中空閑的槽位數(shù)能滿足自己的要求,即空閑槽位數(shù)f>=a,并且消息槽的末尾數(shù)據(jù)項(xiàng)為0,或者消息槽末尾數(shù)據(jù)項(xiàng)為b,但f>=a+b,則節(jié)點(diǎn)i從這f個(gè)資源中任選a個(gè),并在他們對應(yīng)的消息槽槽位中填上自己的進(jìn)程號,表明這些資源已經(jīng)被占用了。同時(shí),如果節(jié)點(diǎn)i曾經(jīng)將消息槽的末尾項(xiàng)數(shù)據(jù)填上的話,那么,將這項(xiàng)數(shù)據(jù)清0;否則直接使用資源,不必考慮消息槽的末尾項(xiàng)數(shù)據(jù)。
如果f