操作系统中的任务概念
任务运行时与 处理器之间的关系
处理器通过两个指针寄存器(PC和SP)来与任务代码和任务堆栈建立联系并运行它。
运行环境包括了两部分:处理器中的运行环境和内存中的运行环境
多任务时任务与处理器之间关系的处理:
在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境)
当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理器中
当需要中止当前任务时,则把任务对应的虚拟处理器复制到内存
再把另一个需要运行的任务的虚拟处理器复制到实际处理器中
由操作系统的调度器按某种规则来进行这两个复制工作
也就是说,任务的切换是任务运行环境的切换
那么什么是虚拟的处理器:
任务控制块结构的主要成员
typedefstructos_tcb {
OS_STK *OSTCBStkPtr; //指向任务堆栈栈顶的指针
……
INT8U OSTCBStat; //任务的当前状态标志
INT8U OSTCBPrio; //任务的优先级别
……
} OS_TCB;
其实,程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指针SP
实质上系统是通过SP的切换来实现程序的切换的。
要建立一个概念:具有控制块的程序才是一个可以被系统所运行的任务。程序代码、私有堆栈、任务控制块是任务的三要件。任务控制块提供了运行环境的存储位置。
任务的基本概念
把一个大型任务分解成多个小任务,然后在计算机中通过运行这些小任务,最终达到完成大任务的目的。
在μC/OS-II中,与上述那些小任务对应的程序实体就叫做“任务”(实质上是一个线程),μC/OS-II就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。
从应用程序设计的角度来看,μC/OS-II的任务就是一个用户编写的C函数和与之相关联的一些数据结构而构成的一个实体。
如何获得待运行任务的任务控制块?
一个完整的任务应该有如下三部分:
这些都是任务方应该提供的基本信息。
(本文转自 任哲 嵌入式实时操作系统μC/OS-II讲座,仅供学习)