本文主要是介绍CSMA/CA之INIT入口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里比较奇怪的一个地方在于init竟然是非强制状态。
仿真开始的时候,仿真核心维持的事件列表中维持着10个begsim_intrpt(因为有10个节点),且发生时间都为0时刻。
begsim_intrpt被触发,进程从初始的状态的入口开始执行。
如何确定这10个相同时刻的事件的执行顺序?
- 尽管发生在同一时刻,但是其在事件列表中仍然是有顺序的。
- 仿真核心按照其在事件列表的顺序一个一个执行。事件执行的过程中仿真时间不推进。
- 执行到下一个仿真开始中断事件的时候,仿真时间不推进,仍然为0。
- 每一个init入口处又设置了一个自中断,其触发时间也是0时刻。
- 可以想象,事件列表中一开始有10个0时刻的仿真开始中断,随着第一个仿真开始中断的执行,事件列表中又多了一个0时刻的自中断。当10个仿真开始中断都执行完毕,事件列表中会出现10个0时刻的自中断。
- 因为init是非强制状态,执行完入口代码后,控制权又回到了仿真核心。仿真核心执行事件列表的第一个事件,也即0时刻的自中断。控制权又回到init进程。init进程接着执行init的出口代码。
如何确定中断的接收者?
- 中断的接收者是进程
- 流中断的接收者通过包流很容易判断
- 自中断的接收者就是本身
- 其他进程中断的接收者是其他进程
如何确定进程内部状态的转移?
- 中断的传递是定向的,由仿真核心传递给目标进程
- 目标进程内部有很多状态,究竟装移到哪一个具体的状态,仅仅靠中断类型是不够的的。
- 流中断除了需要知道中断类型是流中断外,还需要知道是从哪一个流索引来的
- 自中断除了需要知道中断类型是自中断外,还需要知道其中断码是多少
tags:opnet
这篇关于CSMA/CA之INIT入口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!