999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OMNeT++的“實代碼”仿真模式研究*

2010-05-18 07:28:22單衛龍周武能
網絡安全與數據管理 2010年20期

單衛龍 ,馬 奎,周武能

(1.東華大學 信息科學與工程學院,上海201620;2.中科院上海微系統與信息技術研究所,上海200050)

1 OMNeT++

無線傳感器網絡由稱為“微塵(mote)”的微型計算機構成。這些微型計算機通常指帶有無線鏈路的微型獨立節能型計算機。無線鏈路使得各個微塵可以通過自我重組形成網絡,彼此通信并交換有關現實世界的信息。目前,對于傳感網的研究越來越受到關注,其中網絡協議算法更是其中的熱點之一。

為評價傳感器網絡協議算法的性能,僅通過實驗是無法實現的,特別是包含大量節點的大規模無線傳感器網絡[1],更是很難通過實驗來實現(實際上,上百個節點的實驗己經比較難以管理與實現)。為了實現無線傳感器網絡的仿真,研究人員設計開發了許多仿真平臺(或在現有平臺建立無線傳感器網絡模型),包括 NS-2、OPNET、SensorSim、EmStar、OMNet++、GloMoSim、TOSSIM、PowerTOSSIM等。

OMNeT++[2-3](Objective Modular Network TestBed in C++)是開源的基于組件的模塊化的開放網絡仿真平臺,是近年來在科學和工業領域里逐漸流行的一種優秀的網絡仿真平臺。OMNeT++作為離散事件仿真器,具備強大完善的圖形界面接口和可嵌入式仿真內核,同NS2[4]、OPNET[5]和JavaSim等仿真平臺相比,OMNeT++可運行于多個操作系統平臺,可以簡便定義網絡拓撲結構,具備編程、調試和跟蹤支持等功能。OMNeT++主要用于通信網絡和分布式系統的仿真。

OMNeT++具有模塊化的結構,圖1是 OMNeT++仿真的高層體系結構。

2 實代碼仿真

2.1 總體思路

對于傳統的有線網絡,利用有限的具有代表性的節點拓撲就可以相當大程度地模擬整個網絡的性能,但是對于無線傳感器網絡,由于其大冗余度和高密度節點拓撲構造類型而無法用有限的節點數目來分析其整體性能。因此在仿真規模上必須考慮大量節點的并行運算,WSN節點有可能成千上萬甚至更多。

圖1 OMNeT++仿真程序的體系結構

仿真可以在算法和實現之間起到橋梁作用,從仿真到實現不要進行二次編碼,而是平滑過渡。經過仿真測試和驗證了的代碼能夠直接在硬件上運行,但經常出現算法仿真通過而實際卻不能實現的情況。

本論文研究實代碼仿真的主要原理就是將硬件中斷換成離散仿真事件,由仿真器事件拋出的中斷來驅動上層應用,也即節點實代碼。

總體思路框架圖如圖2所示,不同節點類型、不同數目的同一類型節點都可以在支持分布式仿真的仿真模擬器OMNET++上運行,仿真的具體思路就是將每一個節點 (對應一個對象)抽象成一個線程 (線程始終運行),其次將需要仿真的實代碼以動態鏈接庫的形式調入線程中,由OMNeT++底層的離散仿真事件驅動編譯成DLL的代碼。

本次試驗的DLL動態鏈接庫為ucos系統上的系統軟件協議棧 。其中附加運行的任務為測試程序,實際應用過程中存放的是在硬件上運行的OS的節點代碼。

2.2 動態鏈接庫

動態鏈接庫簡稱DLL,它是基于Windows程序設計的一個非常重要的組成部分,可以被其他應用程序所共享的程序模塊,其中封裝了一些可以被共享的里程和資源[6]。與使用普通的函數庫相比,它并不是將庫中的代碼拷貝到可執行文件中,而是在建立應用程序的可執行文件時動態裝載到動態鏈接庫DLL[7-8],裝載時DLL被映射到進程的地址空間中,在程序中記錄函數的入口點和接口,不管多少程序使用DLL,內存中都只有一個DLL副本,當沒有程序使用時,系統將其移出內存,減少了對內存和磁盤的要求。

