[ZZ]OPNET要點筆記

 

這篇文章將提供了很多opnet的要點,miss掉的部分可以補一下
原文鏈接已不可查。
OPNET結構 (OPNET Architecture)
(注:此部分可參考OPNET Documentation: Main Menu->Modeling Concepts->Modeling Overview->OPNET Architecture)
OPNET爲通信網絡和分佈式系統的性能評估提供了一個全面的開發環境。由許多工具組成,這些工具暗中建模和仿真的步驟分爲三個門類:定製(Specification),數據收集和仿真(Data Collection and Simulation),分析(Analysis)。
 
1.模型定製(Model Specification)
 
1.1定製編輯器(Specification Editors)
    a)Project Editor:定義網絡模型(network models),network models由子網(subnets)和節點模型(node models)。Project editor具有基本的仿真和分析能力(還包括統計)。
    b)Node Editor:定義節點模型(node models),node models是network models中的一部分。Node models由一系列模塊(modules)組成,這些模塊內部含有進程模型(Process models)。模塊還有可能包含參數模型(?! parameter models)。
    c)Process Editor:定義進程模型。進程模型控制module的行爲,也有可能會涉及parameter models(?!)。
    d)Link Model Editor:創建,編輯,查看鏈路模型(link models)。
    e)Packet Format Editor:定義包格式模型(packet formats models)。packet format指明packet所存儲的信息的結構和順序。
    f)ICI Editor:創建,編輯,查看接口控制信息(interface control information ICI)格式。ICI用來進程間交流控制信息。
    g)Antenna Pattern Editor:創建,編輯,查看發送器和接收器的天線類型。(for radio)
    h)Modulation Cure Editor:創建,編輯,查看發送器的模型曲線。(for radio)
    i)PDF Editor:創建,編輯,查看概率密度函數。PDFs用來控制一些事情,比如源模塊的發送頻率。
 
1.2模型域
    OPNET分爲三個模型域:網絡域(network domain)、節點域(node domain)和進程域(process domain),也是整個模型的主要層次。
1.2.1網絡域(network domain)
    network domain定義了通信網的拓撲結構。通信的實體是nodes。
    OPNET提供單向和全雙工的點到點鏈路,也提供總線鏈路用以允許對任意大小的節點組盡心廣播通信。
1.2.2節點域(node domain)
    node domain用來對通信設備進行建模,諸如路由器、網橋、工作站、終端等等。Node model是通過Node Editor生成,通過一些更小的模塊(module)來表現。一些模塊具有一定的功能,這些功能已經定義好了,只用通過配置一組內部參數(built-in parameters)就可以了。它們包括各種各樣用來在network domain連接通信連路的發送器和接收器。還有一些模塊:處理器(processors)和隊列(queues),也是高度可編程的,它們的動作通過進程(Process model)來描述。
    node model中的各個module通過三種鏈接互連,分別是:packet streams,statistic wires,logical associations。Packet streams傳送格式化的消息,我們稱爲packet。Statistic wire傳送簡單的數字信號和控制信息,一般用於一個module用來監測其他module的性能和狀態。Statistic wire和Packet stream都有參數用來配置它們的行爲。Logical associations用來確認module之間的綁定。目前,它們只被用在發送器和接收器之間,用來表明它們在接入到Network domain上的鏈路時,應當被當作一對module來使用。
