news 2026/5/2 5:54:48

22、并行任务与调度详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
22、并行任务与调度详解

并行任务与调度详解

1. 任务创建

当系统运行时,除了正在运行的任务,其他所有任务都处于等待状态。这意味着完整的栈帧会被保存到栈底,栈指针则存储在控制块中,供调度器恢复每个进程时使用。

新创建的任务会在上下文切换过程中首次唤醒。此时,任务应保留其 CPU 寄存器的先前状态,但显然新任务没有这样的状态。在创建栈时,会将一个伪造的栈帧压入栈的末尾,这样当任务恢复时,存储的值会被复制到系统寄存器中,任务就能从其入口点继续执行。

UBTL@DSFBUF函数依赖于栈初始化函数UBTL@TUBDL@JOJU,该函数会为系统寄存器压入初始值以恢复任务,并将存储的栈指针移动到额外帧的开头,该额外帧可以不进行初始化。为了方便访问栈帧中存储的寄存器,我们声明了TUBDL@GSBNF结构和FYUSB@GSBNF结构:

TUSVDU TUBDL@GSBNF { VJOU32@U S0, S1, S2, S3, S12, LR, PC, xPSR; }; TUSVDU FYUSB@GSBNF { VJOU32@U S4, S5, S6, S7, S8, S9, S10, S11; };

以下是栈初始化函数的代码:

TUBUJD WPJE UBTL@TUBDL@JOJU(TUSVDU UBTL@CMPDL *U) { TUSVDU TUBDL@GSBNF *UG;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!