日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

一種基于OMNeT++的“實(shí)代碼”仿真模式研究*

出處:單衛(wèi)龍1, 馬 奎2, 周武能1 發(fā)布于:2011-08-26 15:26:23

  隨著人們對于環(huán)境問題的關(guān)注程度越來越高,需要采集的環(huán)境數(shù)據(jù)也越來越多,無線傳感器網(wǎng)絡(luò)的出現(xiàn)為隨機(jī)性的研究數(shù)據(jù)獲取提供了便利,并且還可以避免傳統(tǒng)數(shù)據(jù)收集方式給環(huán)境帶來的侵入式破壞。比如,英特爾研究實(shí)驗(yàn)室研究人員曾經(jīng)將32個小型傳感器連進(jìn)互聯(lián)網(wǎng),以讀出緬因州"大鴨島"上的氣候,用來評價一種海燕巢的條件。無線傳感器網(wǎng)絡(luò)還可以跟蹤候鳥和昆蟲的遷移,研究環(huán)境變化對農(nóng)作物的影響,監(jiān)測海洋、大氣和土壤的成分等。此外,它也可以應(yīng)用在精細(xì)農(nóng)業(yè)中,來監(jiān)測農(nóng)作物中的害蟲、土壤的酸堿度和施肥狀況等。

  1 OMNeT++

  無線傳感器網(wǎng)絡(luò)還被應(yīng)用于其他一些領(lǐng)域。比如一些危險的工業(yè)環(huán)境如井礦、核電廠等,工作人員可以通過它來實(shí)施安全監(jiān)測。也可以用在交通領(lǐng)域作為車輛監(jiān)控的有力工具。此外和還可以在工業(yè)自動化生產(chǎn)線等諸多領(lǐng)域,英特爾正在對工廠中的一個無線網(wǎng)絡(luò)進(jìn)行測試,該網(wǎng)絡(luò)由40臺機(jī)器上的210個傳感器組成,這樣組成的監(jiān)控系統(tǒng)將可以大大改善工廠的運(yùn)作條件。它可以大幅降低檢查設(shè)備的成本,同時由于可以提前發(fā)現(xiàn)問題,因此將能夠縮短停機(jī)時間,提高效率,并延長設(shè)備的使用時間。盡管無線傳感器技術(shù)目前仍處于初步應(yīng)用階段,但已經(jīng)展示出了非凡的應(yīng)用價值,相信隨著相關(guān)技術(shù)的發(fā)展和推進(jìn),一定會得到更大的應(yīng)用。

  無線傳感器網(wǎng)絡(luò)由稱為"微塵(mote)"的微型計算機(jī)構(gòu)成。這些微型計算機(jī)通常指帶有無線鏈路的微型獨(dú)立節(jié)能型計算機(jī)。無線鏈路使得各個微塵可以通過自我重組形成網(wǎng)絡(luò),彼此通信并交換有關(guān)現(xiàn)實(shí)世界的信息。目前,對于傳感網(wǎng)的研究越來越受到關(guān)注,其中網(wǎng)絡(luò)協(xié)議算法更是其中的熱點(diǎn)之一。

  為評價傳感器網(wǎng)絡(luò)協(xié)議算法的性能,僅通過實(shí)驗(yàn)是無法實(shí)現(xiàn)的,特別是包含大量節(jié)點(diǎn)的大規(guī)模無線傳感器網(wǎng)絡(luò),更是很難通過實(shí)驗(yàn)來實(shí)現(xiàn)。為了實(shí)現(xiàn)無線傳感器網(wǎng)絡(luò)的仿真,研究人員設(shè)計開發(fā)了許多仿真平臺(或在現(xiàn)有平臺建立無線傳感器網(wǎng)絡(luò)模型),包括NS-2、OPNET、SensorSim、EmStar、OMNet++、GloMoSim、TOSSIM、PowerTOSSIM等。

  OMNeT++[2-3](Objective Modular Network TestBed in C++)是開源的基于組件的模塊化的開放網(wǎng)絡(luò)仿真平臺,是近年來在科學(xué)和工業(yè)領(lǐng)域里逐漸流行的一種的網(wǎng)絡(luò)仿真平臺。OMNeT++作為離散事件仿真器,具備強(qiáng)大完善的圖形界面接口和可嵌入式仿真內(nèi)核,同NS2[4]、OPNET[5]和JavaSim等仿真平臺相比,OMNeT++可運(yùn)行于多個操作系統(tǒng)平臺,可以簡便定義網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),具備編程、調(diào)試和跟蹤支持等功能。

  OMNeT++具有模塊化的結(jié)構(gòu),圖1是OMNeT++仿真的高層體系結(jié)構(gòu)。

  2 實(shí)代碼仿真

  2.1 總體思路

  對于傳統(tǒng)的有線網(wǎng)絡(luò), 利用有限的具有代表性的節(jié)點(diǎn)拓?fù)渚涂梢韵喈?dāng)大程度地模擬整個網(wǎng)絡(luò)的性能, 但是對于無線傳感器網(wǎng)絡(luò), 由于其大冗余度和高密度節(jié)點(diǎn)拓?fù)錁?gòu)造類型而無法用有限的節(jié)點(diǎn)數(shù)目來分析其整體性能。

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

  本論文研究實(shí)代碼仿真的主要原理就是將硬件中斷換成離散仿真事件,由仿真器事件拋出的中斷來驅(qū)動上層應(yīng)用,也即節(jié)點(diǎn)實(shí)代碼。

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

  本次試驗(yàn)的DLL動態(tài)鏈接庫為ucos系統(tǒng)上的系統(tǒng)軟件協(xié)議棧 .其中附加運(yùn)行的任務(wù)為測試程序,實(shí)際應(yīng)用過程中存放的是在硬件上運(yùn)行的OS的節(jié)點(diǎn)代碼。

  2.2 動態(tài)鏈接庫

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

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

  int m=0;

  int  test()

  {

  m++;

  return m;

  }

  然后通過。def文件將OS啟動入口函數(shù)test()導(dǎo)出如下:

  LIBRARY dlltest

  EXPORTS

  test

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

  2.3  節(jié)點(diǎn)切換:PE文件解析

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

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

  DLL為PE文件結(jié)構(gòu)如圖3所示

  PE文件被稱為可移植的執(zhí)行體是Portable Execute的全稱,常見的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微軟Windows操作系統(tǒng)上的程序文件(可能是間接被執(zhí)行,如DLL)。

  PE 文件格式在 winnt.h 頭文件中文檔化了(用不的語言)!大約在 winnt.h 的中間部分標(biāo)題為"Image Format"的一個快。在把 MS-DOS 的 MZ 文件頭和 NE 文件頭移入新的PE文件頭之前,這個塊就開始于一個小欄。WINNT.H提供PE文件用到的生鮮數(shù)據(jù)結(jié)構(gòu)的定義,但只有很少有助于理解這些數(shù)據(jù)結(jié)構(gòu)和標(biāo)志變量的注釋。不管誰為PE文件格式寫出這樣的頭文件都肯定是一個信徒無疑(突然持續(xù)地冒出Michael J. O'Leary的名字來)。它衍生于早期建立在VAX/VMS上的COFF(Common Object File Format)文件格式。對PE格式和COFF文件的主要描述存放在winnt.h文件中,它是PE文件定義的終決定者。

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

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

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

  其中重要部分是找到動態(tài)鏈接庫在內(nèi)存中的位置地址,然后根據(jù)PE文件結(jié)構(gòu)來解析data段的位置,以及其data段的大小。

  偽代碼如下:

  const char *szSecName=".data";

  hInst=LoadLibrary();

  ……

  IMAGE_DOS_HEADER *pDosHead;

  IMAGE_FILE_HEADER *pPEHead;

  IMAGE_SECTION_HEADER *pSection;

  ……

  strncmp(szSecName, (const char*)pSection[i].Name, IMAGE_SIZEOF_SHORT_NAME);

  ……

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

  ……

  SetEvent(eventM);

  ……

  WaitForSingleObject(eventT, INFINITE);

  ……

  當(dāng)然,在各個線程中:

  ……

  WaitForSingleObject(eventM, INFINITE);

  ……

  SetEvent(eventT);

  ……

  通過這種方式來進(jìn)行線程間的交互,達(dá)到主線程(Omnet++)模擬的硬件中斷驅(qū)動上層的目的。其中多個線程中的主線程用來仿真所有節(jié)點(diǎn)應(yīng)用的運(yùn)行,而分線程主要用來向外部動態(tài)鏈接庫程序提供服務(wù)和接受外部程序發(fā)送過來的命令。

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

  2.4 OMNeT++配置

  (1) Ned文件的編寫

  NED語言用來刻畫定義模型的拓?fù)浣Y(jié)構(gòu),方便對一個網(wǎng)絡(luò)的模型化描述,這意味著一個網(wǎng)絡(luò)的描述可以包括一組元件的描述(通道,簡單/復(fù)雜模型),這些組件的描述可以在其他網(wǎng)絡(luò)描述中得以重用。包含網(wǎng)絡(luò)描述的文件帶有。Ned的后綴,.Ned文件動態(tài)地載入到模擬程序,或者用Ned編譯器或C++代碼鏈接到模擬器執(zhí)行。

  本次試驗(yàn)中設(shè)定了兩種不同類型的節(jié)點(diǎn):普通節(jié)點(diǎn)和匯聚節(jié)點(diǎn)。每種類型的節(jié)點(diǎn)為一個簡單模塊。而普通節(jié)點(diǎn)的數(shù)目作為一個可變參數(shù)由輸入者自己確定。

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

  network net

  {

  parameters:

  @display("bgi=background/terrain");

  int numNodes;

  submodules:

  node[numNodes]: node {

  parameters:

  @display("i=,cyan");

  }

  s_node: s_node {

  parameters:

  @display("i=,gold");

  }

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

 ?。?) node.cc文件編寫

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

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

  (3) 信道配置

  離散事件系統(tǒng)是指一個系統(tǒng)的狀態(tài)改變是離散的,在兩個連續(xù)事件之間沒有任何事件發(fā)生。簡單地說,事件規(guī)定了系統(tǒng)狀態(tài)的改變,狀態(tài)的修改僅在事件發(fā)生時進(jìn)行。離散事件系統(tǒng)可以使用離散事件模擬仿真。部分事件包括包傳輸?shù)拈_始、包傳輸?shù)慕Y(jié)束、重傳等待時間到達(dá)。

  3 結(jié)果討論

  按照上述基本步驟的編寫結(jié)果布局如下,普通節(jié)點(diǎn)數(shù)目設(shè)置為20.

  分析以上結(jié)果可以看到:圖5所示為初始布局,配置文件中設(shè)置的普通節(jié)點(diǎn)數(shù)目為20,匯聚節(jié)點(diǎn)數(shù)目為1.圖6清晰地顯示了動態(tài)鏈接庫在進(jìn)程中的內(nèi)存加載位置,并且由其PE文件結(jié)構(gòu)可以得知其各個段的分布情況:起始位置、長度等。data數(shù)據(jù)段的地址以及長度就可以順利得到。當(dāng)不采用數(shù)組時每個節(jié)點(diǎn)是順序增加的,如圖7所示。即達(dá)到本文試驗(yàn)研究的初步預(yù)期結(jié)果:將實(shí)代碼以DLL形式加載到進(jìn)程后,多節(jié)點(diǎn)抽象出的多線程將會共享DLL,表示節(jié)點(diǎn)狀態(tài)的全局變量將會被不同節(jié)點(diǎn)修改,此工程設(shè)計的PE文件數(shù)據(jù)段的拷貝很好地解決了這個問題。

  基于OMNeT++的"實(shí)代碼"仿真具有很強(qiáng)的可伸縮性。對于無線傳感器網(wǎng)絡(luò), 由于其大冗余度、 高密度節(jié)點(diǎn)拓?fù)錁?gòu)造類型, 所以無法用少量的節(jié)點(diǎn)數(shù)目來分析其整體性能。因此在仿真規(guī)模上必須考慮大量節(jié)點(diǎn)的并行運(yùn)算,WSN 節(jié)點(diǎn)有可能成千上萬甚至更多;同時仿真應(yīng)能夠在算法和實(shí)現(xiàn)之間起到橋梁作用, 從仿真到實(shí)現(xiàn)不要進(jìn)行二次編碼, 而是平滑過渡。仿真時測試和驗(yàn)證了的代碼能夠直接在硬件上運(yùn)行, 因?yàn)榻?jīng)常出現(xiàn)算法仿真通過而實(shí)際卻不能實(shí)現(xiàn)的情況。

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


  

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!