1.2.3進程域(process domain)
    一個進程(process)可以被認爲近似於一個執行程序。OPNET中的Process是基於Process model,他們是在Process Editor中定義的。
    進程組(process group)由許多process組成,這些process都是在同一個processor或者queue中執行。當仿真開始的時候,每個module只能有一個process,稱之爲root process。這個process之後能夠創建新的process,他們之後也能再創建其他的process。在仿真中被創建的process稱之爲動態進程(dynamic process)。
    任何時刻只能有一個process處於執行狀態。當一個Process開始執行後,我們說這個process被調用(invoked)了。
    當一個process調用另一個process時,調用(invoking)process被暫時掛起直到被調用(invoked)process被阻止(block)。一個process如果完成了它當前調用的處理就將被阻止。當invoked process被阻止時,invoking process就將從它掛起的地方繼續執行。
    OPNET中的Process能夠對中斷(interrupt)或者調用(invocation)產生響應。Interrupt可能產生自process group之外的源,或者process group中的其他成員,或者這個process自己。Interrupt一般對應於一些事件,包括消息到達、計時器到時、資源釋放或者其他模塊的狀態改變等等。
    OPNET的process editor使用Proto-C的語言來描述process model。Proto-C基於狀態轉移圖(State Transition Diagrams STD)、一個高級指令庫(kernel Procedures)和C或C++的通用部件。STD定義了模型的各個process所處的狀態,以及使進程在狀態之間轉移的條件。這種條件稱之爲transition。Kernel Procedures主要一系列的函數包組成,這些包詳見參考文檔。
    STD在Process Editor中生成。STD除了一些傳統的STD具有的能力外,還有一系列擴展:
    a)狀態變量(State Variables)。process可以擁有一些私有state variables,這些state variables可以是任意的數據類型,包括OPNET專有的、通用的C/C++、用戶定義類型等等。這種能力使得process能夠靈活的控制counter、routing tables、與性能相關的statistics、需要轉發的message。任意組合的statevariable可以在一個process所有的動作和決定中使用。
    b)狀態執行(State Executives)。通過C/C++語言描述了process進入和離開狀態時的操作,典型的操作包括:修改狀態信息,創建或接收消息,更新發送消息的內容,更新統計數據,設置計時器以及對計時器作出響應。
    c)轉移條件(Transition Conditions)。通過C/C++語言描述布爾變量,要涉及interrupt的屬性以及state variables的組合。
    d)轉移執行(Transition Executives)。轉移時可能會定義一些通用的操作。
 
1.3模型,對象,屬性(Models,Object,Attributes)
1.3.1對象(Object)
    Object是Model的一部分,其可以在model中扮演下面的功能:
    a)定義行爲
    b)創建信息
    c)儲存和管理信息
    d)處理、修改、轉發信息
    e)對事件作出響應
    f)包含其他的object
1.3.2屬性(Attribute)
    object的Attribute和一些允許訪問Attribute或者使Attribute生效的程序組成了object的接口。這些程序可以是OPNET自動生成的,也可以是用戶編寫的。包含有子object的object稱之爲複合對象(compound object)。
1.3.3模型(Model)
1.3.4模型屬性(Model Attribute)和屬性提升(Attribute Promotion)
    Attribute除了可以描述object外,還可以用在model上用來表示model的參數。model的attributes機制可以提高model的可重用性。具體地說,model的attribute被定義爲model的一部分,但同時,他們也出現在object裏,他們是在object的model被規定後被object獲得的。這是object的本能操作。
    類似這種model attribute機制,object attribute也可以被向上傳給model,這種機制就是所謂的attribute promotion。Promotion導致object attribute不再有值,而是作爲model的attribute出現在上層屬性中。對於一路promote到所有model之上的attribute,我們可以把它看作是simulation的attribute。從而把研究的系統看成是這些attributes的函數。
1.3.5衍生模型(Derived Models)
    有的時候,我們想只改變一個model的一些attributes就可以得到一個新的model。這種機制稱爲模型的衍生(model derivation)。衍生出的model稱爲derived model,被衍生的model稱爲parent model,沒有parent model的model稱爲base model。
 
2.包通信建模(Modeling Communications with Packets)
    OPNET中的一種基本通信結構是packet。packet主要由三個存儲域組成。第一個域是packet field,是一組用戶定義的值。第二個域pre-defined field由一組預定義的值組成,用來跟蹤和統計。第三個域是transmission data field,用來支持可定製的通信鏈路模型。
    Packet分爲兩類:格式化的(formatted)和非格式化的(unformatted)。formatted packet的各個域都是按照所謂的packet format的模版定義的。Packet format是在Packet Format Editor中創建的,在那裏定製了一組域名、數據類型、大小(按bit)和缺省值。unformatted packet在剛創建時沒有任何域,這些域都是後來一次一個加上去的,而且只能通過數字編號指示,而不是通過名字。
    Packet可以在OPNET模型中通過幾種通信機制傳輸。在node level,是通過packet stream;在network level是通過links;還有第三種傳送機制,稱爲packet delivery,支持各個module之間的packet發送,不管這些module在網絡中的位置以及他們之間有沒有物理連接。
 
