后台调度程序
调度程序的功能是决定什么时候开始运行、什么时间或什么情况下让给其他程序运行。调度程序可以处于后台,也可以处于前台。处于后台的调度程序即为后台调度程序。如果处于后台部分,程序比较简单,但后台调度程序比前台调度程序适用范围窄。
基本信息
- 中文名
后台调度程序
- 外文名
background scheduler
- 所属学科
计算机
- 所属范围
嵌入式程序
- 优点
容易编程、与硬件的交互作用少
- 限制
所有后台任务有相同的优先级
简介
一个后台的运行任务可能由于外部中断停止运行,中断使前台任务运行。当前台任务完成后,后台任务从中断处恢复运行。如果调度程序是后台的一部分,那么在当前正在运行的后台任务完成前,调度程序都不能运行。调度程序调度后台任务运行,任务完成后,再把控制权返回给调度程序,这时调度程序检查任务队列,看队列中是否有就绪任务。如果有,首先设置计时器,然后激活运行队列中的第一个任务。如果没有,调度程序则不断循环检测计时器,一直等到有一个就绪任务运行。调度程序也可能调用一个“闲散”任务,这是一个没有其他事情做时才运行的任务。例如闲散任务可以用来检测前述程序中的stop信号,或者用来与操作台交互作用等等。采用这种调度方法时,不得不对上述程序做一些改动。
task1一id—task—create(&function1;,&data; 1,tsample 1,run—continuous)
task2一id—task—create(&function2;,&data2;,tsample2,run—continuous)
task3一id—task—create(&stop;—check,&data3;,0,deep—background)
enter--task-queue(task1--id)
enter--task--queue(task2--id)
enter--task--queue(task3--id)
上述程序中的deep—background即表示闲散任务。因为调度程序也是后台的一部分,使任务进入作业队列还没有开始运行,只有显式地应用调度程序才会使它运行。这样一旦调度程序开始,程序可能将不再返回主程序段,一直到系统结束。因此如果有一个闲散任务,调度程序必须知道闲散任务的作用和功能。因为一有空闲,闲散任务就要运行,所以采样时间表示为零。
调度程序的数据结构
任务描述子的模块结构
指向函数的指针task--function
指向结构的指针 task—data
整型量task--type
整型量task-state
浮点型(或整型) sample--time
浮点型(或整型) time—left
指向结构的指针 next-task
每次创建一个新任务,给任务描述子分配内存;当任务移出之后,释放分配的空间。任务之间由描述子内的链接指针next—task链接。task—type规定任务类型。任务状态task—state用来跟踪任务的行为。当任务创建时,并不激活;任务进入作业队列后,或者处于激活状态,或者处于不激活状态。采样时间由sample—time给出,剩余时间time--left则指出到下个任务开始运行还剩多少时间。