首页 理论教育 Contiki操作系统中进程调度的实现方式及其作用

Contiki操作系统中进程调度的实现方式及其作用

时间:2023-11-20 理论教育 版权反馈
【摘要】:进程调度的目的是当到达进程运行的时间时调用进程,通过调用实现进程线程的函数进程调度程序激活进程。在Contiki 操作系统中,在响应发布给进程的事件中或者在为进程请求轮询中完成所有进程的激活。进程调度程序会将事件标识符和一个不透明指针发送给正在激活的进程,该指针由调用者提供并且可能设置为NULL以表示没有数据和事件一起传递。Contiki 操作系统内核发送通知进程即将退出的事件后,从活动进程列表中删除该进程。

Contiki操作系统中进程调度的实现方式及其作用

进程调度的目的是当到达进程运行的时间时调用进程,通过调用实现进程线程的函数进程调度程序激活进程。在Contiki 操作系统中,在响应发布给进程的事件中或者在为进程请求轮询中完成所有进程的激活。进程调度程序会将事件标识符和一个不透明指针发送给正在激活的进程,该指针由调用者提供并且可能设置为NULL以表示没有数据和事件一起传递。当进程请求轮询时,可能也没有数据可以传递。

函数process_start()启动进程,该函数的目的是建立进程控制结构,把进程放在内核活动进程列表中,并调用进程线程中的初始化代码。调用函数process_start()之后,启动该进程。函数process_start()首先检查要启动的进程是否已经在内核的活动进程列表中,如果在列表中,该进程已经启动,process_start()函数返回。如果确定进程没有启动,把该进程放在活动进程列表中并且为该进程建立进程控制块,设置进程状态为PROCESS_STATE_RUNNING,并且用函数PT_INIT()初始化该进程的原线程。最后,内核给进程发送一个同步事件PROCESS_EVENT_INIT,而且一起提供不透明指针和事件,该指针用作向启动进程传输一些信息,然而,该指针一般被设置为NULL。当进程接收到它的第一个事件PROCESS_EVENT_INIT 时,进程执行它的进程线程的前面部分代码。通常情况下,进程线程的这部分代码包含进程启动时要运行的初始化代码。process_start()函数的代码如下所示:

正在运行的进程可用两种方法退出,要么进程自己退出,要么由另一进程结束该进程。在第一种方式中,进程可通过调用函数process_exit()自身结束运行或者当进程线程的执行到达process_end()语句时结束运行。在第二种方式中,另一进程可通过调用函数process_exit()结束一个进程。process_exit()函数和其调用函数exit_process()的代码如下:(www.xing528.com)

当进程退出时,不管它自己结束运行还是由另一进程结束该进程,Contiki操作系统内核都要给所有其他进程发送事件,通知某进程已结束运行,这样其他进程可以释放任何由正在退出的进程所分配的资源。例如,uIP TCP/IP 协议栈将关闭并删除任何将要结束的进程拥有的网络连接。作为一个同步事件,发送事件PROCESS_EVENT_EXITED 给除将要退出进程之外的所有活动进程。

如果一个进程由另一进程结束,将要结束的进程也会接收到一个同步事件PROCESS_EVENT_EXIT,该事件通知将要结束进程,该进程有机会释放它拥有的任何资源或通知其他进程它即将退出。Contiki 操作系统内核发送通知进程即将退出的事件后,从活动进程列表中删除该进程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