王洋
摘要:隨著工業(yè)水平的不斷發(fā)展,計算機已經滲入到工業(yè)控制的很多領域。隨之而來的就是大量數(shù)據(jù)的處理以及運算,這就需要一個龐大的計算機系統(tǒng)作為支持?;谟嬎銠C協(xié)同工作理論(CSCW)的分布式耦合多機系統(tǒng)就是在此前提下受到研究人員關注的。本文對CSCW的工作原理以及多機規(guī)劃相關技術進行了較為深入的分析,給出了多機規(guī)劃系統(tǒng)的實現(xiàn)方法。
關鍵詞:CSCW;多機規(guī)劃;數(shù)據(jù)分配
中圖分類號:TP311
所謂CSCW,是指在計算機技術以及網絡技術的支持下,處于同一區(qū)域內的一個群體相互傳輸信息、協(xié)同協(xié)作完成一項任務。CSCW的組成要素主要有以下幾部分:(1)信息共享。(2)多媒體區(qū)域組合通信。(3)組合成員之間協(xié)作管理。
CSCW支持多個計算機系統(tǒng)共同執(zhí)行同一任務,也就是說CSCW對每一個任務進行劃分,并科學分配給組合內的每一個計算機系統(tǒng),讓它們可以同時工作,共同去執(zhí)行一項任務,CSCW起到一個總體協(xié)調的作用。這其中組合工作協(xié)調系統(tǒng)是CSCW的關鍵,它要對組合內的每一個成員分配其所要承擔的任務,同時還要對組合共同執(zhí)行任務的過程進行總控制協(xié)調。
1 多機規(guī)劃技術的實現(xiàn)
1.1 多機規(guī)劃系統(tǒng)任務分配
系統(tǒng)對任務進行分配以及動態(tài)調度,主要的作用就是想充分利用每一個單位計算機系統(tǒng)的可用資源,盡可能的去平衡分配任務,保證每一個單位計算機系統(tǒng)均可以在最短的時間內做出響應,從而從整體上降低整個系統(tǒng)的運算時間,提高系統(tǒng)運行過程的同步性。平衡的任務分配功能,能夠最大程度的降低系統(tǒng)執(zhí)行時間,最大限度的提高系統(tǒng)運行效率。多機規(guī)劃系統(tǒng)中的主控機就是任務分配的主要承擔者。主控機在系統(tǒng)的作用主要有兩個方面,一方面就是等待新任務的到來,并對這些任務進行劃分,平衡分配給各個單位計算機系統(tǒng);另一方面就是接收并分析各個執(zhí)行任務的單位計算機所反饋回來的執(zhí)行結果,根據(jù)分析來確定其下一步的任務。當主控機向每一個單位計算機系統(tǒng)分配任務時,也有兩種處理方式。第一種就是當新任務出現(xiàn)時,各個單位計算機處于空閑狀態(tài),這時主控機只需要對該任務根據(jù)單位計算機系統(tǒng)的個數(shù)來劃分任務,同時將每一個子任務相應的分配給不同的單位計算機系統(tǒng);第二中就是當新任務出現(xiàn)時,各個單位計算機系統(tǒng)還處于工作狀態(tài),這時就需要主控機根據(jù)每個計算機系統(tǒng)當前所執(zhí)行任務的類型來進行新任務的分配。如果當前計算機系統(tǒng)所執(zhí)行的任務與新任務不同,那么主控機就要根據(jù)工作時間來平衡分配新任務;如果當前計算機系統(tǒng)所執(zhí)行的任務與新任務相同,那么這個任務將直接分配給該計算機系統(tǒng)繼續(xù)執(zhí)行。
1.2 多機規(guī)劃系統(tǒng)動態(tài)調度
系統(tǒng)將任務分配完后,各個單位計算機系統(tǒng)就開始執(zhí)行分配給自身的子任務。任務執(zhí)行完成后,會反饋給主控機相應的執(zhí)行結果以及執(zhí)行時間,此時主控機就開始進行動態(tài)調度。多機規(guī)劃系統(tǒng)動態(tài)調度機制可以用下表來表示:
2 多機規(guī)劃系統(tǒng)數(shù)據(jù)傳輸及同步運算的實現(xiàn)
高速可靠的數(shù)據(jù)傳輸對于多機規(guī)劃系統(tǒng)而言非常關鍵,是多機規(guī)劃系統(tǒng)是否可以安全高效的執(zhí)行任務的基本保證。
數(shù)據(jù)同步執(zhí)行是多機規(guī)劃系統(tǒng)功能安全可靠實現(xiàn)的又一重要組成部分,主控機只有將所獲得任務信息實時安全的傳送給各個子系統(tǒng),才能夠保證多級規(guī)劃系統(tǒng)能夠高效的運行。
2.1 數(shù)據(jù)傳輸。本文所提及的多機規(guī)劃系統(tǒng)進行數(shù)據(jù)傳輸時,執(zhí)行的傳輸協(xié)議是UDP協(xié)議。但是UDP協(xié)議又天生有丟包以及數(shù)據(jù)亂序的缺陷。
UDP協(xié)議中數(shù)據(jù)丟包問題可以通過系統(tǒng)所建立的確認機制來解決。數(shù)據(jù)傳輸、接收的兩方Client與Server之間需要一個數(shù)據(jù)包確認過程,即Client端經路由器向Server端發(fā)送數(shù)據(jù)包,在Server接收到該數(shù)據(jù)包后需要向Client端發(fā)送一個確認響應,已告知Client端收到了數(shù)據(jù)包。一旦超過規(guī)定時限Client未收到該確認信息,則表明Server端未收到所發(fā)送的數(shù)據(jù)包,Client需要重新發(fā)送。但是數(shù)據(jù)包重發(fā)的次數(shù)也是有限制的,如果重發(fā)的次數(shù)大于了限值,那么就可以認為目標機器不可接收,則需要在主控機中刪除該目標機器。
對于UDP協(xié)議中可能出現(xiàn)的數(shù)據(jù)亂序的問題,解決方式是將發(fā)送的每一幀數(shù)據(jù)都添加上幀號,同時確定出數(shù)據(jù)的總幀數(shù)。每一幀的具體結構可以通過下表來表示:
2.2 數(shù)據(jù)同步。對于多機規(guī)劃系統(tǒng)而言,數(shù)據(jù)同步可以分為兩大類,一類是由主控機發(fā)起的,對總任務數(shù)據(jù)、子任務數(shù)據(jù)、任務調度數(shù)據(jù)或者任務結果數(shù)據(jù)進行同步;另一類是由各個子系統(tǒng)發(fā)起的,對各個機器信息進行實時數(shù)據(jù)更新。不管是哪一種數(shù)據(jù)同步方式,均需要一個高效的安全的數(shù)據(jù)同步方法。
(1)環(huán)式同步法。對系統(tǒng)中所包含的主控機以及各個子系統(tǒng)均進行順序標號,形成一個可循環(huán)的機器系統(tǒng),數(shù)據(jù)更新的順序就按照編號的順序進行。也就是說系統(tǒng)內的所有機器均按照自身的編號排列為一個可循環(huán)的線性系統(tǒng)。這樣每一個子系統(tǒng)均由一個前驅系統(tǒng)以及一個后繼系統(tǒng),信息更新就是將該系統(tǒng)中的信息更新到與其相連的前驅系統(tǒng)中。數(shù)據(jù)環(huán)視同步過程可以簡單描述為:主控機接收到所要更新的信息后,就將該信息發(fā)送給系統(tǒng)中編號最大的子系統(tǒng),這個子系統(tǒng)就將這個更新信息發(fā)送給與其相連的前驅系統(tǒng),隨后該更新信息就逐次發(fā)送給下一個前驅系統(tǒng)。同步過程的結束是以主控機接收到編號最小的子系統(tǒng)所發(fā)送回來的確認信息為準。(2)星式同步法。所謂星式同步法,是指所需要更新的信息是由主控機直接發(fā)送給各個子系統(tǒng)的。主控機事先對需要進行更新的信息進行匯總,然后將這些更新信息直接發(fā)送給系統(tǒng)中的各個子系統(tǒng)。具體的更新過程可以描述為:主控機對任務信息進行整理后,將這些信息依次發(fā)送給各個子系統(tǒng)。當子系統(tǒng)收到主控機發(fā)送個信息后,需要向主控機反饋接收確認信號。主控機接收到反饋信號,就說明發(fā)送成功;如果未接收到發(fā)送信號,則表明發(fā)送不成功,需要進行重發(fā)。一旦超過了重發(fā)限值,則認為該子系統(tǒng)無法接受,轉入宕機處理。
(3)分組同步法。對于多機規(guī)劃系統(tǒng)而言,一旦出現(xiàn)過多的一級管理,那么勢必會影響主控機的工作性能。為了能夠解決大系統(tǒng)出現(xiàn)的這種問題,研究人員就提出了分級管理模式。所謂分級管理,就是在多機規(guī)劃系統(tǒng)中,將各個子系統(tǒng)進行組分劃分,每一個小組中有一個系統(tǒng)是該小組的負責人,主控機與這個小組中的任何一個子系統(tǒng)聯(lián)系只需聯(lián)系這個小組負責人即可,再由小組負責人來向該子系統(tǒng)具體分配任務。主控機與小組負責人之間、小組內各個子系統(tǒng)之間實際數(shù)據(jù)同步過程與星式同步法相類似。
3 多機規(guī)劃系統(tǒng)異常處理方法
多機規(guī)劃系統(tǒng)的異常處理要在兩個層面上進行把握:一種就是程序層面上,每一個子系統(tǒng)運行過程的程序設計一定要考慮到異常情況的出現(xiàn),以及處理辦法,對于各種可能出現(xiàn)的異常情況都要有相應的處理程序;另外一種就是在系統(tǒng)層面上,當一些子系統(tǒng)出現(xiàn)了宕機或者離線的情況時,不需要在執(zhí)行系統(tǒng)復位操作就可以完成所分配的任務。本文研究的多機規(guī)劃技術,對于異常問題處理,給出了具體的解決程序:
try
{//可能導致異常的代碼
if(出現(xiàn)錯誤了?)
{
throwmyerror(“somethingbadhappended”);
}
}
Catch(myerror)
{//異常處理過程
}
3.1 拋出異常。所謂異常拋出動作,是指程序運行過程中,當出現(xiàn)異常情況時,運行的前后環(huán)境并未給出解決異常情況處理的足夠信息,此時需要建立一個包含錯誤信息的數(shù)據(jù)包,并將該數(shù)據(jù)包發(fā)送給運行環(huán)境以外的系統(tǒng)之中。通常情況下,不同情況時所拋出的對象類型也不同。
myerror是按照字符變量作為參數(shù)的一種普通類,在進行異常拋出動作時,可以選取任意的一個變量作為所需要的參數(shù)。此外,可以使用throw關鍵字來構造函數(shù),從而新建立出一個原程序中并不包含的對象。實際上,所新創(chuàng)建的這個對象就是throw函數(shù)的返回值。
3.2 try塊。通常情況下,函數(shù)中一旦有異常拋出,那么該函數(shù)將在異常拋出后,直接退出。如用戶不想在異常拋出后,退出函數(shù),就需要在函數(shù)中新創(chuàng)建一個用于解決實際問題的程序塊。Try塊還可以對函數(shù)的調用過程進行測試。
3.3 異常處理器。當異常處理器接收到所拋出的異常信息時,就會在最短的時間內對異常問題進行銷毀,所以對于異常處理器的設計,最重要的一點就是保證異常處理器能夠處理各種類型的異常問題。具體方法是在try塊之后,設計一個由catch類關鍵字引導的程序塊。每一個catch語句實質上就是一個小型的函數(shù),該函數(shù)具有唯一的參數(shù),而且這個參數(shù)是由一個特殊類型所組成的。此外,異常處理器通常情況下都會有一個標識符。在測試塊之后一定要設定異常處理部分,當某個異常信號被拋出之后,異常處理器中的第一個參數(shù)與異常拋出對象能夠相對應上的函數(shù)將對這個異常信號進行抓獲,之后在執(zhí)行catch語句,進入異常處理程序。
上面對多機規(guī)劃技術中的幾個關鍵部分進行了簡單的介紹與分析。一個多級規(guī)劃系統(tǒng)的建立,需要多方面的學科作為理論基礎,在實際應用過程中,也需要不斷地對系統(tǒng)各個部件進行性能改善。目前本文設計的多機規(guī)劃系統(tǒng)已經初步成型,下一步的工作就是展開實際應用調試。筆者將在今后的工作中,繼續(xù)對多機規(guī)劃技術進行更為深入的研究,以期能夠進一步的提高系統(tǒng)的性能。
參考文獻:
[1]唐蘇妍,朱一凡,李群等.多Agent系統(tǒng)任務分配方法綜述[J].系統(tǒng)工程與電子技術,2010,VOL.32(10):2155-2160.
[2]何炎祥,陳新萌.Agent和多Agent系統(tǒng)的設計與應用[M].武漢:武漢大學出版社,200l.
[3]林劍檸,吳慧中.基于遺傳算法的網格資源調度算法[J].計算機研究與發(fā)展,2004,VOL(12):132-135.