模块交互
发布时间:2012/4/4 20:08:25 访问次数:1693
模块之间的交互是通过消息机制,调用被模BGY288块注册的函数,调用ker_*system (API)访问内核实现的。关于这些交互方法的描述可以参见SOS的技术文档。消息本身是灵活变化的,并且传递比较缓慢,所以SOS提供一些直接的调用方法,可以被模块注册使用,这些调用方法可以通过调度表为模块提供反应时间短的联系。
函数的注册和订阅是SOS提供的一种机制,是内核与模块之间相互交互的纽带。一个模块注册内核酌函数以后,当它的镜像文件加载时就会通知内核它处于镜像文件的位置。注册是通过系统调用ker register血实现的。函数控制块(Function Control Block,FCB)用来储存关于注册函数的一些关键字信息,通过成对的函数id和模块id来进行索引。
函数控制块有一个有效标志位,订阅者的计数器和原型的信息。原型信息既包括基本的类型信息还记录是否一个参数包含了动态内存,是否可能更换所有者。例如,原型信息是{’c’,x’,tVI,’1’,,这表示函数返回一个字符“c”,但是需要一个参数“1”,并且这个参数的指针指向动态内存分配的“x”。当一个注册函数被卸载或者删除时,原型信息会被SOS的内核使用到。
ker _get_handle系统调用是用来注册一个函数的,它通过模块id和函数id在FCB寻找函数的位置,如果查找成功,则内核返回一个指向这个被注册函数的函数指针。订阅者就可以通过引用这个函数指针来访问它。当这个函数有变化时,内核只需要让函数在FCB中的函数指针指向一个新的地址,而不需要去更新或者改变订阅者的模块代码。
模块可以通过一个jump表来访问内核的函数。有了这个jump表,模块就可以和内核保持相互独立,而不需要依赖于内核。当内核需要升级时,只要jump表的结构不变化,则只需要改变内核的代码,而不需要重新编译模块的代码。
函数的注册和订阅是SOS提供的一种机制,是内核与模块之间相互交互的纽带。一个模块注册内核酌函数以后,当它的镜像文件加载时就会通知内核它处于镜像文件的位置。注册是通过系统调用ker register血实现的。函数控制块(Function Control Block,FCB)用来储存关于注册函数的一些关键字信息,通过成对的函数id和模块id来进行索引。
函数控制块有一个有效标志位,订阅者的计数器和原型的信息。原型信息既包括基本的类型信息还记录是否一个参数包含了动态内存,是否可能更换所有者。例如,原型信息是{’c’,x’,tVI,’1’,,这表示函数返回一个字符“c”,但是需要一个参数“1”,并且这个参数的指针指向动态内存分配的“x”。当一个注册函数被卸载或者删除时,原型信息会被SOS的内核使用到。
ker _get_handle系统调用是用来注册一个函数的,它通过模块id和函数id在FCB寻找函数的位置,如果查找成功,则内核返回一个指向这个被注册函数的函数指针。订阅者就可以通过引用这个函数指针来访问它。当这个函数有变化时,内核只需要让函数在FCB中的函数指针指向一个新的地址,而不需要去更新或者改变订阅者的模块代码。
模块可以通过一个jump表来访问内核的函数。有了这个jump表,模块就可以和内核保持相互独立,而不需要依赖于内核。当内核需要升级时,只要jump表的结构不变化,则只需要改变内核的代码,而不需要重新编译模块的代码。
模块之间的交互是通过消息机制,调用被模BGY288块注册的函数,调用ker_*system (API)访问内核实现的。关于这些交互方法的描述可以参见SOS的技术文档。消息本身是灵活变化的,并且传递比较缓慢,所以SOS提供一些直接的调用方法,可以被模块注册使用,这些调用方法可以通过调度表为模块提供反应时间短的联系。
函数的注册和订阅是SOS提供的一种机制,是内核与模块之间相互交互的纽带。一个模块注册内核酌函数以后,当它的镜像文件加载时就会通知内核它处于镜像文件的位置。注册是通过系统调用ker register血实现的。函数控制块(Function Control Block,FCB)用来储存关于注册函数的一些关键字信息,通过成对的函数id和模块id来进行索引。
函数控制块有一个有效标志位,订阅者的计数器和原型的信息。原型信息既包括基本的类型信息还记录是否一个参数包含了动态内存,是否可能更换所有者。例如,原型信息是{’c’,x’,tVI,’1’,,这表示函数返回一个字符“c”,但是需要一个参数“1”,并且这个参数的指针指向动态内存分配的“x”。当一个注册函数被卸载或者删除时,原型信息会被SOS的内核使用到。
ker _get_handle系统调用是用来注册一个函数的,它通过模块id和函数id在FCB寻找函数的位置,如果查找成功,则内核返回一个指向这个被注册函数的函数指针。订阅者就可以通过引用这个函数指针来访问它。当这个函数有变化时,内核只需要让函数在FCB中的函数指针指向一个新的地址,而不需要去更新或者改变订阅者的模块代码。
模块可以通过一个jump表来访问内核的函数。有了这个jump表,模块就可以和内核保持相互独立,而不需要依赖于内核。当内核需要升级时,只要jump表的结构不变化,则只需要改变内核的代码,而不需要重新编译模块的代码。
函数的注册和订阅是SOS提供的一种机制,是内核与模块之间相互交互的纽带。一个模块注册内核酌函数以后,当它的镜像文件加载时就会通知内核它处于镜像文件的位置。注册是通过系统调用ker register血实现的。函数控制块(Function Control Block,FCB)用来储存关于注册函数的一些关键字信息,通过成对的函数id和模块id来进行索引。
函数控制块有一个有效标志位,订阅者的计数器和原型的信息。原型信息既包括基本的类型信息还记录是否一个参数包含了动态内存,是否可能更换所有者。例如,原型信息是{’c’,x’,tVI,’1’,,这表示函数返回一个字符“c”,但是需要一个参数“1”,并且这个参数的指针指向动态内存分配的“x”。当一个注册函数被卸载或者删除时,原型信息会被SOS的内核使用到。
ker _get_handle系统调用是用来注册一个函数的,它通过模块id和函数id在FCB寻找函数的位置,如果查找成功,则内核返回一个指向这个被注册函数的函数指针。订阅者就可以通过引用这个函数指针来访问它。当这个函数有变化时,内核只需要让函数在FCB中的函数指针指向一个新的地址,而不需要去更新或者改变订阅者的模块代码。
模块可以通过一个jump表来访问内核的函数。有了这个jump表,模块就可以和内核保持相互独立,而不需要依赖于内核。当内核需要升级时,只要jump表的结构不变化,则只需要改变内核的代码,而不需要重新编译模块的代码。