3.數據採集和仿真(Data Collection and Simulation)
    建模的主要目的是爲了獲取對系統性能的測量或者對系統的一些行爲作觀察。OPNET通過在這個系統裏創建一個可執行的model支持這個功能。有幾種機制用來在一個或者更多的系統中收集所需的數據。
 
3.1仿真輸出的數據類型(Simulation Output Data Types)
    OPNET提供了許多輸出類型,主要有output vectors、output scalars、animation。當然,用戶也可以自己定義所要的輸出類型,但是一般情況下都直接使用OPNET提供的數據類型。
3.1.1輸出向量(output vectors)
    output vector是輸出數據中最常見的輸出結果,它實際上是一組數據對(pairs of real value)的集合,被稱之爲條目(entry)。一個vector可以包含了任意數量的條目,這些條目採自單個仿真。條目的第一個值可以看作是獨立變量(independent variable),第二個值則是依賴變量(dependent variable)。在OPNET中,這也被稱做橫座標(abscissa)和縱座標(ordinate)。在絕大多數情況下,independent variable都是仿真時間(simulation time),它隨着仿真的進行單調的增加。換句話說,大多數情況下,vector代表了我們所關心的量值隨時間的變化。當然也有隨着別的東西變化的:)
3.1.2輸出標量(output scalar)
    相比起vecotr,scalar則是一個值。一般來說,標量都是採集的測量數據的函數,比如:平均值,概率,或者峯值之類的。scalar更爲有用的地方在於多次仿真後作出隨系統參數變化的曲線。OPNET仿真在output scalar文件中記錄scalar statistics。與output vector不同的是,output scalar包含的不僅是一個仿真的結果,而是多個仿真的結果。原因之前已經提到過了。
3.1.3特定應用的統計(Application-Specific Statistics)
    scalar和vector都可以被自動地計算和記錄一些預定義的統計。這些預定義的統計一般都和模型中一些特定的對象的測量值有關,比如:queue sizes、link throughputs、error rates和queuing delays。而且,在仿真中記錄對一些特定應用統計的計算也很常見, 這些統計也被放在了scalar和vector輸出文件中。
    定製統計可以在process model中聲明,在這種情況下,OPNET把他們加入到使用這個process的module的內建統計中去。定製統計按範圍劃分爲本地的(local)和(global)。
    local statistic只由聲明它的processors和queue單獨維護。它適合記錄那些只跟本地相關的事件,比如CPU利用率等等。
    global statistic由很多模型中的實體共享。它適合記錄那些關係到整個系統性能和行爲的信息。比如忽略源和目的的端到端延遲。
 
3.2採集數據選擇(Selecting Data for Collection)
    OPNET數據採集機制的缺省設置是關閉的,所以要顯式地激活特定的統計,從而讓結果能夠輸出到合適的輸出文件中去。這通過在仿真時設置一系列的探針(probe)實現。這些probe可以指向scalar、vector等等。這些probe通過Project Editor下的Chose Result(?!我的ms是Project Editor下Simulation->Choose Statistics)操作定義。更多的高級probe要在Probe Editor中定義。
    爲了使統計更簡單,指針還可以選擇一些選項,比如通過選擇時間窗來減少數據量等等。
 
4.分析(Analysis)
    仿真的第三階段包括檢查收集的數據。一般來說,絕大部分的數據都放在output scalar和output vector文件中。OPNET在Project Editor中提供了對這些數據的基本訪問能力,在Analysis Tool中提供了更高級的圖像和數值處理能力。

