OPNET采用离散事件仿真的模拟机理,通过执行离散事件仿真,对各种模拟系统的行为及其性能进行分析。只有网络状态发生变化(即有事件发生)时,模拟机才工作,仿真时间的推进依赖于事件的发生;如果一段时间内没有发生任何事件,仿真时间将停留在上次事件发生的时刻,直到下一个事件发生,模拟机才开始工作,仿真时间跳过这段时间,直接到达有事件需要执行的时刻。相比于连续时间仿真,离散事件仿真依赖于事件驱动,很大程度提高了模拟机的仿真效率。
对于离散事件仿真来说,事件的执行时不需要花费任何时间。事件的执行时一个时间点,而不是一个时间段。
离散事件的仿真核心实质上是一个事件调度器,它对所有希望执行的事件及其时间列表进行维护。通常事件调度器对其列表中的事件按照先入先出(First In First Out,FIFO)的准则进行调度。但是,因为有可能在同一个时刻点会希望发生多个事件,并且我们会期望这些事件按照一定的顺序发生,所以,在OPNET中,事件列表是具有优先级的。通过设置事件的优先级,我们可以规划同一时刻事件的调度顺序。
离散事件驱动的模拟机理决定了OPNET的时间推进机制。如图3.1所示。
仿真核心在t1时刻处理完当前事件X后,就将X从事件列表中删除,并且获得下一个希望被执行的事件Y;同时,仿真时间推进到事件Y的执行时刻t2。若t2=t1,则事件Y对仿真时间的推进没有任何贡献。另外,不能为过去的时间规划一个事件。例如, t3<t4,当前仿真时间为t4,但是却为t3时刻规划了一个事件,这是不被允许的。
仿真时间的推进依据系统设计的逻辑,随着事件的发生而单调递增。下面两种情况会导致仿真结束:
- 仿真时间已经推进到预设的结束时间;
- 事件列表为空。