本文簡單地編譯了一個DLL,將運行在UCOS上的Aloha協議封裝成DLL,協議功能就在于實現簡單的偵聽功能。為了進行驗證,在stack中附加輸出test()函數,函數功能就是將全局變量m自增1,返回m值。

然后通過.def文件將OS啟動入口函數test()導出如下:

這樣在vc6.0++環境目錄中,可以得到dlltest.dll文件,將其拷貝到omnetpp-4.0samples est下即可以在OMNeT++中的源文件中調用,具體調用方式為GetProcAddress()顯式調用。

2.3 節點切換:PE文件解析

將代碼以動態鏈接庫的方式加載入內存后,每個節點將會加載該DLL,這樣將會出現DLL中的全局變量等信息無限次地被每個節點所更改。其結果將是第二個節點的全局變量信息也許會成為第一個節點的全局變量信息。

但是,所希望得到的結果是第一個節點的全局變量信息始終是第一個節點的,第二個節點的全局信息也始終是第二個節點的。這樣,自然而然想到的就是如何保護全局變量的問題。本工程所采用的一個小技巧就是每個節點產生一個數組,來保存節點信息。在這里要重點區別于多進程共享全局變量問題,本文涉及到的內容主要為線程間共享數據。

DLL為PE文件結構如圖3所示。

圖3 PE文件結構圖

PE[9]文件格式是 Win32平臺上 (包括 Windows9x/NT/2000/XP/2003/Vista/CE)主流的可執行文件格式,是Portable Executable File Format(可移植的執行體)簡寫。它衍生于早期建立在VAX/VMS上的COFF(Common Object File Format)文件格式。對PE格式和COFF文件的主要描述存放在winnt.h文件中,它是PE文件定義的最終決定者。

文件偏移地址是指當PE文件存貯在磁盤上時,某個數據的位置相對于頭文件的偏移量,稱為文件偏移地址(File Offset)或物理地址(RAW Offset)。文件偏移地址從PE文件的第一個字節開始計數,起始值為0。

相對虛擬地址(RVA)只是內存中的一個簡單的相對于PE文件裝入地址的偏移位置,它是一個 “相對”地址,或稱“偏移量”。圖2顯示了PE文件在裝入前后的相對位置變化。虛擬地址(VA)=基地址(ImageBase)+相對虛擬地址(RVA)。

本文所編動態鏈接庫(DLL)函數中的全局變量是儲存在.data段中的。這樣就牽扯到每個節點運行后,要將其.data段的信息保存在數組中,在下次這個節點運行時再將其拷貝回.data段中,保證加載在內存中的DLL不被其他的節點所更改。

其中重要部分是找到動態鏈接庫在內存中的位置地址,然后根據PE文件結構來解析data段的位置,以及其data段的大小。

偽代碼如下:

在每個節點的node::initialize()中,為每個節點建立一個線程,而此線程就是將文中提到的“實代碼”以顯式鏈接的方式加載到其中。需要注意的是,這個線程是一直運行的,線程間以信號量的形式進行通信。也即在主線程中設置信號量為:

當然,在各個線程中:

通過這種方式來進行線程間的交互,達到主線程(Omnet++)模擬的硬件中斷驅動上層的目的。其中多個線程中的主線程用來仿真所有節點應用的運行,而分線程主要用來向外部動態鏈接庫程序提供服務和接受外部程序發送過來的命令。

實際消息處理過程中數組中,將保存的信息段數據復制到PE文件中的全局數據段地址就是在SetEvent(eventM)消息處理之前進行的,而WaitForSingleObject(eventT,INFINITE)之后再將運行完成后的數據段拷貝回數組中。

2.4 OMNeT++配置

(1)Ned文件的編寫