4.1數值數據分析
    Project Editor和Analysis Tool都可以選擇output vector文件,並且導入單個或多個vector,並將他們的軌跡(traces)顯示出來。多條traces可以顯示在一張圖上,我們稱這張圖爲分析面板(analysis panel)。analysis panel的展示方式可以通過analysis configuration來配置。
    Analysis panels提供了許多數值處理的操作,用來對traces或者vector進行操作,從而產生新的數據做圖。這些操作詳見參考文檔。
    Analysis Tools鏈接到了Filter Editor上,Filter Editor能夠使用數學過濾器(mathematical filter)來處理vector和trace。這裏不詳述。

 

 

 

 

進程域(Process Domain)

1.進程模型運行(Process Model Operation)
    支持process model的module有限(因爲諸如generator,transmitter,receivers等出於方便和功能的原因,已經被預定義了,只需編輯其屬性即可)。兩種module可以支持行爲建模:processors和queues。這些模塊提供了模塊基本的行爲能力和大部分物理資源。Queue還可以讓用戶定義內部的子隊列(subqueues),以及如何管理這些subqueue的方法。但是由於它們的基本建模技術還是相同的,所以以下並不區分它們,方便起見,以下用QP來指代這些模塊。

1.1進程環境(Process Environment)

1.1.1中斷驅動執行(Interrupt-Driven Execution)
    process由interrupt驅動。所以process的第一個操作就是判斷interrupt的類型,進而解析interrupt的屬性。進程在阻止(Blocked)和活動(Active)兩個狀態間循環,通過interrupt由blocked進入active,完成操作後回到blocked。

1.1.2動態進程(Dynamic Processes)
    在仿真開始時,每個QP只有一個進程,這個進程是由仿真核(Simulation Kernel)創建的,稱爲根進程(root process)。往往一個root process就可以完成QP的功能,但是在一些情況下,爲了增強模塊性和降低設計複雜性,QP也採用multiple processes。process可以通過調用op_pro_create()創建新的processes,也就是所謂的dynamic processes。

1.1.2.1進程層次(Process hierarchy)
    由上,顯然process有層次之分,但是OPNET並不要求parent process必須在它所有的child processess全部終止後才能終止。所以這就會在層次上出現“洞”。但是這個是可以通過root process來處理的,詳見後述。child process的attributes在被promote之後就可以一直提升到node level作爲queue和processor的一部分。

1.1.2.2共享內存結構(Shared Memory Architecture)
    有三種機制用來作爲multiple processess下,各個process之間的通信方式:
    a)QP level共享內存:
    通過函數op_pro_modmem_install()和op_pro_modmem_access()訪問。爲了保證process間通信機制,各個process應當遵循shared memory的數據類型,這就要求process都要知道,因而shared memory的數據結構定義應當房子外部定義".h"文件中,幷包含在每個process的header block中。shared memory一開始是沒有的,是由process來決定什麼時候分配以及分配多大,這些通過op_pro_modmem_access()來完成。內存的分配一般是通過op_prg_meme_alloc()來完成。
    b)父子共享內存:
    只有以父子關係聯繫在一起的process才能訪問的私有共享內存。這種共享內存只能在child process由op_pro_create()產生時由op_prg_mem_alloc()分配,且不能被替換。通過op_pro_parmem_access()訪問。通過op_pro_invoke()通知對方對共享內存的內容進行的修改和,以及對內容的檢查。
    c)參數內存(argument memory)
    將內存地址作爲op_pro_invoke()的參數傳給別的進程用以通信,通過op_pro_argmem_access()來完成訪問。與前兩個不同的是,這部分內存不是永恆的。

1.1.2.3動態進程上的操作(Operations on Dynamic Processes)

1.1.2.4中斷驅動(Interrupt Steering)
    當interrupt到來時,Simulation Kernel必須決定哪個process被調用來處理這個interrupt。由於root process是interrupt的缺省接受者,所以一般用root process來完成對interrupt的解析,從而決定調用哪個process。

1.1.3本地進程資源(Local Process Resources)

