嵌入式操作系统内核原理和开发(实时调度).doc

嵌入式操作系统内核原理和开发(实时调度).doc

ID:61499529

大小:53.50 KB

页数:8页

时间:2021-02-07

嵌入式操作系统内核原理和开发(实时调度).doc_第1页
嵌入式操作系统内核原理和开发(实时调度).doc_第2页
嵌入式操作系统内核原理和开发(实时调度).doc_第3页
嵌入式操作系统内核原理和开发(实时调度).doc_第4页
嵌入式操作系统内核原理和开发(实时调度).doc_第5页
资源描述:

《嵌入式操作系统内核原理和开发(实时调度).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式操作系统内核原理和开发(实时调度)和很多通用的操作系统相比,实时操作系统有自己的一个特点,那就是实时调度。通用操作系统的线程优先级一般是可以变化的,而实时系统的线程优先级却是不变的。之所以这么设计,是为了保证高优先级的任务在第一时间获得调度,这样才能保证调度的实时性。因为实时系统是严格按照优先级搞定调度的,所以不管什么时候,我们只要寻找到最高优先级的任务即可。rawos系统可以支持256个优先级,对任务的创建个数也没有限制,所以就会出现多个任务共享一个优先级的情况。因此系统本身对同优先级的任务分配了定额的时间片,一旦该任务时间片用完,就会被放到优先级的末尾,直到获得下

2、一次的调度机会,下面的代码就说明了这一情况,它是在时钟中断的时候被调度的,[cpp]viewplaincopy1voidcaculate_time_slice()2{3RAW_TASK_OBJ*task_ptr;4LIST*head;56RAW_SR_ALLOC();78task_ptr=raw_task_active;9head=&raw_ready_queue.task_ready_list[task_ptr->priority];1011RAW_CRITICAL_ENTER();1213if(is_list_empty(head)){1415RAW_CRITICAL_

3、EXIT();16return;17}1819/*thereisonlyonetaskonthisreadylist,sodonotneedtocaculatetimeslice*/20if(head->next->next==head){2122RAW_CRITICAL_EXIT();23return;2425}2627if(task_ptr->time_slice){28task_ptr->time_slice--;29}12/*ifcurrentactivetaskhastime_slice,justreturn*/3if(task_ptr->time_slice){

4、4RAW_CRITICAL_EXIT();5return;6}78/*Movecurrentactivetasktotheendofreadylistforthesamepriority*/9move_to_ready_list_end(&raw_ready_queue,task_ptr);1011/*restorethetasktimeslice*/12task_ptr->time_slice=task_ptr->time_total;1314RAW_CRITICAL_EXIT();15}16上面说的是一个优先级下面有多个任务的情况,如果优先级本身只有一个任务,那么就很抱

5、歉了,下面还得继续运行这个任务。另外,我们在windows上面编程的时候喜欢暂时释放线程的运行权利,调用sleep(0)即可,那么这在rawos上是怎么实现的呢,[cpp]viewplaincopy17RAW_U16raw_sleep(RAW_U32dly)18{19RAW_U16error_status;2021RAW_SR_ALLOC();2223#if(RAW_TASK_FUNCTION_CHECK>0)2425if(raw_int_nesting){2627returnRAW_NOT_CALLED_BY_ISR;28}29#endif3031RAW_CRITICAL

6、_ENTER();3233if(dly){3435/*systemislockedsotaskcannotsleepjustreturnimmediately*/36if(raw_sched_lock){37RAW_CRITICAL_EXIT();38returnRAW_SCHED_DISABLE;39}12raw_task_active->task_state=RAW_DLY;34tick_list_insert(raw_task_active,dly);56remove_ready_list(&raw_ready_queue,raw_task_active);7}89e

7、lse{10/*makecurrenttasktotheendofreadylist*/11move_to_ready_list_end(&raw_ready_queue,raw_task_active);12}1314RAW_CRITICAL_EXIT();1516raw_sched();1718if(dly){19/*taskistimeoutaftersleep*/20error_status=block_state_post_process(raw_task_active,0);21}2223else{24

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

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

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