时间片轮询多任务操作系统教材_第1页
时间片轮询多任务操作系统教材_第2页
时间片轮询多任务操作系统教材_第3页
时间片轮询多任务操作系统教材_第4页
时间片轮询多任务操作系统教材_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

5.4时间片轮询多任务操作系统目录1概述2整体规划3任务控制块4内部变量初始化5创建任务6启动多任务环境longjmpInIsr()

9任务调度7时钟节拍中断8任务延时10删除任务11运行的任务难以得知其他任务状态,任务切换时机难以把握。如果一个任务死掉,势必造成整个系统死掉。协作式多任务系统任务协作式多任务系统的特点安全性复杂性协作式多任务系统中,任务切换需正在运行的任务主动让出CPU,这不仅带来一些安全隐患,而且使程序设计相当的复杂。任务调度任务调度交给操作系统,引入调度算法调度算法时间片轮询1优先级调度2带优先级调度的时间片轮询3调度算法时间片轮询1tt任务的运行时间时间片轮询系统中任务运行情况在时间片轮询操作系统中,CPU的执行时间被划分为若干时间片,然后让处于就绪状态的任务,按顺序轮流占用CPU。当时间片用完时,即使任务未执行完,系统也剥夺此任务的CPU使用权力。时间片长度Δt一般为1~10ms

优先级调度2带优先级调度的时间片轮询3任务A

任务B任务C

所有任务相同对待,分时运行。调度算法时间片轮询1优先级调度2带优先级调度的时间片轮询3+

低优先级+

中优先级+

高优先级任务A

任务B任务C

t高优先级任务先运行t高优先级任务抢占低优先级任务不同任务不同对待,优先级高任务的先运行。调度算法时间片轮询1优先级调度2带优先级调度的时间片轮询3这种调度算法情况较复杂,类型较多,自己去学习了解。任务切换时机分配给任务的时间片已到任务主动请求调度12任务在调用操作系统提供的“管理”类服务(如删除任务等)和“等待”类服务(如延时、获取信号量、等待消息等)时,会主动请求调度。操作系统采用一个周期性的中断来管理时间片,在这个中断服务函数中,判断运行的任务是否用完了时间片。中断中切换任务使用时间片轮询调度的操作系统中,会在两种下进行任务切换。目录2整体规划1概述34任务控制块内部变量初始化时间片轮询操作系统规划时间片轮询调度算法时间片轮询多任务操作系统协作式多任务系统TinyOS51V1.0TinyOS51V1.1

TinyOS51V1.1采用最简单的时间片轮询调度算法,在每个时钟节拍中断时调度,即分配给任务的时间片为一个时钟节拍。