1.1.3.1輸入輸出流(Input and Output Streams)
    QP的input stream能夠從外部源受到packet。有兩個外部源:packet stream object和remote deliver。
    當packet從input stream到達時,接收QP的一個process由於stream interrupt而被調用。這個process通過op_intrpt_strm()來獲悉這個packet是從哪個stream裏來的。Input stream通常用非負的整數作爲標號(index)。process通過op_pk_get()和stream index來獲得packets。通過op_strm_pksize()獲悉仍然留在input stream中的packet的數量。
    對於output stream來說,跟input stream類似,也有一些函數:op_pk_send(), op_pk_send_delayed(), op_pk_send_forced(), op_pk_send_quiet()。也是用非負整數用來作標號。
    Input and Output Stream在stream accessing機制下會用到。如果我們用D表示目的地,用S表示源,那麼這個packet轉發的順序應當是:
    a)D調用op_strm_access(),要求S發包,要指明stream index。
    b)然後,D處產生強行中斷,D的進程被掛起等待S的響應。interrupt類型爲access interrupt。S調用op_intrpt_strm()來決定從哪個output stream被要求。然後根據要求發包,爲了避免再在D處產生中斷,使用op_pk_send_quiet()來發包。S被阻止。
    c)D重新獲得控制權,繼續執行。通過op_strm_pksize()和op_pk_get()來獲取包及相關信息。

1.1.3.2輸入統計和本地輸出統計(Input Statistics and Local Output Statistics)
    Inuput statistics是QP內部的一個部分,用來接收同一個node下別的modules發來的數值。他們通過統計線(statistics wires)來傳輸。目的module通過op_stat_local_read()來讀取值,由於沒有緩存,所以只能讀取最新的值。
    statistics的變化會在目的module處產生統計事件(statistics event),每個event都會在接收QP處產生一個統計中斷(statistics interrupt)。process通過調用op_intrpt_stat()來決定受到了什麼類型的中斷。
    local output statistics用來報告用戶定義的各個QP專有的統計量。
    local statistic可以通過probe來獲得。也可以通過statistics wire連接到同一node下的其他QP上,在module之間傳送statistics的更新。statistics的更新通過調用op_stat_write()和op_stat_write_t()來實現。一旦statistics更新了,所有的目的module都會受到相應的通知。
    每個QP都可以有人以素含量的local output statistics,可以被所有存在於QP中的process共享。process必須聲明要用的local output statistics。出於這個目的,Process Editor提供了edit local statistics操作。local output statistics可以是單個也可以是數組。
    爲了能夠訪問statistics從而更新它們,process必須獲得對應statistics的句柄(handle)。op_stat_reg()允許process獲得這個句柄。關於op_stat_reg()和op_stat_write(),可以參考Simulation Kernel手冊。

1.1.3.3全局統計(Global Statistics)
    Global Statistics和Local Statistics操作上都差不多,但是從名字上我們就可以看出他們所關注的東西是不同的。這裏不詳述。

1.1.3.4子隊列(Subqueues)

1.1.3.5屬性(Attribute)

1.2進程模型組成(Process Model Components)

1.2.1狀態轉移圖(State Transition Diagrams)

1.2.1.1強制和非強制狀態(Forced and Unforced States)
    process在任意時刻只能處在一個狀態下。process可以根據它收到的interrupt在狀態之間轉移。
    每個狀態的執行過程分爲兩個部分。進入執行(enter executives)和離開執行(exit executives),分別在進入和離開該狀態的時候執行。
    Proc定義了兩種狀態,稱之爲強制狀態(forced states)和非強制狀態(unforced states),分別用綠色和紅色表示。
    Unforced states允許在process在enter和exit之間暫停。一旦process執行完unforced states下的enter executives,就被block,並將控制權交還給調用它的其他process。如果這個process是被Simulation Kernel調用的,block就意味着這個event的結束。但是此時這個process依然被掛起,直到下一個新的調用產生使得它進入當前狀態的exit executives。
    Forced states是不允旬process等待的。所以一般它的exit executives是空白的。這是它與Unforced states的最大區別。

1.2.1.2初始狀態(Initial States)
    initial states是process被第一次調用時的起始位置。通過set initial state或make initial state來設置。
    begin simulation interrupts是一種module attribute,用來完成對initial state的進入。通過module的begsim intrpt屬性來選擇。當然也可以不選擇使用begin simulation interrupts而使用普通的interrupt(不推薦)。

