目的
学习和理解实时操作系统
声明
习题答案是笔者基于相关书籍和网上内容自己理解的,有不对或疑问的地方大家一起沟通
五. 在uC/OS-II中任务有哪五种状态
一共有5种状态:睡眠,就绪,运行,等待,中断
(1) 睡眠
没有受任务控制块管理的任务
(2)就绪
任务已经被任务控制块管理,并且已经具备了运行的条件
(3)运行
任务拥有了CPU的使用权
(4) 中断
正在运行的任务,响应了中断事件后的状态
(5)等待
正在运行的任务,需要等待一段时间或需要等待一个事件发生时,需要把CPU的使用权交给其它任务后的状态
任务状态机如下:
值得一提的是:
1>空闲任务不允许删除
2>不允许在中断服务函数中删除任务
3>睡眠,运行,中断状态实际上并不需要额外的标记,故在源码中并没有对应的状态体现;只有就绪态和挂起两种状态,详见如下:
六.任务控制块中记录了任务的哪些信息?
任务控制块,类似一个文件句柄一样,其记录了任务的相关信息,例如任务堆栈指针,任务当前状态,任务优先级等。
七.什么是空任务控制块链表,什么是任务控制块链表?
(1)空任务控制块链表
在操作系统初始化的时候,先创建一些空的任务块,并将其串在一起;头指针:OSTCBFreeList
(2)任务控制块链表
在使用过程中会创建一些任务,为方便系统管理,会将这些任务串在一起,就形成了任务控制块链表。头指针:OSTCBList
等创建任务的时候系统就会将空任务控制块链表头指针OSTCBFreeList指向的任务控制块分配给该任务。再给任务控制块中的各成员赋值以后,就按任务控制块链表的头指针OSTCBList将其加入到任务控制块链表中。
等删除任务的时候,会将该任务控制块从任务控制块链表中移除,并将其归还给空任务控制块链表
为了加快对任务控制块的访问速度,保证任务切换时间的实时性,操作系统中定义了一个数组指针OSPrioTbl[],其基于任务的优先级存放了各个任务控制块指针;定义了一个变量OSTCBCur来存放当前任务控制块指针。
八. OSTCBTbl[] 有什么用途?
任务控制块列表数组,任务控制块的实际存放位置
九. 正在运行任务的任务控制块指针存放在哪个指针变量中?
OSTcbCur