这样,在任务控制块中不仅不需要保存时钟任务剩余的时钟节拍,而且也不必编写计算任务的剩余时间和设置任务时间片的代码。TinyOS51从V1.0到V1.1的的改变TinyOS51V1.0TinyOS51v1.1任务调度函数tnOsSched()__tnOsSched()任务延时函数无tnOsTimeDly()时钟节拍处理函数无tnOsTimeTick()TinyOS51V1.0和TinyOS51V1.1的API不同点提供操作作系统的的一种基基本服务务——延时服务务,延时时以时钟钟节拍为为单位。。在TinyOS51中,时钟钟节拍中中断由用用户实现现,在时时钟节拍拍中断处处理函数数中调用用tnOsTimeTick()。voidtask0(void){TMOD=(TMOD&0xF0)|0x01;TL0=0x00;//TH0=0x00;//初始化timer0,即TR0=1;//初始化时钟钟节拍ET0=1;//中断。TF0=0;//while(1){__GucTask0++;}}/**一个简单的的任务,无无限循环中中让*__GucTask0++。*/voidtask1(void){while(1){__GucTask0++;}}/**用户实现时时钟节拍中中断服务函函数,*并调用tnOsTimeTick()。*/voidtimer0ISR(void)__interrupt1{tnOsTimeTick();}/**1.初始化系统统*2.创建任务*3.启动系统*/voidmain(void){tnOsInit();tnOsTaskCreate(task0,__GucTaskStks[0];tnOsTaskCreate(task1,__GucTaskStk[1]);tnOsStart();}资源配置与与示例任务函数task0()和task1()时钟节拍中中断服务函函数timer0ISR()main函数main()staticidataunsignedchar__GucTaskStk[2][32];staticunsignedchar__GucTask0;staticunsignedchar__GucTask1;//分配任务堆堆栈//任务0测试变量//任务1测试变量全局变量定定义函数实现目录录3任务控制块块45内部变量初初始化创建任务12概述整体规划任务控制块块TinyOS51V1.1增加加了了延延时时服服务务功功能能,,因因此此,,在在TCB中增增加加了了一一个个记记录录时时间间的的成成员员uiTicks。#define__TN_TASK_FLG_DEL0x00//任务务被被删删除除#define__TN_TASK_FLG_RDY0x01//任务务就就绪绪#define__TN_TASK_FLG_DLY0x02//任务务延延时时structtn_os_tcb{jmp_bufjbTaskContext;//任务务上上下下文文unsignedcharucTaskStat;//任务务状状态态unsignedintuiTicks;//任务务延延时时时时间间};typedefstructtn_os_tcbTN_OS_TCB;staticdataTN_OS_TCB__GtcbTasks[TN_OS_MAX_TASKS];//任务务控控制制块块数数组组与任任务务控控制制块块相相关关代代码码::目录录4内部部变变量量初初始始化化56创建建任任务务启动动多多任任务务环环境境23整体体规规划划任务务控控制制块块tnOsInit()voidtnOsInit(void){TN_OS_TASK_HANDLEthTask;//操作作的的任任务务for(thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){__GtcbTasks[thTask].ucTaskStat=__TN_TASK_FLG_DEL;//任务务初初始始处处于于删删除除状状态态__GtcbTasks[thTask].uiTicks=0;//设置置初初值值}__GthTaskCur=0;//初始始运运行行0号任任务务}由于于TCB增加加了了一一个个uiTicks,则则在在tnOsInit()中进进行行初初始始化化。。OS初始始化化函函数数代代码码::目录录5创建建任任务务67启动动多多任任务务环环境境任务务调调度度34任务务控控制制块块内部部变变量量初初始始化化通常常,,为为了了提提高高可可移移植植性性,,采采用用一一个个宏宏或或函函数数来来编编写写实实现现开开中中断断和和关关中中断断程程序序。。由由于于TinyOS51仅适适合合80C51系列列单单片片机机,,故故直直接接使使用用““EA=0”和和““EA=1”。。创建建任任务务函函数数tnOsTaskCreate()由于于tnOsTaskCreate()要操操作作TCB,而而时时钟钟节节拍拍中中断断中中也也要要操操作作TCB,因因此此tnOsTaskCreate()中操操作作TCB的代代码码为为临临界界区区代代码码,,要要避避免免被被时时钟钟节节拍拍中中断断打打断断。。TinyOS51中采采用用开/关中中断断的方方式式解解决决此此问问题题。。TN_OS_TASK_HANDLEtnOsTaskCreate(void(*pfuncTask)(void),idataunsginedchar*pucStk){TN_OS_TASK_HANDLEthRt;for(thRt=0;thRt<TN_OS_MAX_TASKS;thRt++){EA=0;//禁止中断if(__GtcbTasks[thRt].ucTaskStat==__TN_TASK_FLG_DEL){setTaskJmp(pfuncTask,pucStk,__GtcbTasks[thRt].jbTaskContext);__GtcbTask[thRt].ucTaskStat=__TN_TASK_FLG_RDY;EA=1;//允许中断returnthRt;}EA=1;//允许中断}目录录6启动多任务环环境78任务调度时钟节拍中断断45内部变量初始始化创建任务tnOsStart()在TinyOS51V1.1中,如果不允允许中断,则则时钟节拍中中断服务程序序不会运行,,因此,在tnOsStart()中增加允许中中断的代码。。voidtnOsStart(void){EA=1;//允许中断longjmp(__GtcbTask[0].jbTaskContext);//执行0号任务}tnOsInit()中__GthTaskCur=0,即当前运行任任务为0号任务。目录录7任务调度89时钟节拍中断断longjmpInIsr()56创建任务启动多任务环环境__tnOsSched()tnOsSched()开/关中断代码__tnOsSched()TinyOS51V1.0TinyOS51V1.1任务调度函数数__tnOsSched()中也要操作TCB,因此也需要要加入开/关中断代码包包含临界区。。另外,__tnOsSched()不再提供给任任务直接调用用,仅供内部部调用,因此此添加前缀““__”。保护临界资源源目录录8时钟节拍中断断9longjmpInIsr()任务延时67启动多任务环环境任务调度10如果uiTicks不为0,则uiTicks--,即缩短延时时时间。未使使用任务状态态标志判断任任务是否处于于延时状态。。这是因为TinyOS51更高的版本具具有超时功能能,需要使用用uiTicks来判断任务是是否超时。如果uiTicks为0,则将任务设设置为就绪状状态。为了向向上兼容超时时代码,即区区分系统服务务是正常返回回还是超时返返回,未直接接将任务设置置为就绪状态态,而使用““|=”操作。时钟节拍中断断大多数操作系系统中的延时时管理和中断断服务程序中中的任务切换换功能,分别别是用两个函函数实现的,,由于TinyOS51V1.1是纯粹的时间间片轮询操作作系统,非时时钟节拍中断断的中断服务务程序不进行行任务切换操操作,因此将将二者合二为为一。for(thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){if(__GtcbTasks[thTask].uiTicks!=0){__GtcbTasks[thTask].uiTicks--;//缩短延时时间间if(__GtcbTasks[thTask].uiTicks==0){__GtcbTasks[thTask].ucTaskStat|=__TN_TASK_FLG_RDY;//设置任务就绪绪状态位}}}}延时管理1任务切换2对于80C51来说,规定::一般函数返返回使用RET指令,而中断断返回使用RETI指令。由于longjmp()函数是使用RET指令返回的,,如果在时钟钟节拍中断中中继线使用longjmp(),则任务切换换后CPU会认为中断仍仍未退出,同同级中断(包包括自身)将将被屏蔽,从从而造成整个个系统执行错错误。因此必必须将longjmp()函数改为longjmpInIsr()。时钟节拍中断断大多数操作系系统中的延时时管理和中断断服务程序中中的任务切换换功能,分别别是用两个函函数实现的,,由于TinyOS51V1.1是纯粹的时间间片轮询操作作系统,非时时钟节拍中断断的中断服务务程序不进行行任务切换操操作,因此将将二者合二为为一。for(thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){thTmp2++;if(thTmp2>=TN_OS_MAX_TASKS){thTmp2=0;}if((__GtcbTasks[thTmp2].ucTaskStat&__TN_TASK_FLG_RDY)!=0){cTmp1=setjump(__GtcbTask[__GthTaskCur].jbTaskContext);//保持上下文if(cTmep1==0){__GthTaskCur=thTmp2;longjmpInIsr(__GtcbTasks[thTmp2].jbTaskContext);//中断中切换上上下文}}}延时管理1任务切换2目录录9longjmpInIsr()任务延时删除任务78任务调度时钟节拍中断断1110中断中切换任任务在中断中切换换任务,不能能再使用longjmp(),因为中断需需要使用专用用返回指令RETI,非RET指令。charlongjmpInIsr(jmp_bufBuf)__naked{unsignedcharucSpSave;//用于保存堆栈栈指针的变量量dataunsignedchar*pucBuf=(datavoid*)0;//指向上下文信信息存储位置置的指针pucBuf=(dataunsignedchar*)jbBuf;ucSpSave=*pucBuf++;bp=*pucBuf++;*((dataunsignedchar*)((char)(ucSpSave)))=*pucBuf++;*((dataunsignedchar*)((char)(ucSpSave––1)))=*pucBuf;SP=ucSpSave;DPL=1;_asmRETI_endasm;}将DPL设置为1,使返回值为为1。因为SDCC51规定:char类型返回值保保存在DPL中。采用__naked修饰,表示此此函数是无保保护的,即编编译器不会生生成此函数的的起始和结尾尾代码。使用用者将完全控控制这个过程程,这里用于于加入RETI指令。目录录任务延时删除任务78时钟节拍中断断longjmpInIsr()1110任务延时函数数tnOsTimeDly()voiddelay(unsignedintuiDly){unsignedinti,

j;for(i=0;i<uiDly;i++){ for(j=0;j<1000;j++){ }}}CPU处于空转状态,效率太低。传统延时voidtnOsTimeDly(unsignedintuiTick){if(uiTick!=0){ EA=0; __GtcbTasks[__GthTaskCur].ucTaskStat

=__TN_TASK_FLG_DLY; __GtcbTasks[__GthTaskCur].uiTick=uiTick; EA=1;}__tnOsSched();__GtcbTasks[__GthTaskCur].ucTaskStat

=__TN_TASK_FLG_RDY;

//延时结束}任务延时切换到其他任任务运行设置延时时间间,让时钟节节拍处理函数数tnOsTimeTick()更新剩余的延延时时间。目录录删除任务任务延时78时钟节拍中断断longjmpInIsr()1011删除任务函数数tnOsTaskDel()与V1.0版本相比,TinyOS51V1.1版本在tnOsTaskDel()函数中增加了了初始化uiTicks和开/关中断代码。。voidtnOsTaskDel(TN_OS_TASK_HANDLEthTask){…….EA=0;__GtcbTasks[thTask].ucTaskStat=__TN_TASK_FLG_DEL;__GtcbTasks[thTask].uiTicks=0;EA=1;if(thTask==__GthTaskCur){__tnOsSched();}}9、静夜四四无邻,,荒居旧旧业贫。。。12月-2212月-22Saturday,December24,202210、雨中黄叶树树,灯下白头头人。。07:34:5507:34:5507:3412/24/20227:34:55AM11、以以我我独独沈沈久久,,愧愧君君相相见见频频。。。。12月月-2207:34:5507:34Dec-2224-Dec-2212、故故人人江江海海别别,,几几度度隔隔山山川川。。。。07:34:5507:34:5507:34Saturday,December24,202213、乍乍见见翻翻疑疑梦梦,,相相悲悲各各问问年年。。。。12月月-2212月月-2207:34:5507:34:55December24,202214、他乡乡生白白发,,旧国国见青青山。。。24十十二二月20227:34:55上上午07:34:5512月月-2215、比不了得得就不比,,得不到的的就不要。。。。十二月227:34上上午12月-2207:34December24,202216、行动出出成果,,工作出出财富。。。2022/12/247:34:5507:34:5524December202217、做前,,能够环环视四周周;做时时,你只只能或者者最好沿沿着以脚脚为起点点的射线线向前。。。7:34:55上午午7:34上午午07:34:5512月-229、没有失败,,只有暂时停停止成功!。。12月-2212月-22Saturday,December24,202210、很多事情情努力了未未必有结果果,但是不不努力却什什么改变也也没有。。。07:34:5507:34:5507:3412/24/20227:34:55AM11、成成功功就就是是日日复复一一日日那那一一点点点点小小小小努努力力的的积积累累。。。。12月月-2207:34:5507:34Dec-2224-Dec-2212、世世间间成成事事,,不不求求其其绝绝对对圆圆满满,,留留一一份份不不足足,,可可得得无无限限完完美美。。。。07:34:5507:34:5507:34Saturday,December24,202213、不知香香积寺,,数里入入云峰。。。12月-2212月-2207:34:5507:34:55December24,202214、意志志坚强强的人人能把把世界界放在在手中中像泥泥块一一样任任意揉揉捏。。24十十二二月20227:34:55上上午07:34:5512月月-2215、楚塞塞三湘湘接,,荆门门九派派通。。。。十二月月227:34上上午午12月月-2207:34December24,202216、少年十五五二十时,,步行夺得得胡马骑。。。2022/12/247:34:5507:34:5524December20

温馨提示

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

评论

0/150

提交评论