加入收藏 设为首页 联系站长
首页 | 虚拟动态 | Cisco模拟 | Juniper仿真 | 虚拟机 | 网络仿真 | 软件路由 | 技术专题 | 相关软件 | 交流论坛
>首页 -> 网络仿真 -> Opnet

TOP

碰到一个调用子进程的奇怪问题
[ 录入者:admin | 时间:2007-10-28 01:16:48 | 作者: | 来源: | 浏览:637次 ]

在IP模块中,父进程是ip_dispatch,其下有好多子进程,其中一个是ip_rte_slot。

debug的时候发现,当ARP模块通过op_pk_send()发包给IP模块的时候,直接就调用了ip_rte_slot了。

但是按我的理解,应该是ip_dispatch先接收到一个流中断,然后根据某些信息才决定调用那个子进程。可是从debug中没有发现父进程调用子进程的语句。用next进入下一事件就调用了ip_rte_slot子进程了。而且在该子进程中还用op_pro_invoker()查看,显示是:* op_pro_invoker (pro_handle, invmode_ptr)
         process ID       (187)
         Unable to obtain invoker

到底这里的调用情况是怎样的?由于IP模块的代码太复杂,从代码中难以理出思路

是这样子的,OPNET在调用子进程时,有四种方式,分别是:

Manual Steering
Normal Steering
Type-based Steering
Port-based Steering
对于后两种方式,当收到特定类型(type-based)或特定端口上(port-based)的中断时,就直接进入相应的子进程而不通过父进程进行调用。
具体的你可以参考OPNETWork2002 1504

嗯,里面说的挺清楚的。把我的理解贴出来,请你看看对不:

Manual Steering:顾名思义就是手工的来调用子进程。比如说,父进程收到一个流中断后,经过判断是要交给某个子进程处理的,那么就通过op_pro_invoke()来手工的调用子进程。

Normal Steering:用一个例子来说吧:当子进程用op_intrpt_schedule_self()定制了一个自中断,那么当这一中断到来时,系统内核会自动调用该子进程而不通过父进程来调用它。

Type_based Steering:则需要子进程通过op_intrpt_type_register()来注册某一类型的中断,当该类型的中断到来时,也会直接的调用该子进程。

Port_based Steering:与基于Type的类似。

按照这样的理解,ip_rte_slot应该是注册了Port_based Steering。不过还没具体查看代码

父进程就是根进程,它可以触发(激活)子进程。比如说TCP,在server端它有一个服务进程(根进程),当有client端向server端发出请求时,server端将为此而分配资源,这时就调用一个子进程,该子进程负责与该client进行通信。当有别的client向server发出请求时,server进程(根进程)也向该client分配一个子进程与之通信。

通常,采用父进程/子进程的形式是为了编程的方便、逻辑的清晰,更详细的,你可以参考Online document

[上一篇]网络仿真技术及其在163网广州POP.. [下一篇]无线链路的pipeline模型(1)
※相关文章
 

评论

称  呼:
内  容:

相关栏目

最新文章

热门文章

推荐文章

赞助商链接