软件14009-4操作系统答辩_第1页
软件14009-4操作系统答辩_第2页
软件14009-4操作系统答辩_第3页
软件14009-4操作系统答辩_第4页
软件14009-4操作系统答辩_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统operating system项目制作 / 项目过程 项目答辩制作人:王玉杰任务就绪表的结构陈孝毅任务调度器实现流程图表述张天娇任务切换的过程描述纪芝含根据就绪表确定最高优先级贺靖博任务分配对任务就绪表的操作王玉杰用户任务的实现孙千傲 任务调度器实现及源代码分析 张帆任务就绪表的结构陈孝毅具体任务任务就绪表的结构任务完成情况说明:任务就绪表有一个任务登记表,用于登记系统中所有就绪状态的任务。在C/OS-II中就绪表就是一个位图,系统中的每个任务都在这个位图中占据一个二位制位,用状态1或2表示是否处于就绪状态。上表是一个最多纪录32个任务就绪的任务就绪表。实际上他就是一个类型为INT8

2、U的数组OSRdyTbl。在就绪表中,以任务优先级别的高低为顺序,为每个任务安排一个二进制,并用1和0分别表示任务处于就绪或处于非就绪状态。由于每个任务的就绪状态只占据一位,因此OSRdyTbl的一个元素可表达8个任务的就绪状态,例如上表4个元素就表达了32个任务的就绪状态。就是说每一个数组元素描述了8个任务的就绪状态,于是这8个任务就可看成一个任务组。 任务就绪表的结构 为了方便对就绪表的查找,C/OS-II又定义了一个数据类型为INT8U的变量OSRdyGrp,并使该变量的每一个为都对应OSRdyTbl的一个任务组(即数组中的一个元素),如果任务组有任务就绪,则在变量OSRdyGrp里把该

3、任务组说对应的位置为1,否之为0.变量OSRdyGrp的格式如下D7位为1表明OSRdyTb0组有任务就绪D6位为1表明OSRdyTb1组有任务就绪D5位为1表明OSRdyTb2组有任务就绪D4位为1表明OSRdyTb3组有任务就绪D3位为1表明OSRdyTb4组有任务就绪D2位为1表明OSRdyTb5组有任务就绪D1位为1表明OSRdyTb6组有任务就绪D0位为1表明OSRdyTb7组有任务就绪由于变量OSRdyGrp有8个二进制位,每位对应OSRdyTb数组的一个元素,每个元素又可以纪录8个任务的就绪状态,因此C/OS-II最多可以管理8*8=64个任务。任务就绪表的结构如何根据任务的优先

4、级别来找任务在就绪表的位置呢?由于优先级是一个单字节的数字,而且最大值不会超过62,即二进制00111111。因此,可以用高三位(D5 D4 D3) 来事明变量OSRdyGrp的具体数据位,并用来确定就绪表数组元素的下标;用低3为(D2 D1 D0)来指明该数组元素素具为,用途来表示如下图:对任务就绪表的操作王玉杰具体任务对任务就绪表的操作系统对于就绪表主要有三个操作:登记,注销和从就绪表的就绪任务中得知具有最高优先级的标识。系统对于就绪表主要有三个操作:登记,注销和从就绪表的就绪任务中得知具有最高优先级的标识。1.1. 登记登记所谓的登记是指当某个任务处于就绪状态时,系统将该任务登记在任务表

5、中,即在就绪表中将该任务的对应位置1.在程序中,可用类似于下面的代码吧优先级为prio的任务置为就绪状态OSRdyGrp |= OSMapTblprio3;OSRdyTblprio3 |= OSmapTblprio&0 x07;其中OSMapTbl 时 uc/os -II 为加快运算速度定义的一个数组,他的各元素值为:OSMapTbl0=00000001BOSMapTbl1=00000010BOSMapTbl2=00000100BOSMapTbl3=00001000BOSMapTbl4=00010000BOSMapTbl5=00100000BOSMapTbl6=01000000BOSMapTb

6、l7=10000000B2.2.注销注销所谓的注销指的是任务需要脱离就绪状态时,系统在就绪表中将该任务的对应位置0。如果要使一个优先级别为prio的任务脱离就绪状态,则可使用如下代码if(OSRdyTblprio3&=-OSMapTblprio&0 x07)=0)OSRdyGrp&=-OsMapTblPrio3;3 3最高优先级就绪任务查找最高优先级就绪任务查找根据就绪表确定最高优先级贺靖博具体任务根据就绪表确定最高优先级该代码执行后,得到的是最高优先级就绪任务的优先级别(即任务的标识) 其中OSUn-MapTbl同样是UC/OS-II为提高查找速度定义的一个数组, 它共有256各元素,定义如

7、下:INT8U const OSUnMapTbl=0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,05,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,06,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,05,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,07,0,1,0,2,0,1,0,3,0,1,0,2,0

8、,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,05,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,06,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,05,0,1,0,2,0,1,0,3,0,1,0,2,0,1,04,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0OSRdyGrp和OSRdyTbl均为INT8U的类型,每个数据均为8bit,每一个bit均可独立设置,故存在各个位均已设置的情况,从而需要考虑的最多情况为2

9、8=256种,如上表所示。任务调度器实现流程图表述张天娇具体任务任务调度器实现流程图表述具体任务 任务调度器实现及源代码分析 张帆 任务调度器实现及源代码分析任务调度的实质其实就是当前执行任务的指针的变换,但是围绕着该指针的变换需要进行场景还原.调度源码如下.void OSSched (void)#if OS_CRITICAL_METHOD = 3OS_CPU_SR cpu_sr;#endif INT8U y; OS_ENTER_CRITICAL();/ 中断开放 If (OSLockNesting | OSIntNesting) = 0) / 检查是否中断调用和允许任务调用(调度器上锁) y

10、 = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U) (y 50)x=0;y+=2;用户任务的实现PC_DispStr(x,y,pdata,DISP_BGND_BLACK+DISP_FGND_YELLOW); /字符显示位置x += 1;/如果按下Esc键则退出uCOS_IIif (PC_GetKey(&key) = TRUE) /* See if key has been pressed */if (key = 0 x1B) /* Yes, see if its theESCAPE key */PC_DOSReturn(); /* Return to DOS */OSTimeDlyHMSM(0, 0, 3, 0); /等待3s/*Youtask*/ INT8U time=0;void YouTask(void *pdata)#if OS_CRITICAL_METHOD=3OS_CPU_SR cpu_sr;#e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论