1.2.1.3狀態轉移(Transitions)
    對於狀態轉移的規定有四個組成部分:源狀態、目的狀態、條件表達式、執行表達式。可以這樣解讀:當處在源狀態下,如果條件是真,則執行操作,並且轉移到目的狀態。
    轉移條件是布爾表達式。表達式可能是很多東西複雜東西的組合。所有支持條件表達式的計算都必須在exit executives的末尾執行,因爲它們馬上就要在後面的計算條件表達式的值時用刀。

1.2.2使用宏來定義複雜或循環表達式(Using Macros to Define Complex or Recurring Expressions)
    幾乎所有Proto-C的宏都是在header block中定義的。宏通常用來表示常數,狀態轉移條件,狀態轉移操作,和普通的操作。宏也可以在外部文件".h"中定義。然後通過在header block中用#include包含進來。宏的定義是#define。(跟C幾乎一模一樣)

1.2.3變量(Variables)
    process可以利用三種不同的變量,分別稱之爲state variables, temporary variables, global variables。

1.2.3.1變量組成(Variable Components)
    a)名字
    b)數據類型(詳見參考文檔)。定製數據類型也在header block中進行。typedef struct(跟C一樣)。
    c)值

1.2.3.2變量操作(Operations on Varuables)
1.2.3.3狀態變量(State Variables)
    State Variables用來保持和積累信息(比如:統計)。
    State Variables在state variable block中聲明。
    State Variables是持久的,他們一直都在保持它們的值,他們只能通過執行process中顯式的賦值語句修改。
    State Variables相對於各個process而言是私有的(private)。即使它們在同一個QP下,即使它們有着相同的名字。
    State Variables沒有自動的初始化,所以在initial state一定要有初始化state variable的語句。

1.2.3.4臨時變量(Temporary Variables)
    Temporary Variables和State Variables最大的區別就是持久性,如果一個variable不需要在兩次調用之間保持不變,那麼我們只需要使用Temporary variables,反之,我們則需要使用State Variables。
    Temporary Variables在Temporary Variable Block中聲明,也可以在那裏初始化賦值。

1.2.3.5全局變量(Global Variables)
    Global Variables爲不同module下的多個process提供了在一個公用的地方存儲信息的方法。
    Global Variables在header block下聲明,所有與這個變量相關的process都應當聲明這個變量,但是他們中只能有,也必須有一個作爲主聲明(principle declaration),其他的都是外部聲明(extern declaration),通過加"extern"實現。
    Global Variables的初始化和Temporary variable相似,但是隻能通過principle declaration賦值。

1.2.4進程模型屬性(Process Model Attributes)
1.2.4.1模型屬性(Model Attributes)
    在Interfaces->Model Attributes中設定。也可以通過op_ima_obj_attr_set()來設定,但是一般這些屬性在仿真過程中只是讀取,而不做修改,所以只需要用op_ima_obj_attr_get()訪問即可。

1.2.4.2進程屬性(Process Attributes)
    主要是關於Process Attributes Interface的(Interfaces->Process Interfaces)。用來設定(set)一些process的attributes,並且可以把這些attributes提升(promote)到更高層次的上去,也可以讓那些與模型無關的屬性相對於上層隱藏(hiden)起來。

1.2.5模塊化計算(Modularizing Computations)
    兩種實現方法:動態進程和函數調用

1.2.5.1動態進程(Dynamic Processes)

1.2.5.2函數調用(Function Calls)

1.2.6調試功能(Diagnostic Capabilities)
    OPNET有個調試器ODB。允許互動監控仿真過程和對象狀態。ODB詳見External Interfaces手冊。

2.進程模型的開發方法(Process Model Development Methodology)

 

 

 

節點域(Node Domain)

1.模塊定義(Module Definitions)
    modules表示通信節點中產生、消耗、處理數據的部分。有以下幾種類型:processors, queues, generators, receivers, transmitters。

1.1處理器模塊(Processor Modules)

