一種計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及并行計(jì)算機(jī)體系結(jié)構(gòu)中的多進(jìn)程資源分配技術(shù)領(lǐng)域,尤其涉及一種計(jì) 算機(jī)多進(jìn)程公平調(diào)度的方法。
【背景技術(shù)】
[0002] 操作系統(tǒng)中的多進(jìn)程調(diào)度問題是計(jì)算機(jī)科學(xué)領(lǐng)域的一個(gè)重要的研究?jī)?nèi)容,進(jìn)程調(diào) 度算法的好壞直接影響到計(jì)算機(jī)資源的利用率和操作系統(tǒng)的運(yùn)行速度。多進(jìn)程調(diào)度算法解 決的核心問題是進(jìn)程同步(Synchronization)問題。該問題是指進(jìn)程數(shù)目與可用資源數(shù)目 不匹配,解決該問題需要考慮并發(fā)性、死鎖和公平性三方面。目前針對(duì)該問題的解決方案主 要集中在:1)避免進(jìn)程并發(fā)調(diào)度時(shí)的進(jìn)程死鎖方法;2)進(jìn)程死鎖發(fā)生時(shí)的有效解決方法。 具體的方法包括:服務(wù)生解法、資源分級(jí)解法、Chandy / Mistra解法以及Petri網(wǎng)模擬多 進(jìn)程調(diào)度的解法等。但這些方法很難保證計(jì)算機(jī)對(duì)多進(jìn)程調(diào)度的公平性。
[0003] 服務(wù)生解法是指定計(jì)算機(jī)中的一個(gè)處理器監(jiān)控進(jìn)程的調(diào)度,其它處理器進(jìn)行進(jìn)程 調(diào)度,所有進(jìn)行調(diào)度都需要獲得特定處理器的許可。通過這個(gè)指定的處理器進(jìn)行調(diào)度,避免 了進(jìn)程調(diào)度時(shí)的死鎖問題,但這種進(jìn)程調(diào)度方法并未涉及公平性。資源分級(jí)解法是對(duì)資源 分配一個(gè)偏序或者分級(jí)的關(guān)系,并約定所有資源都按照這種順序獲取,按相反順序釋放,而 且保證不會(huì)有兩個(gè)無關(guān)資源同時(shí)被同一項(xiàng)工作所需要。但當(dāng)操作系統(tǒng)中進(jìn)程數(shù)目增加時(shí), 預(yù)先定義的進(jìn)程調(diào)度順序不會(huì)改變,造成多個(gè)進(jìn)程的長期等待,因此資源分級(jí)解法不適合 計(jì)算機(jī)對(duì)多進(jìn)程的動(dòng)態(tài)調(diào)度。Chandy / Mistra解法允許進(jìn)程競(jìng)爭(zhēng)任何資源,適合于實(shí)際 情況下計(jì)算機(jī)對(duì)進(jìn)程的調(diào)度,但在一段時(shí)間內(nèi),存在某些進(jìn)程被多次調(diào)度,而某些進(jìn)程卻很 少被調(diào)度的情況,因此該方法不能保證進(jìn)程調(diào)度的公平性。Petri網(wǎng)模擬多進(jìn)程調(diào)度問題 時(shí),增加了兩張?jiān)S可卡,利用許可卡來保證未執(zhí)行的進(jìn)程擁有資源訪問權(quán)限,避免了進(jìn)程餓 死狀態(tài)的發(fā)生,在一定程度上也保證了進(jìn)程調(diào)度的公平性。但這種方法會(huì)造成Petri網(wǎng)模 型中狀態(tài)的急劇增加,導(dǎo)致狀態(tài)空間爆炸問題,不利于計(jì)算機(jī)處理器對(duì)多進(jìn)程的實(shí)時(shí)調(diào)度。
[0004] 在操作系統(tǒng)中,并發(fā)進(jìn)程數(shù)目是動(dòng)態(tài)變化,而每個(gè)進(jìn)程對(duì)資源的需求也是動(dòng)態(tài)變 化,現(xiàn)有技術(shù)中多進(jìn)程調(diào)度算法在解決這類問題時(shí)很難保證進(jìn)程調(diào)度的公平性,降低了操 作系統(tǒng)對(duì)進(jìn)程調(diào)度的管理能力。
[0005] 因此,設(shè)計(jì)一種公平的多進(jìn)程調(diào)度方法已成為計(jì)算機(jī)科學(xué)領(lǐng)域中急需解決的問 題。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的是決解現(xiàn)有技術(shù)中多進(jìn)程調(diào)度算法的不公平性,提出了一種計(jì)算機(jī) 多進(jìn)程公平調(diào)度的方法。通過集合運(yùn)算,構(gòu)造進(jìn)程的調(diào)度集和后備調(diào)度隊(duì)列,實(shí)現(xiàn)了計(jì)算機(jī) 處理器對(duì)多進(jìn)程的公平性調(diào)度。該算法不但能有效的解決并發(fā)進(jìn)程的調(diào)度問題和進(jìn)程死鎖 問題,同時(shí)也實(shí)現(xiàn)了計(jì)算機(jī)處理器對(duì)多進(jìn)程調(diào)度的公平性,提高了操作系統(tǒng)對(duì)并發(fā)進(jìn)程調(diào) 度的管理能力。
[0007] 本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法,需要進(jìn)行如下假設(shè)和定義:
[0008] 假定進(jìn)程集A= Ia1,…,an},其中Si表示一個(gè)進(jìn)程,資源集B= Od1,…,bm},其中IDi 表示為計(jì)算機(jī)中的一個(gè)資源。
[0009] 定義1 (影響因子):當(dāng)某一進(jìn)程a被調(diào)用后,會(huì)占用資源集B中的k個(gè)資源,進(jìn)而 影響進(jìn)程集A中其它j個(gè)進(jìn)程獲取資源集B中的資源,則稱這j個(gè)進(jìn)程ai+1,…,為進(jìn) 程a在資源集B中的影響因子。
[0010] 定義2 (影響因子函數(shù)):若進(jìn)程ai+1,…,是進(jìn)程a在資源集B中的影響因子, 則函數(shù)f(a) = {ai+1,…,ai+j被稱為進(jìn)程a在資源集B中的影響因子函數(shù)。
[0011] 定義3(調(diào)度集):調(diào)度集D是進(jìn)程集A的一個(gè)真子集,對(duì)于任意dl,d2 e D,都有 dl (61" (d2),并且對(duì)于任意a G A-D,總存在d G D使得a G f (d)。
[0012] 定義4(后備調(diào)度隊(duì)列):后備調(diào)度隊(duì)列中的進(jìn)程為集合A-D中的進(jìn)程。
[0013] 本發(fā)明提出了一種計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法,包括以下步驟:
[0014] 步驟一:從進(jìn)程集中取出進(jìn)程組成調(diào)度集,將進(jìn)程集中未被調(diào)度的進(jìn)程組成后備 調(diào)度隊(duì)列;步驟二:判斷進(jìn)程調(diào)度請(qǐng)求是否結(jié)束,如未結(jié)束執(zhí)行下一步驟,否則調(diào)度結(jié)束; 步驟三:對(duì)調(diào)度集進(jìn)行調(diào)度;步驟四:將調(diào)度集中調(diào)度后的進(jìn)程轉(zhuǎn)移到后備調(diào)度隊(duì)列的隊(duì) 尾;步驟五:清空調(diào)度集;步驟六:從后備調(diào)度隊(duì)列中選取進(jìn)程再次構(gòu)造調(diào)度集,并跳轉(zhuǎn)至 步驟二。
[0015] 其中,步驟一中調(diào)度集由進(jìn)程集中能同時(shí)獲取資源的進(jìn)程組成。
[0016] 其中,進(jìn)一步地,步驟一中調(diào)度集的組成包括以下步驟:
[0017] 步驟A :將進(jìn)程集中進(jìn)程復(fù)制到臨時(shí)進(jìn)程集中,并初始化調(diào)度集為空集;步驟B :隨 機(jī)從臨時(shí)進(jìn)程集中任意取出一個(gè)進(jìn)程;步驟C :將進(jìn)程放入調(diào)度集中;步驟D :刪除臨時(shí)進(jìn) 程集中進(jìn)程的影響因子;步驟E :臨時(shí)進(jìn)程集不為空集,則跳轉(zhuǎn)到步驟B,或臨時(shí)進(jìn)程集為空 集,則結(jié)束調(diào)度集的組成。
[0018] 其中,調(diào)度集中的進(jìn)程從后備調(diào)度隊(duì)列的隊(duì)首選取。
[0019] 其中,進(jìn)一步地,調(diào)度集的組成包括以下步驟:
[0020] 步驟F :從后備調(diào)度隊(duì)列中選取進(jìn)程放入到調(diào)度集中;步驟G :將后備調(diào)度隊(duì)列中 未被選取的進(jìn)程按原順序排列。
[0021] 其中,進(jìn)一步地,步驟六中調(diào)度集的進(jìn)程由后備調(diào)度隊(duì)列的隊(duì)首向隊(duì)尾依次選取。
[0022] 其中,進(jìn)一步地,步驟六中選取的進(jìn)程不為調(diào)度集中任意進(jìn)程的影響因子。
[0023] 其中,調(diào)度集和后備調(diào)度隊(duì)列由集合運(yùn)算操作產(chǎn)生。
[0024] 其中,調(diào)度集和后備調(diào)度隊(duì)列能相互轉(zhuǎn)換。
[0025] 本發(fā)明為實(shí)現(xiàn)計(jì)算機(jī)處理器對(duì)多進(jìn)程調(diào)度的并發(fā)性、非死鎖性和公平性,提出了 一種計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法,采用集合運(yùn)算操作獲取進(jìn)程的調(diào)度集和后備調(diào)度隊(duì) 列,再產(chǎn)生可調(diào)度的進(jìn)程調(diào)度序列,實(shí)現(xiàn)計(jì)算機(jī)處理器對(duì)多進(jìn)程并發(fā)操作的公平性調(diào)度。
【附圖說明】
[0026] 圖1是本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法進(jìn)程調(diào)度過程的進(jìn)程狀態(tài)轉(zhuǎn)換圖。
[0027] 圖2是本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法中調(diào)度集D構(gòu)造算法的流程圖。
[0028] 圖3是本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法的流程圖。
[0029] 圖4是利用本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法對(duì)5個(gè)進(jìn)程和2個(gè)共享資源的5 次并發(fā)調(diào)度的模擬圖。
[0030] 圖5是利用本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法對(duì)6個(gè)進(jìn)程和2個(gè)共享資源的7 次并發(fā)調(diào)度的模擬圖。
【具體實(shí)施方式】
[0031] 結(jié)合以下具體實(shí)施例和附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。實(shí)施本發(fā)明的過程、 條件、實(shí)驗(yàn)方法等,除以下專門提及的內(nèi)容之外,均為本領(lǐng)域的普遍知識(shí)和公知常識(shí),本發(fā) 明沒有特別限制內(nèi)容。
[0032] 圖1為本發(fā)明中進(jìn)程調(diào)度過程的進(jìn)程狀態(tài)轉(zhuǎn)換圖。在本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào) 度的方法中,所有進(jìn)程分為三種狀態(tài):
[0033] 1)初始時(shí)的進(jìn)程集狀態(tài);
[0034] 2)進(jìn)程的調(diào)度集狀態(tài);
[0035] 3)進(jìn)程未被調(diào)度時(shí)的后備調(diào)度隊(duì)列狀態(tài)。
[0036] 依據(jù)本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法,進(jìn)程集狀態(tài)轉(zhuǎn)換為調(diào)度集狀態(tài)和后備 調(diào)度隊(duì)列狀態(tài)。調(diào)度集狀態(tài)與后備調(diào)度隊(duì)列狀態(tài)之間相互轉(zhuǎn)換,直到進(jìn)程調(diào)度請(qǐng)求結(jié)束。
[0037] 圖2為本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法中調(diào)度集D構(gòu)造算法的流程圖。首先 輸入進(jìn)程集A,再將進(jìn)程集A中的所有進(jìn)程復(fù)制到臨時(shí)進(jìn)程集C,初始化調(diào)度集D為空集。當(dāng) 臨時(shí)進(jìn)程集C不空時(shí),重復(fù)執(zhí)行如下操作:
[0038] 1)隨機(jī)獲取臨時(shí)進(jìn)程集C中的一個(gè)進(jìn)程a ;
[0039] 2)執(zhí)行集合運(yùn)算操作C=C_f (a) - {a};
[0040] 3) D=Du {a} 〇
[0041] 當(dāng)臨時(shí)進(jìn)程集C為空集時(shí),輸出調(diào)度集D。由于是隨機(jī)取臨時(shí)進(jìn)程集C中的進(jìn)程 a,因此最終組成的調(diào)度集D不唯一。
[0042] 圖3為本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法的流程圖。計(jì)算機(jī)多進(jìn)程公平調(diào)度方 法的步驟如下:
[0043] 步驟一:由進(jìn)程集A中選出可進(jìn)行并發(fā)調(diào)度的進(jìn)程,組成調(diào)度集D,將進(jìn)程集A中 剩余未被調(diào)度的進(jìn)程按原次序排列組成后備調(diào)度隊(duì)列L ;
[0044] 步驟二:判斷進(jìn)程調(diào)度請(qǐng)求是否結(jié)束,如未結(jié)束則執(zhí)行下一步驟,否則調(diào)度結(jié)束;
[0045] 步驟三:對(duì)調(diào)度集D中所有進(jìn)程進(jìn)行并發(fā)調(diào)度;
[0046] 步驟四:將已被調(diào)度的進(jìn)程插入到后備調(diào)度隊(duì)列L的隊(duì)尾;
[0047] 步驟五:清空調(diào)度集D ;
[0048] 步驟六:從后備調(diào)度隊(duì)列L的隊(duì)首向后依次選取所有可并發(fā)調(diào)度的進(jìn)程,構(gòu)造下 一次的調(diào)度集D,并跳轉(zhuǎn)至步驟二。
[0049] 本發(fā)明計(jì)算機(jī)多進(jìn)程公平調(diào)度的方法利用了集合運(yùn)算的操作,使得計(jì)算機(jī)處理器 能夠?qū)φ{(diào)度集D中的所有進(jìn)程進(jìn)行并發(fā)調(diào)度,將暫時(shí)不能被并發(fā)調(diào)度的進(jìn)程放入后備調(diào)度 隊(duì)列L,然后將調(diào)度后的進(jìn)程同樣放入后備調(diào)度隊(duì)列L,再依據(jù)隊(duì)列先進(jìn)先出特點(diǎn),取出后 備調(diào)度隊(duì)列L中所有可以進(jìn)行并發(fā)調(diào)度的進(jìn)程構(gòu)造調(diào)度集D,因此所有進(jìn)程都會(huì)被公平的 調(diào)度。
[0050]