NED語言用來刻畫定義模型的拓撲結構,方便對一個網絡的模型化描述,這意味著一個網絡的描述可以包括一組元件的描述(通道,簡單/復雜模型),這些組件的描述可以在其他網絡描述中得以重用。包含網絡描述的文件帶有.Ned的后綴,.Ned文件動態地載入到模擬程序,或者用Ned編譯器或C++代碼鏈接到模擬器執行。NED文件可以使用任何文本編輯器或GNED圖形編輯器來編寫。

本次試驗中設定了兩種不同類型的節點:普通節點和匯聚節點。每種類型的節點為一個簡單模塊。而普通節點的數目作為一個可變參數由輸入者自己確定。

模塊聲明只定義了模塊類型,要確實地獲得一個仿真器能運行的模塊,需要書寫網絡定義。網絡定義將前面定義的模塊類型聲明為一個仿真模塊實例,盡管可以將一個模塊作為自包含的簡單模塊并實例為一個網絡,但應用中更希望使用復合模塊類型。在NED文件中可以有幾個網絡定義仿真程序,使用NED文件可運行其中任何一個,可以在配置文件時選擇最想使用的那個,本次試驗的網絡定義語法如下:

其中用圖形化編輯如圖4所示。

(2)node.cc文件編寫

正如前文所述,每個節點抽象為一個線程,node::initialize()中,為每個節點建立一個線程,該線程是一直運行的。同時,對于PE文件結構的解析也在此函數中完成。node::handlemessage()中,模擬中斷的產生,通過自發信息延遲一定時間來實現模擬定時中斷,然后置信號量來實現。

s_node.cc文件的編寫類似node.cc文件。

(3)信道配置

離散事件系統是指一個系統的狀態改變是離散的,在兩個連續事件之間沒有任何事件發生。簡單地說,事件規定了系統狀態的改變,狀態的修改僅在事件發生時進行。離散事件系統可以使用離散事件模擬仿真。例如,計算機網絡通常被看作是離散事件系統。部分事件包括包傳輸的開始、包傳輸的結束、重傳等待時間到達。

3 結果討論

按照上述基本步驟的編寫結果布局如下,普通節點數目設置為20。

分析以上結果可以看到:圖5所示為初始布局,配置文件中設置的普通節點數目為20,匯聚節點數目為1。圖6清晰地顯示了動態鏈接庫在進程中的內存加載位置,并且由其PE文件結構可以得知其各個段的分布情況:起始位置、長度等。data數據段的地址以及長度就可以順利得到。當不采用數組時每個節點是順序增加的,如圖7所示。這說明每個節點的全局變量信息都是上一個節點的全局變量信息,全局變量依次遞增。相反,采用數組進行保存后,其中的各個節點全局信息將自己進行保存,如圖8所示。即達到本文試驗研究的初步預期結果:將實代碼以DLL形式加載到進程后,多節點抽象出的多線程將會共享DLL,表示節點狀態的全局變量將會被不同節點修改,此工程設計的PE文件數據段的拷貝很好地解決了這個問題。

基于OMNeT++的“實代碼”仿真具有很強的可伸縮性。對于無線傳感器網絡,由于其大冗余度、高密度節點拓撲構造類型,所以無法用少量的節點數目來分析其整體性能。因此在仿真規模上必須考慮大量節點的并行運算,WSN節點有可能成千上萬甚至更多;同時仿真應能夠在算法和實現之間起到橋梁作用,從仿真到實現不要進行二次編碼,而是平滑過渡。仿真時測試和驗證了的代碼能夠直接在硬件上運行,因為經常出現算法仿真通過而實際卻不能實現的情況。

本項目的主要貢獻就在于提出了一種全新的驗證協議代碼的方案。它實現了在OMNeT++這款離散仿真軟件的基礎上,對運行在UCOS上的協議棧代碼直接仿真調試,將其封裝成為動態鏈接庫的形式在OMNeT++上調試運行,協議棧等代碼無需二次修改,運行后的代碼可以直接在節點上運行。具體思路已經如上驗證通過,并且已經將Aloha簡單的協議運行在芯片上,更深入的研究正在進行中。

