当前位置:网站首页>UCOS任务切换过程
UCOS任务切换过程
2022-07-29 03:45:00 【钻仰弥坚】
一、UCOS任务获得处理器运行前的环境恢复过程
任务在建立的时候就进入就绪态,它们的堆栈是由软件来初始化的,使得与发生中断后的堆栈相似。在内存中每个任务都会创建一个虚拟处理器(用于备份物理处理器)。其中虚拟处理器中存储的主要信息为:程序的断点地址(PC)、任务堆栈指针(SP)、程序状态字寄存器(PSR)、通用寄存器内容,以及函数调用信息(已存在于堆栈)。这些内容通常保存在任务堆栈中。当需要运行某个任务时,就把任务的私有堆栈指针赋给处理器的堆栈指针SP,把该任务的虚拟处理器复制到实际处理器中。
处理器通过两个指针寄存器PC和SP来与任务代码和任务堆栈建立联系,PC指向的是执行的任务代码,SP则是指向任务的堆栈。
任务堆栈指针(SP)指向当前正在运行任务的任务私有栈的栈顶,用任务控制块(TCB)保存任务堆栈指针(SP)。
二、UCOS任务被剥夺处理器停止运行前的环境备份过程
答:当任务被剥夺,运行态转变成就绪态,将会进行任务切换。
当需要中止当前任务时,则把任务对应的虚拟处理器复制到内存,同时任务控制块(TCB)保存此时该任务的私有堆栈指针SP。随后再把另一个需要运行的任务的私有堆栈指针赋给处理器的堆栈指针SP,其虚拟处理器也复制到实际处理器中,由操作系统的调度器按某种规则来进行这两个复制工作。
当任务级的调度器(OSSched())确定有一个新的高优先级的任务需要执行时,就会调用OSCtxSw()。
OSCtxSw做任务切换执行步骤:
1)OSCtxSw()首先把当前任务的状态寄存器和程序计数器保存到当前任务的堆栈中。寄存器入栈的顺序和中断发生时CPU将寄存器压人堆栈的顺序一样。这里假设状态寄存器 SR 首先入栈,其余寄存器接着依次人栈。
2)OSCtxSw()将CPU堆栈指针的当前值保存到将要停止运行的任务的控制块OS_TCB中,也就是OSTCBCurPtr->StkPtr = R14。
3)OSCtxSw()将新任务的OS_TCB 中保存的该任务的堆栈指针的值载人CPU的堆栈指针寄存器,该指针的值是在上一次该任务被切换时保存的,指向的是当时的任务堆栈的栈顶。这步操作即 R14 = OSTCBHighRdyPtr->StkPtrc。
4)最后,OSCtxSw()从新的堆栈中恢复CPU寄存器的值。程序计数器和状态寄存器通常是在执行中断返回指令时弹出堆栈的。
边栏推荐
- Why don't programmers work blindly?
- AI_ Drug: VAE of molecular generation model (I)
- 力扣每日一题-第44天-205. 同构字符串
- I.MX6U-驱动开发-2-LED驱动
- Overestimated test driven development?
- (nowcoder22529c) diner (inclusion exclusion principle + permutation and combination)
- MOS管 —— 快速复苏应用笔记(贰)[参数与应用]
- 容斥原理
- Form verification of landline
- CUB_200鸟类数据集关键点可视化
猜你喜欢
小马智行进军前装量产,从自研域控制器入手?
Connect with third-party QQ login
CUB_200鸟类数据集关键点可视化
MOS tube - rapid recovery application notes (II) [parameters and applications]
Microcomputer principle and interface technology
Realize multi-level linkage through recursion
Batch production and upload sales NFT opensea eth polygon
How to understand clock cycle and formula CPU execution time = number of CPU clock cycles / dominant frequency
容斥原理
What have I learned from 200 machine learning tools?
随机推荐
(newcoder 15079) irrelevant (inclusion exclusion principle)
Set functions in kotlin
Simple understanding of CDN, SDN and QoS
Various minor problems of jupyter notebook, configuration environment, code completion, remote connection, etc
Shopify seller: EDM marketing should be combined with salesmartly to easily get the conversion rate
Simple use of eventbus
Why don't programmers work blindly?
Deep into C language (3) -- input and output stream of C
Why do many programmers hate pair programming?
(2022杭电多校三)1002-Boss Rush(状压DP+二分)
通过递归实现多级联动
Naive Bayes -- continuous data
MOS tube - rapid recovery application notes (II) [parameters and applications]
Form verification of landline
Rdkit II: use rdkit screening to screen 2D pharmacophores of chemical small molecules
Since 2019, you must have stopped using this marketing strategy
Shutter start white screen
Multi level wavelet CNN for image restoration
深入C语言(1)——操作符与表达式
Functions and comparison of repeaters, hubs, bridges, switches and routers