專利名稱:一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)模擬和仿真技術(shù)領(lǐng)域,具體地說,本發(fā)明涉及一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法。
背景技術(shù):
在網(wǎng)絡(luò)迅速膨脹的今天,網(wǎng)絡(luò)研究人員一方面要不斷思考新的網(wǎng)絡(luò)協(xié)議和算法,為網(wǎng)絡(luò)發(fā)展做前瞻性的基礎(chǔ)研究;另ー方面也要研究如何利用和整合現(xiàn)有網(wǎng)絡(luò)資源,使網(wǎng) 絡(luò)達(dá)到最高效能,這兩者都需要對新的網(wǎng)絡(luò)方案進(jìn)行驗(yàn)證和分析。傳統(tǒng)的實(shí)驗(yàn)方法成本很高,重新配置或共享資源很難,運(yùn)用起來不夠靈活,試驗(yàn)床的規(guī)模很難做到很大,不能實(shí)現(xiàn)網(wǎng)絡(luò)中的多種通信流量和拓?fù)涞娜诤?,給網(wǎng)絡(luò)研究帶來極大的局限性。而網(wǎng)絡(luò)模擬技術(shù)提供了ー種方便、高效的驗(yàn)證和分析方法。基于網(wǎng)絡(luò)模擬技術(shù),研究人員可以根據(jù)需要設(shè)計(jì)網(wǎng)絡(luò)模型,用相對較少的時(shí)間和費(fèi)用了解不同條件下網(wǎng)絡(luò)的特性,獲取網(wǎng)絡(luò)豐富有效的數(shù)據(jù)。離散事件模擬是幾種常用的網(wǎng)絡(luò)模擬模型之一,該模型下僅在事件發(fā)生時(shí)進(jìn)行狀態(tài)的修改,由事件發(fā)生的時(shí)間量確定模擬時(shí)鐘的推進(jìn)。NS (NetworkSimulator)、OPNET, NSME等軟件是現(xiàn)有的應(yīng)用較為廣泛的離散事件網(wǎng)絡(luò)模擬器,其模擬處理過程的速率不直接對應(yīng)著實(shí)際時(shí)間,而是通過統(tǒng)ー時(shí)鐘控制和分組包頭對應(yīng)的時(shí)間戳字段標(biāo)志來完成的。相對于其它模擬手段,離散事件網(wǎng)絡(luò)模擬器具有明顯的速度和效率優(yōu)勢,并且具有較強(qiáng)的擴(kuò)展性,然而,由于使用離散事件進(jìn)行時(shí)間驅(qū)動,導(dǎo)致仿真時(shí)間與實(shí)際時(shí)間不一致,在某些情形下模擬環(huán)境下的測試結(jié)果會與真實(shí)環(huán)境下的結(jié)果相背離。例如,當(dāng)ー個(gè)真實(shí)軟件向網(wǎng)絡(luò)模擬器中的某一服務(wù)器請求建立TCP連接時(shí),如果離散事件模擬器的時(shí)鐘推進(jìn)很慢(需處理的事件較多的情況下),導(dǎo)致網(wǎng)絡(luò)模擬器中的服務(wù)器在應(yīng)答該TCP連接前該真實(shí)軟件的TCP連接因超時(shí)而連接失敗。但是在真實(shí)軟件判定連接失敗的同時(shí),實(shí)際上網(wǎng)絡(luò)模擬器時(shí)鐘可能只推進(jìn)了很少一部分,并未到達(dá)真實(shí)軟件發(fā)生超時(shí)的時(shí)刻。顯然,這種情形下,模擬環(huán)境下的測試結(jié)果是失真的。因此,當(dāng)前迫切需要一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,以避免模擬環(huán)境因與真實(shí)環(huán)境時(shí)間不一致而造成失真。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,以避免模擬環(huán)境與真實(shí)環(huán)境因時(shí)間不一致而造成失真。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供了一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,包括下列步驟I)某ー離散事件發(fā)生時(shí),確定離散事件發(fā)生時(shí)間所對應(yīng)的虛擬時(shí)鐘滴答計(jì)數(shù)值,并將其作為目標(biāo)計(jì)數(shù)值發(fā)送給內(nèi)核態(tài)程序;所述虛擬時(shí)鐘滴答計(jì)數(shù)值用于控制所有接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件的定時(shí)器的運(yùn)行;2)內(nèi)核態(tài)程序以I為步長逐步累加虛擬時(shí)鐘滴答計(jì)數(shù)值直至達(dá)到所述目標(biāo)計(jì)數(shù)值;其中每次虛擬時(shí)鐘滴答計(jì)數(shù)值加I時(shí),對于接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件,(操作系統(tǒng)內(nèi)核)判斷所述真實(shí)軟件的定時(shí)器是否超時(shí),如果超時(shí)則觸發(fā)相應(yīng)的定時(shí)器事件。其中,所述步驟I)包括下列子步驟11)網(wǎng)絡(luò)模擬器時(shí)鐘發(fā)生跳躍后,向用戶態(tài)監(jiān)聽程序發(fā)送更新虛擬時(shí)鐘滴答的請求,該請求中攜帶網(wǎng)絡(luò)模擬器當(dāng)前的時(shí)鐘信息;12)用戶態(tài)監(jiān)聽程序在收到更新虛擬時(shí)鐘滴答的請求后,解析所要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值;13)向內(nèi)核態(tài)程序發(fā)送更新虛擬時(shí)鐘滴答請求,該請求中攜帯所解析的要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值。其中,所述步驟11)中,網(wǎng)絡(luò)模擬器到用戶態(tài)程序的命令傳輸采用網(wǎng)絡(luò)套接字、內(nèi)存共享或者proc文件系統(tǒng)的方式實(shí)現(xiàn)。其中,所述步驟13)中,用戶態(tài)程序到內(nèi)核態(tài)程序的命令傳輸Netlink原始套接字、內(nèi)存共享或者Proc文件系統(tǒng)的方式實(shí)現(xiàn)。其中,所述步驟2)包括下列子步驟21)內(nèi)核態(tài)程序收到更新虛擬時(shí)鐘滴答請求后,更新當(dāng)前虛擬時(shí)鐘滴答值為所述目標(biāo)計(jì)數(shù)值,啟動虛擬時(shí)鐘滴答補(bǔ)齊程序;22)虛擬時(shí)鐘滴答補(bǔ)齊程序逐個(gè)補(bǔ)齊更新前和更新后的兩個(gè)虛擬時(shí)鐘滴答計(jì)數(shù)值之間的所有虛擬時(shí)鐘滴答,并為每一個(gè)補(bǔ)齊的虛擬時(shí)鐘滴答處理定時(shí)器事件。其中,所述虛擬時(shí)鐘滴答的創(chuàng)建過程包括下列步驟101)在Linux內(nèi)核中創(chuàng)建記錄虛擬時(shí)鐘滴答的整型變量,用以模擬系統(tǒng)內(nèi)核中的真實(shí)時(shí)鐘滴答;102)設(shè)置虛擬時(shí)鐘滴答變量的標(biāo)識,使得系統(tǒng)能夠識別獨(dú)立于真實(shí)時(shí)鐘滴答的虛擬時(shí)鐘滴答;103)設(shè)置能夠?qū)μ摂M時(shí)鐘滴答變量進(jìn)行修改的系統(tǒng)調(diào)用模塊。其中,所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法還包括對調(diào)用內(nèi)核的進(jìn)程進(jìn)行標(biāo)記以區(qū)分該進(jìn)程對應(yīng)的真實(shí)軟件是否運(yùn)行于所述離散事件網(wǎng)絡(luò)模擬器中。與現(xiàn)有技術(shù)相比,本發(fā)明具有下列技術(shù)效果I、本發(fā)明能夠使離散事件網(wǎng)絡(luò)模擬環(huán)境與真實(shí)環(huán)境的時(shí)鐘同步,避免模擬環(huán)境因與真實(shí)環(huán)境時(shí)間不一致而造成失真。2、本發(fā)明中,真實(shí)軟件不需經(jīng)過修改便可直接應(yīng)用于離散事件網(wǎng)絡(luò)模擬環(huán)境中且與離散事件網(wǎng)絡(luò)模擬環(huán)境時(shí)鐘同步。
圖I示出了基于離散事件的網(wǎng)絡(luò)模擬器虛擬時(shí)鐘示意圖;圖2示出了本發(fā)明ー個(gè)實(shí)施例中創(chuàng)建虛擬時(shí)鐘滴答的流程圖;圖3示出了本發(fā)明ー個(gè)實(shí)施例中在離散事件網(wǎng)絡(luò)模擬環(huán)境與真實(shí)軟件之間同步時(shí)鐘的方法流程圖;圖4示出了本發(fā)明ー個(gè)實(shí)施例中網(wǎng)絡(luò)模擬器驅(qū)動內(nèi)核態(tài)程序更新虛擬時(shí)鐘滴答的流程圖
圖5示出了本發(fā)明ー個(gè)實(shí)施例中內(nèi)核態(tài)程序更新虛擬時(shí)鐘滴答的流程圖;圖6示出了本發(fā)明ー個(gè)實(shí)施例中離散事件驅(qū)動虛擬時(shí)鐘滴答的示意圖;圖7為使用網(wǎng)絡(luò)模擬器時(shí)鐘驅(qū)動真實(shí)時(shí)鐘實(shí)現(xiàn)結(jié)構(gòu)示意圖;圖8示出了本發(fā)明ー個(gè)實(shí)施例中標(biāo)識進(jìn)程流程圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明做進(jìn)ー步地描述。根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法。為便于理解,以下分三個(gè)部分介紹該實(shí)施例,第一部分是虛擬時(shí)鐘滴答,第二部分是利用虛擬時(shí)鐘滴答實(shí)現(xiàn)離散事件網(wǎng)絡(luò)模擬環(huán)境與真實(shí)軟件之間的時(shí)鐘同步,第三部分是進(jìn)程的標(biāo)記和識別。一、虛擬時(shí)鐘滴答I. I離散事件模擬離散事件網(wǎng)絡(luò)模擬器的時(shí)鐘是由離散事件驅(qū)動的,該時(shí)鐘不是連續(xù)的。當(dāng)某ー個(gè)事件發(fā)生時(shí),網(wǎng)絡(luò)模擬器的時(shí)鐘便跳躍到該時(shí)間點(diǎn),直至下ー個(gè)事件發(fā)生為止,模擬時(shí)鐘的時(shí)間保持不變。當(dāng)且僅當(dāng)下ー個(gè)事件發(fā)生時(shí),模擬器時(shí)鐘直接跳躍到下ー個(gè)事件的時(shí)間點(diǎn),而跳躍過程不包含位于這兩個(gè)時(shí)間點(diǎn)之間的時(shí)間點(diǎn)。如圖I所示,A區(qū)域表示真實(shí)的時(shí)間軸,B區(qū)域表示的是操作系統(tǒng)時(shí)鐘下的一系列的真實(shí)網(wǎng)絡(luò)事件的發(fā)生時(shí)間,共包含五個(gè)事件,分別發(fā)生在08、48、118、168、268。在真實(shí)網(wǎng)絡(luò)中,這五個(gè)事件會在固定的時(shí)間被執(zhí)行。C區(qū)域表示離散事件網(wǎng)絡(luò)模擬器中所模擬的上述五個(gè)事件以及網(wǎng)絡(luò)模擬器的模擬時(shí)間變化。離散事件網(wǎng)絡(luò)模擬器中,原來發(fā)生在0s、4s、lls、16s、26s的事件可能會在很短的時(shí)間內(nèi)連續(xù)執(zhí)行,而在執(zhí)行完某ー個(gè)事件之前,網(wǎng)絡(luò)模擬器的時(shí)鐘是不發(fā)生變化的,當(dāng)下ー個(gè)事件發(fā)生時(shí),模擬器時(shí)鐘直接跳躍到下ー個(gè)事件的時(shí)間點(diǎn)。例如,在第一個(gè)事件發(fā)生之后到第二個(gè)事件發(fā)生之前的整個(gè)時(shí)間段里邊,網(wǎng)絡(luò)模擬器的時(shí)鐘不變,保持為Os,當(dāng)?shù)诙€(gè)事件發(fā)生吋,網(wǎng)絡(luò)模擬器的時(shí)鐘直接跳到4s。I. 2時(shí)鐘滴答在操作系統(tǒng)內(nèi)核中,有一個(gè)變量記錄從開機(jī)到當(dāng)前時(shí)間的時(shí)間間隔,叫做時(shí)鐘滴答。例如在Linux操作系統(tǒng)內(nèi)核中,每IOms系統(tǒng)會產(chǎn)生一個(gè)硬件中斷,該中斷將系統(tǒng)的時(shí)鐘滴答計(jì)數(shù)值加1,并啟動程序檢測更新后的時(shí)鐘滴答計(jì)數(shù)值是否大于某一事件觸發(fā)的時(shí)間,如果時(shí)鐘滴答計(jì)數(shù)值大于該事件觸發(fā)的時(shí)間,則系統(tǒng)調(diào)用相關(guān)函數(shù)處理該事件。也就是說,在真實(shí)操作系統(tǒng)中,真實(shí)軟件中的ー類事件是由時(shí)鐘滴答驅(qū)動的,為方便描述,本文中將其稱為定時(shí)器事件。例如背景技術(shù)部分提到的,當(dāng)一個(gè)真實(shí)軟件向網(wǎng)絡(luò)模擬器中的某一服務(wù)器請求建立TCP連接吋,如果該真實(shí)軟件在規(guī)定時(shí)間內(nèi)未收到應(yīng)答則判定連接失敗。這ー事件就是ー個(gè)典型的定時(shí)器事件。I. 3時(shí)鐘滴答事件驅(qū)動方法現(xiàn)有技術(shù)中,操作系統(tǒng)內(nèi)核的時(shí)鐘滴答計(jì)數(shù)值加I時(shí)(即每ー個(gè)時(shí)鐘滴答發(fā)生吋),操作系統(tǒng)內(nèi)核會判斷真實(shí)軟件的定時(shí)器是否超時(shí),如果超時(shí)則觸發(fā)相應(yīng)的定時(shí)器事件,如此就完成了時(shí)鐘滴答對軟件時(shí)鐘定時(shí)器的控制。真實(shí)操作系統(tǒng)中固定時(shí)間間隔的硬件中斷保證了操作系統(tǒng)在每ー個(gè)固定時(shí)間間隔內(nèi)執(zhí)行一次時(shí)鐘滴答計(jì)數(shù)值加I的操作,從而保證了定時(shí)器事件的及時(shí)執(zhí)行。I. 4虛擬時(shí)鐘滴答如前文所述,在離散事件模擬器中,其虛擬時(shí)間并不是均勻前進(jìn)的,相反它是在某一個(gè)離散事件發(fā)生時(shí),直接跳躍到下一個(gè)時(shí)間點(diǎn),而兩個(gè)時(shí)間點(diǎn)之間的間隔是不確定的,這就使得真實(shí)軟件在模擬網(wǎng)絡(luò)中運(yùn)行會出現(xiàn)時(shí)間不一致的問題,進(jìn)而導(dǎo)致模擬網(wǎng)絡(luò)的模擬結(jié)果失真。為解決上述問題,本實(shí)施例提出虛擬時(shí)鐘滴答的概念?;诂F(xiàn)有的時(shí)鐘滴答的思想,本實(shí)施例創(chuàng)建了ー個(gè)獨(dú)立于操作系統(tǒng)內(nèi)核時(shí)鐘滴答的虛擬時(shí)鐘滴答,該虛擬時(shí)鐘滴答與離散事件網(wǎng)絡(luò)模擬器中的時(shí)鐘同步,而所有接入該離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件都通過該虛擬時(shí)鐘滴答控制定時(shí)器的運(yùn)行。即對于接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件,當(dāng)虛擬時(shí)鐘滴答計(jì)數(shù)值加I時(shí),操作系統(tǒng)內(nèi)核判斷真實(shí)軟件 的定時(shí)器是否超吋,如果超時(shí)則觸發(fā)相應(yīng)的定時(shí)器事件。I. 5虛擬時(shí)鐘滴答的創(chuàng)建方法圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的虛擬時(shí)鐘滴答的創(chuàng)建過程,該虛擬時(shí)鐘滴答的創(chuàng)建過程包括下列步驟步驟101、在Linux內(nèi)核中創(chuàng)建記錄虛擬時(shí)鐘滴答的整型變量,用以模擬系統(tǒng)內(nèi)核中的真實(shí)時(shí)鐘滴答;步驟102、設(shè)置虛擬時(shí)鐘滴答變量的標(biāo)識,使得系統(tǒng)能夠識別獨(dú)立于真實(shí)時(shí)鐘滴答的虛擬時(shí)鐘滴答;步驟103、設(shè)置能夠?qū)μ摂M時(shí)鐘滴答變量進(jìn)行修改的系統(tǒng)調(diào)用模塊(系統(tǒng)調(diào)用模塊可以用調(diào)用函數(shù)的形式實(shí)現(xiàn))。I. 6離散事件模擬器驅(qū)動虛擬時(shí)鐘滴答的方法的簡介在離散事件網(wǎng)絡(luò)模擬器的仿真網(wǎng)絡(luò)中,離散事件的特點(diǎn)使得虛擬時(shí)鐘滴答不能像真實(shí)操作系統(tǒng)中的時(shí)鐘滴答一樣均勻向前推迸。如此,在一個(gè)離散事件發(fā)生的時(shí)候,可能會跳過ー個(gè)或多個(gè)虛擬時(shí)鐘滴答,為保證接入該離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件行為的正常,需要將跳過的時(shí)鐘滴答補(bǔ)齊。補(bǔ)齊方法如下從當(dāng)前虛擬時(shí)鐘滴答開始,使得虛擬時(shí)鐘滴答毎次加1,直到虛擬時(shí)鐘滴答達(dá)到下一個(gè)離散事件確定的仿真網(wǎng)絡(luò)時(shí)間;在每一次完成加I操作之后,執(zhí)行一次定時(shí)器事件檢測。在下文中將對這一點(diǎn)做進(jìn)ー步地介紹。ニ、利用虛擬時(shí)鐘滴答實(shí)現(xiàn)離散事件網(wǎng)絡(luò)模擬環(huán)境與真實(shí)軟件之間的時(shí)鐘同步根據(jù)本發(fā)明的一個(gè)實(shí)施例中,提供了ー種利用虛擬時(shí)鐘滴答實(shí)現(xiàn)離散事件網(wǎng)絡(luò)模擬環(huán)境與真實(shí)軟件之間的時(shí)鐘同步的方法,參考圖3,該時(shí)鐘同步的方法包括下列步驟201 203 步驟201、某ー離散事件發(fā)生時(shí),離散事件網(wǎng)絡(luò)模擬器時(shí)鐘跳躍至該離散事件發(fā)生時(shí)間(即網(wǎng)絡(luò)模擬器中虛擬時(shí)鐘跳躍到所述離散事件包含的時(shí)間戳)。離散事件網(wǎng)絡(luò)模擬器中,執(zhí)行離散事件分為兩個(gè)部分其ー是更新離散事件網(wǎng)絡(luò)模擬器時(shí)鐘到該事件的發(fā)生時(shí)間;其ニ是處理該離散事件。更新網(wǎng)絡(luò)模擬器的時(shí)鐘是非常重要的,因?yàn)檎麄€(gè)網(wǎng)絡(luò)模擬的過程都基于該時(shí)鐘。為了提高模擬器的效率,模擬網(wǎng)絡(luò)使用了離散事件的方法,保證了在ー個(gè)仿真時(shí)間段中執(zhí)行效率最高。更新離散事件網(wǎng)絡(luò)模擬器時(shí)鐘的具體方法在前文的I. I部分已有介紹,此處不再贅述。步驟202、確定離散事件發(fā)生時(shí)間所對應(yīng)的虛擬時(shí)鐘滴答計(jì)數(shù)值,并將其作為目標(biāo)計(jì)數(shù)值發(fā)送給內(nèi)核態(tài)程序。為了保證虛擬時(shí)鐘滴答和網(wǎng)絡(luò)模擬器的時(shí)鐘同步,離散事件發(fā)生時(shí),需要在更新網(wǎng)絡(luò)模擬器時(shí)鐘的同時(shí),將更改后的時(shí)鐘同步到內(nèi)核中的虛擬時(shí)鐘滴答計(jì)數(shù)器。步驟203、內(nèi)核態(tài)程序以I為步長逐步累加虛擬時(shí)鐘滴答計(jì)數(shù)值直至達(dá)到所述目標(biāo)計(jì)數(shù)值。每次虛擬時(shí)鐘滴答計(jì)數(shù)值加I時(shí),對于接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件,操作系統(tǒng)內(nèi)核判斷所述真實(shí)軟件的定時(shí)器是否超時(shí),如果超時(shí)則觸發(fā)相應(yīng)的定時(shí)器事件。 圖4示出了網(wǎng)絡(luò)模擬器驅(qū)動內(nèi)核態(tài)程序更新虛擬時(shí)鐘滴答的流程圖,參考圖4,根據(jù)本發(fā)明的一個(gè)實(shí)施例,前述步驟202包括下列子步驟步驟2021、網(wǎng)絡(luò)模擬器時(shí)鐘發(fā)生跳躍后,向用戶態(tài)監(jiān)聽程序發(fā)送更新虛擬時(shí)鐘滴答的請求,該請求中攜帶網(wǎng)絡(luò)模擬器當(dāng)前的時(shí)鐘信息。本實(shí)施例中,網(wǎng)絡(luò)模擬器到用戶態(tài)程序的命令傳輸(包括更新虛擬時(shí)鐘滴答請求的傳輸)有以下幾種可選方案1、網(wǎng)絡(luò)套接字,2、內(nèi)存共享,3、proc文件系統(tǒng)等;步驟2022、用戶態(tài)監(jiān)聽程序在收到更新虛擬時(shí)鐘滴答的請求后,解析更新請求,根據(jù)網(wǎng)絡(luò)模擬器當(dāng)前時(shí)鐘確定所要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值。本實(shí)施例中,在操作系統(tǒng)的用戶態(tài)運(yùn)行著ー個(gè)服務(wù)進(jìn)程,該進(jìn)程等待網(wǎng)絡(luò)模擬器發(fā)送的更新虛擬時(shí)鐘滴答命令。接收命令之后,解析要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值。網(wǎng)絡(luò)模擬器中使用的是浮點(diǎn)型數(shù)據(jù)表示的時(shí)間,単位為秒。而在本實(shí)施例的操作系統(tǒng)中,其時(shí)間度量是以時(shí)鐘滴答為單位的,每ー個(gè)時(shí)鐘滴答為0.01秒(有的操作系統(tǒng)為O.001秒)。因此需要將以浮點(diǎn)型數(shù)據(jù)表示的網(wǎng)絡(luò)模擬器時(shí)間轉(zhuǎn)換為時(shí)鐘滴答表示的整數(shù)數(shù)據(jù),即虛擬時(shí)鐘滴答的計(jì)數(shù)值。步驟2023、通過系統(tǒng)調(diào)用的方式,向內(nèi)核態(tài)程序發(fā)送更新虛擬時(shí)鐘滴答請求,該請求中攜帶所解析的要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值。本實(shí)施例中,用戶態(tài)程序到內(nèi)核態(tài)程序的命令傳輸(包括更新虛擬時(shí)鐘滴答請求的傳輸)有以下幾種可選方案包括l、Netlink原始套接字,2、內(nèi)存共享,3)proc文件系統(tǒng)。參考圖5,根據(jù)本發(fā)明的一個(gè)實(shí)施例,步驟203在具體實(shí)現(xiàn)上包括下列子步驟步驟2031、內(nèi)核態(tài)程序收到更新虛擬時(shí)鐘滴答請求后,更新當(dāng)前虛擬時(shí)鐘滴答值為目標(biāo)計(jì)數(shù)值(即當(dāng)前離散事件發(fā)生時(shí)間所對應(yīng)的計(jì)數(shù)值),啟動虛擬時(shí)鐘滴答補(bǔ)齊程序。步驟2032、虛擬時(shí)鐘滴答補(bǔ)齊程序逐個(gè)補(bǔ)齊(更新前和更新后的)兩個(gè)虛擬時(shí)鐘滴答計(jì)數(shù)值之間的所有虛擬時(shí)鐘滴答,并為每一個(gè)補(bǔ)齊的虛擬時(shí)鐘滴答處理定時(shí)器事件。這種先更新再啟動補(bǔ)齊程序的做法可以有效地減少比較運(yùn)算的次數(shù),從而提高處理效率。根據(jù)本發(fā)明的一個(gè)實(shí)施例,每個(gè)虛擬時(shí)鐘滴答處理定時(shí)器事件的方式如下首先,將虛擬時(shí)鐘滴答計(jì)數(shù)值加I。為了模擬真實(shí)操作系統(tǒng)中的時(shí)鐘滴答行為,虛擬時(shí)鐘滴答也必須保證其自身的增加是連續(xù)的,所以毎次對虛擬時(shí)鐘滴答計(jì)數(shù)值加1,并在完成加I操作之后對每ー個(gè)虛擬時(shí)鐘滴答事件進(jìn)行處理。如圖6所示,第一個(gè)事件發(fā)生的時(shí)間位于第O個(gè)虛擬時(shí)鐘滴答,第二個(gè)事件發(fā)生的時(shí)間位于第4個(gè)虛擬時(shí)鐘滴答。如此,當(dāng)?shù)诙€(gè)事件發(fā)生吋,網(wǎng)絡(luò)模擬器的時(shí)鐘跳躍至第4個(gè)虛擬時(shí)鐘滴答對應(yīng)的時(shí)刻。于此同時(shí),內(nèi)核中的虛擬時(shí)鐘滴答不能直接跳躍,而是分別執(zhí)行第1、2、3、4四個(gè)時(shí)鐘滴答,才能最終完成虛擬時(shí)鐘滴答的更新。其次,如圖7所示,所有接入網(wǎng)絡(luò)模擬器的真實(shí)軟件的時(shí)鐘都受虛擬時(shí)鐘滴答的控制。每次虛擬時(shí)鐘滴答計(jì)數(shù)值加I時(shí),對于接入網(wǎng)絡(luò)模擬器的真實(shí)軟件,判斷在當(dāng)前虛擬時(shí)鐘滴答計(jì)數(shù)值下有無被觸發(fā)的定時(shí)器事件。如果有,則執(zhí)行該定時(shí)器事件。如此,完成每一個(gè)時(shí)鐘滴答的處理。最后,當(dāng)虛擬時(shí)鐘滴 答計(jì)數(shù)值達(dá)到離散事件規(guī)定的時(shí)間時(shí),更新虛擬時(shí)鐘滴答的過程停止。三、進(jìn)程的標(biāo)記和識別根據(jù)本發(fā)明的一個(gè)實(shí)施例,可以在操作系統(tǒng)內(nèi)核中識別并標(biāo)記將要運(yùn)行于網(wǎng)絡(luò)模擬器的進(jìn)程,從而為上述時(shí)鐘同步方案提供必要的參數(shù)和依據(jù)。真實(shí)軟件在操作系統(tǒng)中運(yùn)行實(shí)際上就是ー個(gè)或幾個(gè)進(jìn)程,對于CPU來說,是按進(jìn)程進(jìn)行調(diào)度的,這里說的標(biāo)記進(jìn)程,實(shí)際上就是操作系統(tǒng)對需要運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的真實(shí)軟件進(jìn)行標(biāo)記。參考圖8,本實(shí)施例中標(biāo)記將要運(yùn)行于網(wǎng)絡(luò)模擬器的進(jìn)程的方法如下步驟401、創(chuàng)建兩個(gè)哈希數(shù)組,哈希數(shù)組I用于保存沒有運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的進(jìn)程號碼,而哈希數(shù)組2用于保存運(yùn)行在網(wǎng)絡(luò)模擬環(huán)境的進(jìn)程號碼,如果某ー個(gè)進(jìn)程的號碼出現(xiàn)在兩個(gè)數(shù)組之一,即視作該進(jìn)程已被標(biāo)記;步驟402、通過內(nèi)核運(yùn)行過程中的內(nèi)部變量獲取調(diào)用內(nèi)核的進(jìn)程名稱,用于區(qū)別標(biāo)識該進(jìn)程的運(yùn)行狀態(tài);步驟403、判斷所有運(yùn)行于操作系統(tǒng)的進(jìn)程名稱,如果該進(jìn)程名稱符合給定的運(yùn)行于網(wǎng)絡(luò)模擬環(huán)境狀態(tài)的正則表達(dá)式,表示該進(jìn)程運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境中,否則表示該進(jìn)程未運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境中;步驟404、將步驟403中運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的進(jìn)程所匹配的進(jìn)程號保存到哈希數(shù)組I中,將未運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的進(jìn)程所匹配的進(jìn)程號保存到哈希數(shù)組2中,這樣就記錄了進(jìn)程是否運(yùn)行于模擬的網(wǎng)絡(luò)環(huán)境;步驟405、當(dāng)一個(gè)進(jìn)程退出系統(tǒng)時(shí),通過哈希函數(shù)計(jì)算該進(jìn)程所對應(yīng)進(jìn)程號所在的哈希數(shù)組的位置,并則將其刪除。在上述進(jìn)程標(biāo)記方法的基礎(chǔ)上,當(dāng)需要判斷一個(gè)進(jìn)程是否運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境時(shí),依據(jù)哈希函數(shù)獲得該進(jìn)程號的哈希表位置,如果該進(jìn)程號存在于兩個(gè)哈希數(shù)組的任意ー個(gè),則根據(jù)所在的哈希數(shù)組確定該進(jìn)程是否運(yùn)行于模擬的網(wǎng)絡(luò)環(huán)境。對于進(jìn)程號哈希值未存在于哈希數(shù)組的進(jìn)程,則依據(jù)上述步驟402 步驟404對其進(jìn)行狀態(tài)標(biāo)記。本發(fā)明具有以下積極效果I、本發(fā)明能夠?qū)崿F(xiàn)在離散事件網(wǎng)絡(luò)模擬環(huán)境與真實(shí)軟件之間的同步時(shí)鐘;2、本發(fā)明通過內(nèi)核中的虛擬時(shí)鐘滴答控制真實(shí)軟件的定時(shí)器事件,而虛擬時(shí)鐘滴答又是通過離散事件網(wǎng)絡(luò)模擬器進(jìn)行驅(qū)動,使得真實(shí)軟件可以不加修改的運(yùn)用于離散事件網(wǎng)絡(luò)模擬器中,能夠保證真實(shí)軟件的正常執(zhí)行;3、本發(fā)明解決了網(wǎng)絡(luò)模擬環(huán)境與真實(shí)軟件的時(shí)鐘同步問題,使得離散事件網(wǎng)絡(luò)模擬器中可以運(yùn)行更豐富的軟件和實(shí)驗(yàn),拓展其功能。最后需要說明的是,以上實(shí)施例僅用以描述本發(fā)明的技術(shù)方案而不是對本技術(shù)方法進(jìn)行限制,本發(fā)明在應(yīng)用上可以延伸為其它的修改、變化、應(yīng)用和實(shí)施例,并且因此認(rèn)為所有這樣的修改、變化、應(yīng)用、實(shí)施例都在本發(fā)明的精神和教導(dǎo)范圍內(nèi)。
權(quán)利要求
1.一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,包括下列步驟 1)某一離散事件發(fā)生時(shí),確定離散事件發(fā)生時(shí)間所對應(yīng)的虛擬時(shí)鐘滴答計(jì)數(shù)值,并將其作為目標(biāo)計(jì)數(shù)值發(fā)送給內(nèi)核態(tài)程序;所述虛擬時(shí)鐘滴答計(jì)數(shù)值用于控制所有接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件的定時(shí)器的運(yùn)行; 2)內(nèi)核態(tài)程序以I為步長逐步累加虛擬時(shí)鐘滴答計(jì)數(shù)值直至達(dá)到所述目標(biāo)計(jì)數(shù)值;其中每次虛擬時(shí)鐘滴答計(jì)數(shù)值加I時(shí),對于接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件,判斷所述真實(shí)軟件的定時(shí)器是否超時(shí)。
2.根據(jù)權(quán)利要求I所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,所述步驟I)包括下列子步驟 11)網(wǎng)絡(luò)模擬器時(shí)鐘發(fā)生跳躍后,向用戶態(tài)監(jiān)聽程序發(fā)送更新虛擬時(shí)鐘滴答的請求,該請求中攜帶網(wǎng)絡(luò)模擬器當(dāng)前的時(shí)鐘信息; 12)用戶態(tài)監(jiān)聽程序在收到更新虛擬時(shí)鐘滴答的請求后,解析所要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值; 13)向內(nèi)核態(tài)程序發(fā)送更新虛擬時(shí)鐘滴答請求,該請求中攜帶所解析的要更新的虛擬時(shí)鐘滴答計(jì)數(shù)值。
3.根據(jù)權(quán)利要求2所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,所述步驟11)中,網(wǎng)絡(luò)模擬器到用戶態(tài)程序的命令傳輸采用網(wǎng)絡(luò)套接字、內(nèi)存共享或者proc文件系統(tǒng)的方式實(shí)現(xiàn)。
4.根據(jù)權(quán)利要求2所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,所述步驟13)中,用戶態(tài)程序到內(nèi)核態(tài)程序的命令傳輸Netlink原始套接字、內(nèi)存共享或者proc文件系統(tǒng)的方式實(shí)現(xiàn)。
5.根據(jù)權(quán)利要求I所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,所述步驟2)包括下列子步驟 21)內(nèi)核態(tài)程序收到更新虛擬時(shí)鐘滴答請求后,更新當(dāng)前虛擬時(shí)鐘滴答值為所述目標(biāo)計(jì)數(shù)值,啟動虛擬時(shí)鐘滴答補(bǔ)齊程序; 22)虛擬時(shí)鐘滴答補(bǔ)齊程序逐個(gè)補(bǔ)齊更新前和更新后的兩個(gè)虛擬時(shí)鐘滴答計(jì)數(shù)值之間的所有虛擬時(shí)鐘滴答,并為每一個(gè)補(bǔ)齊的虛擬時(shí)鐘滴答處理定時(shí)器事件。
6.根據(jù)權(quán)利要求I所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,所述虛擬時(shí)鐘滴答的創(chuàng)建過程包括下列步驟 101)在Linux內(nèi)核中創(chuàng)建記錄虛擬時(shí)鐘滴答的整型變量,用以模擬系統(tǒng)內(nèi)核中的真實(shí)時(shí)鐘滴答; 102)設(shè)置虛擬時(shí)鐘滴答變量的標(biāo)識,使得系統(tǒng)能夠識別獨(dú)立于真實(shí)時(shí)鐘滴答的虛擬時(shí)鐘滴答; 103)設(shè)置能夠?qū)μ摂M時(shí)鐘滴答變量進(jìn)行修改的系統(tǒng)調(diào)用模塊。
7.根據(jù)權(quán)利要求I所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,對真實(shí)軟件的調(diào)用內(nèi)核的進(jìn)程進(jìn)行標(biāo)記,從而區(qū)分出哪些真實(shí)軟件是所述接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件。
8.根據(jù)權(quán)利要求7所述的離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,其特征在于,對真實(shí)軟件的調(diào)用內(nèi)核的進(jìn)程進(jìn)行標(biāo)記的過程包括下列步驟401)創(chuàng)建兩個(gè)哈希數(shù)組,第一哈希數(shù)組用于保存沒有運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的進(jìn)程號碼,第二哈希數(shù)組用于保存運(yùn)行在網(wǎng)絡(luò)模擬環(huán)境的進(jìn)程號碼; 402)通過內(nèi)核運(yùn)行過程中的內(nèi)部變量獲取調(diào)用內(nèi)核的進(jìn)程名稱,用于區(qū)別標(biāo)識該進(jìn)程的運(yùn)行狀態(tài); 403)判斷所有運(yùn)行于操作系統(tǒng)的進(jìn)程名稱,如果該進(jìn)程名稱符合給定的運(yùn)行于所述離散事件網(wǎng)絡(luò)模擬器的正則表達(dá)式,表示該進(jìn)程運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境中,否則表示該進(jìn)程未運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境中; 404)將步驟403)中運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的進(jìn)程所匹配的進(jìn)程號保存到第一哈希數(shù)組中,將未運(yùn)行在模擬網(wǎng)絡(luò)環(huán)境的進(jìn)程所匹配的進(jìn)程號保存到第二哈希數(shù)組中;405)當(dāng)一個(gè)進(jìn)程退出系統(tǒng)時(shí),通過哈希函數(shù)計(jì)算該進(jìn)程所對應(yīng)進(jìn)程號所在的哈希數(shù)組的位置,并則將其刪除。
全文摘要
本發(fā)明提供一種離散事件網(wǎng)絡(luò)模擬環(huán)境的時(shí)鐘同步方法,包括1)某一離散事件發(fā)生時(shí),確定離散事件發(fā)生時(shí)間所對應(yīng)的虛擬時(shí)鐘滴答計(jì)數(shù)值,并將其作為目標(biāo)計(jì)數(shù)值發(fā)送給內(nèi)核態(tài)程序;所述虛擬時(shí)鐘滴答計(jì)數(shù)值用于控制所有接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件的定時(shí)器的運(yùn)行;2)內(nèi)核態(tài)程序以1為步長逐步累加虛擬時(shí)鐘滴答計(jì)數(shù)值直至達(dá)到所述目標(biāo)計(jì)數(shù)值;每次虛擬時(shí)鐘滴答計(jì)數(shù)值加1時(shí),對于接入離散事件網(wǎng)絡(luò)模擬器的真實(shí)軟件,判斷所述真實(shí)軟件的定時(shí)器是否超時(shí)。本發(fā)明能夠避免模擬環(huán)境因與真實(shí)環(huán)境時(shí)間不一致而造成失真。本發(fā)明中,真實(shí)軟件不需經(jīng)過修改便可直接應(yīng)用于離散事件網(wǎng)絡(luò)模擬環(huán)境中。
文檔編號G06F1/12GK102662428SQ201210051468
公開日2012年9月12日 申請日期2012年3月1日 優(yōu)先權(quán)日2012年3月1日
發(fā)明者周洲儀, 張冬, 李金明, 林思明, 王元卓, 王景飛, 程學(xué)旗 申請人:中國科學(xué)院計(jì)算技術(shù)研究所