• 1.摘要
  • 2.基本信息
  • 3.简介
  • 4.调度程序的数据结构
  • 5.调度程序
  • 6.优点

后台调度程序

调度程序的功能是决定什么时候开始运行、什么时间或什么情况下让给其他程序运行。调度程序可以处于后台,也可以处于前台。处于后台的调度程序即为后台调度程序。如果处于后台部分,程序比较简单,但后台调度程序比前台调度程序适用范围窄。

基本信息

  • 中文名

    后台调度程序

  • 外文名

    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则指出到下个任务开始运行还剩多少时间。