【精品】任务管理

【精品】任务管理

ID:44589244

大小:118.59 KB

页数:10页

时间:2019-10-23

【精品】任务管理_第1页
【精品】任务管理_第2页
【精品】任务管理_第3页
【精品】任务管理_第4页
【精品】任务管理_第5页
资源描述:

《【精品】任务管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、任务管理任务的岀现是区分实时操作系统和裸机系统的根本。对于裸机系统来说,只有一个任务,即一个超循环。对于实吋操作系统来说往往是一个多任务的环境。一个任务运行的时候好像是它独享着整个系统的资源,对于单核的卬u來说,任何一个时刻只有一个任务在运行。rawos创建任务的函数为raw_task_create0任务的形式通常为一个无限循环。示例如下:voidtask(void*p_arg)while(1){}可以看到任务是没有返冋值的。任务的实体是一个无限循环体。多任务系统环境中具有一个挑战性的问题是任务的栈空间溢出问题

2、,这个问题本质上除非使用mmu或者mpu,不然软件上是永远无法百分百侦测栈溢出问题的。软件无法侦测的原因可能是任务内部申请了一个比较大的局部变量数组,直接跳跃超岀了栈访问。既然100%无法保证,那还有意义去使用软件侦测栈空间吗?答案是肯定的,绝大部分情况下,使用软件侦测是没问题的。rawos的软件栈侦测机制除了主动调用任务apiraw_task_stack_check來侦测任务栈的空闲空间外,空闲任务也会时刻监视系统各任丛栈的空间,具体查看空闲任务一章节。任务的管理也包括对时间的管理,⑻AZOS系统中任务允许主

3、动睡眠-•段时间然后时间到了醒过来。系统中主动睡眠的函数有raw_sleep以及raw_time_sleeporawos系统也提供了开关抢占的函数:raw_disable_sche以及raw_enable_sche0rawdisablesche被调用之后,即使有高优兎级的丘务就绪也无疝fl应,舌到再次开抢占Z后切换到高优先级任务,如杲其中有更高优先级任务被唤醒了。关系统抢占的函数,强烈不建议用户去使用,因为那样会增加系统最大的任务延迟吋间,对系统实吋性是相当害的。rawos系统提供了挂起和回复任务的操作,api

4、函数为raw_task_suspend和raw_t3sk_resume,支持任务嵌套的suspend状态。rawos系统提供了动态改变任务的优先级的函数raw_task_priority_change,使用此函数有一个设计原则,任务自己改变自己的优先级,而示是其他任务去改变。遵循这样的设计原则,系统行为将更加的可测。rawos系统提供了任务删除的函数raw_task_delete,但是使用此函数也是有具体要求的,第一需要自己删除自己,第二删恳自己之前必须释放所有的锁。因为任务删除之后如果还持有锁的话,其它任务势

5、必永远获得不了锁。第三任务很可能需要释放口己屮请的内存,如果不这样的话,任务删除Z后,内存势必不能回收,造成系统的内存泄漏。rawos系统提供了任务的一组私有变量,这些变量是每个任务所独有的信息。相关的函数为raw_set_task_user_point和raw_get_task_user_pointorawos系统可以指定具体每一个任务的调度行为,即每一个任务可以赋予SCHED_FIFO和SCHED_RR的调度行为。SCHED_FIFO和SCHED_RR的调度是遵循工业标准posix的行为去调度的。具体的调度

6、行为请参照实吋操作系统主流调度方法一章节。rawos系统捉供了中止任务等待系统资源的api,假设任务taskl等待在信号量上,另一任务task2如果不想让taskl继续等待的话,可以调用raw_task_wait_abort随时中止taskl的等待。rawos系统提供了一些关于系统debug的api,raw_iter_block_task能够遍历阻塞在系统资源上的所冇任务,并作出一定的回调操作oraw_get_system_global_space函数用于得到系统所使用到的所有数据段的空间。综上所述,可以看到r

7、awos的任务管理系统涵盖到了大量的api,事实上绝大部分的实时操作系统的api都实现了类似的功能。任务状态基于实时操作系统的设计都具有任务的概念,任务都具有状态的属性。任务的状态各家实吋操作系统基木上都是共同的,一般是就绪状态,阻塞状态。rawos的任务状态一定程度上参考了ucos3的设计,任务的状态分得很细,冇助于避免实时系统的深层次bugorawos具体的任务状态图如下:RAW_DLY.RAW_DLY_SUSPENDED下面会详细讲解这张图,这张图理解了,基本对各家实时操作系统的任务状态也理解差不多了。R

8、AW_RDY是任务的一个起始状态,也就是任务的就绪态。RAW_DLY是任务的睡眠状态,由raw_sleep这个api来触发进入此状态。RAW_SUSPENDED的状态由raw_task_suspend来触发进入此状态,任务进入RAW_SUSPENDED的状态后,可反被由也任务调用task_resume来恢复到RAW_RDY庆态。RAW_PEND状态是任务的阻塞状态,是程务得不到系统的事

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。