1.2隊列模塊(Queue Modules)
    Queue和Processor之間最主要的區別是:Queue還有一個附加資源,稱之爲子隊列(subqueue)。subqueue大大地方便了緩存和管理數據包的收集。之後詳述。
    subqueue作爲queue的一個object,以queue的attribute中compound attribute的形式體現。

1.3發送模塊(Transmitter Modules)
    有三種發送模塊:point-to-point, bus, radio。
    transmitter從一個或者多個輸入流中收集packet,然後把它們轉發到相應通信鏈路上的channel中去。在某個給定的輸入流收到的數據被髮送到同一個標號的channel上去。每個channel都有自己的數據率。如果packet到的時候,相應的channel正在處理之前的packet,那麼該packet將被自動放到一個buffer中排隊等待,這個buffer是無盡的。Channels是transmitter的下屬object。同樣,也是作爲一個compound attribute。
    transmitter也有一些統計功能,可以通過statistics wire和statistics probe獲取。

1.4接收模塊(Receiver Modules)
    也有三種接收模塊,跟發送模塊對應。其功能也和transmitter類似,但是方向上顯然不同。

2.連接定義(Connection Definitions)
    Connection表示一個node下各個module之間的通信路徑和關聯關係。有三種類型的connection: packet stream, statistic wires, logical associations。

2.1包流(packet streams)
    Packet streams用來負責把一個數據包從源module發送到destination module去。stream方式傳送有三種方法來通知destination module包到達:scheduled, forced, quiet。
    scheduled是按調度原則產生interrupt;forced是立即發生;quiet是不產生任何interrupt。generator和receivers的output stream通過流的intrpt method屬性來決定採用什麼方法。
    packet stream支持在packet從源module進入stream到從stream進入目的module這段時間內的延遲仿真。缺省值是0。

2.2統計線(statistic wires)
    統計線傳輸關於源module的狀態信息。每個module都有一組本地輸出統計(local output statistics),他們的值會在仿真過程中適時地更新。他們作爲了statistic wires的信息源。像Queue和Processor這樣的module他們有一些由進程模型定義的統計數據,這些數據通過op_stat_write()來更新。還有一些module他們的statistics是有Simulation Kernel在適當的時候自動的更新的。每根statistics wire只能傳輸一個output statistics這個通過statistics wire的src stat屬性確定。
    Processor和queue modules也有一組輸入統計(input statistics),作爲statistics wire的目的端。進程模型通過調用op_stat_local_read()來訪問當前的輸入統計值。
    要注意,output statistics可以作爲多個statistics wire的源,同樣input statistics也可以作爲多個statistics wire的目的。
    當statistics變化的時候,目的module將被一個statistic interrupt通知。interrupt發生的條件由statistic wire的屬性控制,這個屬性是statistic trggers。
    在node model中,statistic wire一般有兩種使用方法。第一種,用來動態監控其他部分的狀態。第二種,用來發送信號通知別人自己的狀態變換,稱之爲旗語(semaphores)。

2.3邏輯關聯(Logical Associations)
    Logical associations是一種特殊的連接,並不在模塊間傳輸任何數據,它用來指明兩個模塊間的關係。目前,他們只能支持特定類型的transmitter和receiver,比如:point-to-point, bus。所以logical association也被稱之爲logical transceiver associations。每對transceiver只能代表節點和一個link相連。

3.節點模型接口(Node Model Interface)
    跟Process model非常類似。

3.1節點模型屬性(Node Model Attributes)

3.2節點屬性接口和衍生節點模型(Node Attribute Interfaces and Derived Node Models)

3.4統計提升(Statistic Promotion)

4.隊列建模(Modeling Queues)
    隊列有一些預定義的基模型,分爲兩類:動態隊列(active queues)和被動隊列(passive queues),具體的模型詳見參考文獻。

4.1子隊列抽象和包編號(Abstract Subqueue and Packet Indices)

4.2實現優先級隊列(Implementing Priority Queues)

4.3實現有限隊列(Implementing Finite Queues)

5.分層協議建模(Modeling Layered Protocols)

6.共享資源建模(Modeling Shared Resources)

 

發佈了22 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章