操作系统任务管理与同步机制解析
1. 空闲任务
当调度器被调用时,如果没有处于就绪状态的任务,就会执行空闲任务。在所有操作系统中,空闲任务看起来都是一样的,它只是一个什么都不做且永远不会阻塞的无限循环。空闲任务对应用程序开发者是完全隐藏的,但有时操作系统会为其分配有效的任务 ID 和优先级。空闲任务(在不运行时)始终被视为处于就绪状态,由于其优先级较低,它可能位于就绪列表的尾部。为了与空闲任务区分开来,其他任务有时被称为用户任务。
2. 任务上下文
调度器会维护每个任务的状态信息,这些信息被称为任务上下文,其作用类似于书签。可以想象多个读者阅读同一本书,每个读者都有自己的书签,书签的主人要能识别它(比如上面写着他的名字),并且书签要能指示他上次放下书时停止阅读的位置,这就是读者的上下文。
任务的上下文记录了在另一个任务接管处理器之前处理器的状态,通常包括要执行的下一条指令的指针(指令指针)、当前栈顶的地址(栈指针)以及处理器的标志和通用寄存器的内容。为了组织任务及其上下文,操作系统会维护每个任务的一些信息。用 C 语言编写的操作系统通常将这些信息保存在一个称为任务控制块的数据结构中。任务控制块包含指向任务上下文的指针、任务的当前状态、任务优先级、任务入口点函数以及任何特定于任务的数据(如参数和任务标识)。
3. 任务优先级
在系统中设置任务的优先级非常重要,需要确保低优先级任务也能像高优先级任务一样完成工作,否则可能会出现任务饥饿的情况,即低优先级任务根本无法执行任何工作。系统中任务饥饿可能由以下几个原因导致:
- 处理器过载 :高优先级任务独占处理器,始终处于运行
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



