代码拉取完成,页面将自动刷新
任务是代码运行的一个映象。从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、内存空间等系统资源,并独立于其它任务一起并发运行。
UniProton是一个单进程支持多线程的操作系统。在UniProton中,一个任务表示一个线程。
用户在编写大型程序时,往往会包含多个模块或多个功能,这些代码之间需要一些切换、同步等动作。如果切换、同步这些功能完全由用户自己去实现,会花费很大的精力。UniProton的任务模块可以给用户提供多个任务,实现了任务之间的切换和通讯,帮助用户管理业务程序流程。这样用户可以将更多的精力投入到业务功能的实现中。
名称 | 解释说明 |
---|---|
任务优先级 | 任务优先级表示任务执行的优先顺序,用数字表示。数字越小,优先级越高。就绪列表中高优先级的任务先得到执行,同优先级任务按照就绪列表顺序执行,新创建的任务位于就绪列表尾部。多个任务可以具有相同的优先级。 |
任务原始优先级 | UniProton在处理任务优先级反转时,任务优先级为当前运行优先级,而创建时的优先级和动态调整的优先级由任务原始优先级表示。处理完毕优先级反转后,任务当前优先级会回到该原始优先级。 |
任务状态 | UniProton 系统中的每个任务都有多种运行状态,包括就绪、运行、阻塞、挂起。 |
任务PID | 任务ID作为任务的重要标识,在任务创建时通过参数返回给用户。用户可以通过任务ID对指定任务进行任务挂起、任务恢复、查询任务信息等操作。 |
任务入口函数 | 任务创建发生调度后将首次执行的函数。该函数由用户实现,在任务创建时通过任务创建结构体指定。 |
任务上下文 | 任务在运行过程中使用到的一些资源如寄存器、栈指针等,我们称为任务上下文。 |
任务栈 | 系统给每一个分配的一块内存空间,任务切换时会将本任务的上下文保存在任务栈中,以便任务恢复时从任务栈中提取任务上下文从而继续执行。 |
任务栈区间 | 系统中的一块内存空间,专门用来保存任务的任务栈。 |
任务自删除 | 当一个任务(任务A)的所有操作都已结束,下一个任务创建时系统会删除任务A占用的相关资源。详细请参见SRE_TaskDelete 的注意事项。 |
IDLE任务 | 若系统未裁剪任务模块,则系统在初始化时默认会创建一个最低优先级的IDLE任务,作为背景任务,以确保系统在没有其它运行态的任务时正常运行。 |
UniProton中的任务是抢占式调度机制,而非时间片轮转调度方式。高优先级的任务可打断低优先级任务的执行。低优先级任务必须在高优先级任务挂起或阻塞后才能得到调度。
任务调度会使系统切换到当前就绪列表中最高优先级的任务。任务调度是否一定会发生任务切换,还需要看系统整体运行状态。任务调度流程如下:
说明:
· 触发任务调度动作包括:创建任务(OS初始化中创建任务不会发生任务调度)、任务挂起、任务恢复、任务延时、解锁任务调度、信号量操作等。
· 阻塞的任务不在就绪列表中。
· 当前任务为最高优先级任务或锁任务调度时,任务调度会退出,不会进行任务切换。
· 如果在中断中发生任务调度,那么将记录下切换标志位,在用户ISR退出后进行任务切换。由于中断响应是已经将保存过当前任务上下文,所以中断退出后切换任务只需要恢复最高优先级任务上下文即可。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。