[1]AKYILDIZ I F,SU W,SANKARASUBRAMANIAM Y,et al.Wireless sensor networks:a survey[J].Computer Networks,2002,38:393-422.

[2]OMNeT++Home Page.http://www.omnetpp.org,2007(9).

[3]VARGA A.2001.The OMNeT++discrete event simulation system.In the proceedings of the european simulation Multiconference(ESM 6-9,2001(6).Prague,Czech Republic).

[4]BAJAJ S,BRESLAU L,ESTRIN D.Improving simulation for network research.IEEE Computer.to appear,a preliminary draft is currently available as USC technical report 2000:99-702.

[5]OPNET Technologies,Inc.OPNET Modeler.http://www.opnet.com,2007(9).

[6]KRUGLINSKI D L.Visual C++技術內幕[M].潘愛民,王國印,譯.北京:清華大學出版社,2000.

[7]費佩燕.VC++中動態鏈接庫的實現[J].現代電子技術,2003,28(8):7-18.

[8]李海霞.VC中的動態鏈接庫應用 [M].軟件應用,2004.

[9]MATT PIETREK.Windows95系統程式設計大奧秘[M].臺灣:旗標出版有限公司,1997.

主站蜘蛛池模板: 日本一区二区三区精品AⅤ| 91无码视频在线观看| 中国国产A一级毛片| 深爱婷婷激情网| 国产美女无遮挡免费视频网站| 久久久精品国产亚洲AV日韩| 欧美中文一区| 久久99精品久久久久纯品| 欧美亚洲国产精品久久蜜芽| 国内精品免费| 国产99热| 日韩欧美国产另类| 国产精品一区在线麻豆| 欧美一级高清免费a| 成人免费网站久久久| 99re热精品视频中文字幕不卡| 九色国产在线| 亚洲国产精品一区二区第一页免 | 91综合色区亚洲熟妇p| 在线观看欧美精品二区| 尤物亚洲最大AV无码网站| 久久6免费视频| 亚洲一区网站| 五月丁香伊人啪啪手机免费观看| 成人va亚洲va欧美天堂| 成人噜噜噜视频在线观看| 欧美黄网在线| 亚洲天堂在线免费| 97国产一区二区精品久久呦| 99久久精品免费看国产电影| 国产一在线| 狠狠综合久久久久综| 2020最新国产精品视频| 久久国产黑丝袜视频| 国产精品lululu在线观看| 天天躁夜夜躁狠狠躁躁88| 99人妻碰碰碰久久久久禁片| AV不卡在线永久免费观看| 亚洲成人网在线观看| 免费毛片a| 99这里只有精品在线| 51国产偷自视频区视频手机观看| 亚洲最新网址| 日韩亚洲综合在线| 国产成人永久免费视频| 99九九成人免费视频精品| 国产福利一区在线| 日韩天堂视频| 91伊人国产| 亚洲天堂久久新| 成人免费午夜视频| 亚洲侵犯无码网址在线观看| 亚洲av片在线免费观看| 麻豆精品在线| 3p叠罗汉国产精品久久| 久久综合伊人 六十路| 综合色亚洲| 91av成人日本不卡三区| 亚洲第一成网站| 欧美成人精品高清在线下载| 成人午夜视频免费看欧美| 日日拍夜夜嗷嗷叫国产| 欧美精品在线视频观看| 国产91蝌蚪窝| 国产成人h在线观看网站站| 制服丝袜一区| 久草热视频在线| 美女扒开下面流白浆在线试听 | 有专无码视频| 国产99精品久久| 视频在线观看一区二区| 亚洲国产午夜精华无码福利| 99re这里只有国产中文精品国产精品 | 全免费a级毛片免费看不卡| 99国产精品国产高清一区二区| 欧美区一区二区三| 国产小视频网站| 四虎永久在线精品影院| 免费一极毛片| 国产成人免费高清AⅤ| 四虎永久在线精品影院| aaa国产一级毛片|