嵌入式操作系统内核原理和开发(实时调度).pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:8 大小:439KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

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

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

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处嵌入式操作系统内核原理和开发(实时调度)和很多通用的操作系统相比,实时操作系统有自己的一个特点,那就是实时调度。通用操作系统的线程优先级一般是可以变化的,而实时系统的线程优先级却是不变的。之所以这么设计,是为了保证高优先级的任务在第一时间获得调度,这样才能保证调度的实时性。因为实时系统是严格按照优先级搞定调度的,所以不管什么时候,我们只要寻找到最高优先级的任务即可。rawos系统可以支持256个优先级,对任务的创建个数也没有限制,所以就会出现多个任务共享一个优先级的情况。因此系统本身对同优先级的任务分配了定额的时间片,一旦该任务时间片用完,就会被放到优先级的末尾,直到获得下一次的调度机会,下面的代码就说明了这一情况,它是在时钟中断的时候被调度的,[cpp]viewplaincopy1.voidcaculate_time_slice()2.{3.RAW_TASK_OBJ*task_ptr;4.LIST*head;5.6.RAW_SR_ALLOC();7.8.task_ptr=raw_task_active;9.head=&raw_ready_queue.task_ready_list[task_ptr->priority];10.11.RAW_CRITICAL_ENTER();12.13.if(is_list_empty(head)){14.15.RAW_CRITICAL_EXIT();16.return;17.}18.19./*thereisonlyonetaskonthisreadylist,sodonotneedtocaculatetimeslice*/20.if(head->next->next==head){21.22.RAW_CRITICAL_EXIT();23.return;24.25.}26.27.if(task_ptr->time_slice){本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处28.task_ptr->time_slice--;29.}30.31./*ifcurrentactivetaskhastime_slice,justreturn*/32.if(task_ptr->time_slice){33.RAW_CRITICAL_EXIT();34.return;35.}36.37./*Movecurrentactivetasktotheendofreadylistforthesamepriority*/38.move_to_ready_list_end(&raw_ready_queue,task_ptr);39.40./*restorethetasktimeslice*/41.task_ptr->time_slice=task_ptr->time_total;42.43.RAW_CRITICAL_EXIT();44.}45.上面说的是一个优先级下面有多个任务的情况,如果优先级本身只有一个任务,那么就很抱歉了,下面还得继续运行这个任务。另外,我们在windows上面编程的时候喜欢暂时释放线程的运行权利,调用sleep(0)即可,那么这在rawos上是怎么实现的呢,[cpp]viewplaincopy1.RAW_U16raw_sleep(RAW_U32dly)2.{3.RAW_U16error_status;4.5.RAW_SR_ALLOC();6.7.#if(RAW_TASK_FUNCTION_CHECK>0)8.9.if(raw_int_nesting){10.11.returnRAW_NOT_CALLED_BY_ISR;12.}13.#endif14.15.RAW_CRITICAL_ENTER();16.17.if(dly){18.19./*systemislockedsotaskcannotsleepjustreturnimmediately*/本文由吉林白癜风医院http://tf463.com/收集,转载请注明出处本文由长春白癜风专科医院http://tf463.com/收集,转载请注明出处20.if(raw_sched_lock){21.RAW_CRITICAL_EXIT();22.returnRAW_SCHED_DISABLE;23.}24.25.raw_task_active->task_stat