欢迎来到天天文库
浏览记录
ID:51572223
大小:998.50 KB
页数:31页
时间:2020-03-23
《时间片轮询多任务操作系统教材.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、5.4时间片轮询多任务操作系统目录1概述2整体规划3任务控制块4内部变量初始化5创建任务6启动多任务环境longjmpInIsr()9任务调度7时钟节拍中断8任务延时10删除任务11运行的任务难以得知其他任务状态,任务切换时机难以把握。如果一个任务死掉,势必造成整个系统死掉。协作式多任务系统任务协作式多任务系统的特点安全性复杂性协作式多任务系统中,任务切换需正在运行的任务主动让出CPU,这不仅带来一些安全隐患,而且使程序设计相当的复杂。任务调度任务调度交给操作系统,引入调度算法调度算法时间片轮询1优先级调度
2、2带优先级调度的时间片轮询3调度算法时间片轮询1tt任务的运行时间时间片轮询系统中任务运行情况在时间片轮询操作系统中,CPU的执行时间被划分为若干时间片,然后让处于就绪状态的任务,按顺序轮流占用CPU。当时间片用完时,即使任务未执行完,系统也剥夺此任务的CPU使用权力。时间片长度Δt一般为1~10ms优先级调度2带优先级调度的时间片轮询3任务A任务B任务C所有任务相同对待,分时运行。调度算法时间片轮询1优先级调度2带优先级调度的时间片轮询3+低优先级+中优先级+高优先级任务A任务B任务Ct高优先级任务先运行
3、t高优先级任务抢占低优先级任务不同任务不同对待,优先级高任务的先运行。调度算法时间片轮询1优先级调度2带优先级调度的时间片轮询3这种调度算法情况较复杂,类型较多,自己去学习了解。任务切换时机分配给任务的时间片已到任务主动请求调度12任务在调用操作系统提供的“管理”类服务(如删除任务等)和“等待”类服务(如延时、获取信号量、等待消息等)时,会主动请求调度。操作系统采用一个周期性的中断来管理时间片,在这个中断服务函数中,判断运行的任务是否用完了时间片。中断中切换任务使用时间片轮询调度的操作系统中,会在两种下进行
4、任务切换。目录2整体规划1概述34任务控制块内部变量初始化时间片轮询操作系统规划时间片轮询调度算法时间片轮询多任务操作系统协作式多任务系统TinyOS51V1.0TinyOS51V1.1TinyOS51V1.1采用最简单的时间片轮询调度算法,在每个时钟节拍中断时调度,即分配给任务的时间片为一个时钟节拍。这样,在任务控制块中不仅不需要保存时钟任务剩余的时钟节拍,而且也不必编写计算任务的剩余时间和设置任务时间片的代码。TinyOS51从V1.0到V1.1的改变TinyOS51V1.0TinyOS51v1.1任务
5、调度函数tnOsSched()__tnOsSched()任务延时函数无tnOsTimeDly()时钟节拍处理函数无tnOsTimeTick()TinyOS51V1.0和TinyOS51V1.1的API不同点提供操作系统的一种基本服务——延时服务,延时以时钟节拍为单位。在TinyOS51中,时钟节拍中断由用户实现,在时钟节拍中断处理函数中调用tnOsTimeTick()。voidtask0(void){TMOD=(TMOD&0xF0)
6、0x01;TL0=0x00;//TH0=0x00;//初始化timer0,
7、即TR0=1;//初始化时钟节拍ET0=1;//中断。TF0=0;//while(1){__GucTask0++;}}/**一个简单的任务,无限循环中让*__GucTask0++。*/voidtask1(void){while(1){__GucTask0++;}}/**用户实现时钟节拍中断服务函数,*并调用tnOsTimeTick()。*/voidtimer0ISR(void)__interrupt1{tnOsTimeTick();}/**1.初始化系统*2.创建任务*3.启动系统*/voidmain(vo
8、id){tnOsInit();tnOsTaskCreate(task0,__GucTaskStks[0];tnOsTaskCreate(task1,__GucTaskStk[1]);tnOsStart();}资源配置与示例任务函数task0()和task1()时钟节拍中断服务函数timer0ISR()main函数main()staticidataunsignedchar__GucTaskStk[2][32];staticunsignedchar__GucTask0;staticunsignedchar__G
9、ucTask1;//分配任务堆栈//任务0测试变量//任务1测试变量全局变量定义函数实现目录3任务控制块45内部变量初始化创建任务12概述整体规划任务控制块TinyOS51V1.1增加了延时服务功能,因此,在TCB中增加了一个记录时间的成员uiTicks。#define__TN_TASK_FLG_DEL0x00//任务被删除#define__TN_TASK_FLG_RDY0x01//任务就绪#define__TN
此文档下载收益归作者所有