[学习资料]

抢占式调度是如何工作的

[复制链接]
1588|71
手机看帖
扫描二维码
随时随地手机跟帖
forgot|  楼主 | 2024-4-12 09:29 | 显示全部楼层 |阅读模式
1. 系统初始化,然后开启任务调度器。此时执行的最高优先级的任务Task1Task1会一直运行直到遇到系统阻塞式的API函数,比如延迟,事件标志等待,信号量等待,Task1任务会被挂起,也就是释放CPU的执行权,让低优先级的任务得到执行。
2. FreeRTOS操作系统继续执行任务就绪列表中下一个最高优先级的任务Task2Task2执行过程中有两种情况:
a) Task1由于延迟时间到,接收到信号量消息等方面的原因,使得Task1从挂起状态恢复到就绪态,在抢占式调度器的作用下,Task2的执行会被Task1抢占。
b) Task2会一直运行直到遇到系统阻塞式的API函数,比如延迟,事件标志等待,信号量等待,Task2任务会被挂起,继而执行就绪列表中下一个最高优先级的任务。
3. 如果用户创建了多个任务并且采用抢占式调度器的话,基本都是按照上面两条来执行。根据抢占式调度器,当前的任务要么被高优先级任务抢占,要么通过调用阻塞式API来释放CPU使用权让低优先级任务执行,没有用户任务执行时就执行空闲任务。

使用特权

评论回复
评论
tpgf 2024-6-4 12:21 回复TA
非常不错的介绍 
xinpian101| | 2024-4-13 15:52 | 显示全部楼层
优先级高的可以抢占CPU

使用特权

评论回复
g0d5xs| | 2024-4-24 17:30 | 显示全部楼层
抢占式调度是一种操作系统调度策略,它允许高优先级的任务在任何时刻抢占低优先级的任务,以确保高优先级任务的及时执行

使用特权

评论回复
zhizia4f| | 2024-4-24 18:36 | 显示全部楼层
每个任务都被分配了一个优先级,通常用数字表示,数字越小表示优先级越高

使用特权

评论回复
p0gon9y| | 2024-4-24 20:49 | 显示全部楼层
当一个高优先级的任务需要执行时,它可以通过触发中断来抢占当前正在执行的低优先级任务

使用特权

评论回复
suw12q| | 2024-4-24 21:55 | 显示全部楼层
中断处理程序会暂停当前任务的执行,并保存当前任务的上下文,然后切换到高优先级任务的执行

使用特权

评论回复
lamanius| | 2024-4-24 22:57 | 显示全部楼层
当一个任务被抢占时,操作系统会进行上下文切换,将当前任务的状态保存起来,包括寄存器的值、程序计数器等

使用特权

评论回复
kaif2n9j| | 2024-4-25 07:24 | 显示全部楼层
操作系统会加载高优先级任务的上下文,并将控制权转移到高优先级任务上。

使用特权

评论回复
ex7s4| | 2024-4-25 08:34 | 显示全部楼层
为了避免某个任务长时间占用CPU,抢占式调度通常会引入时间片的概念

使用特权

评论回复
tax2r6c| | 2024-4-25 10:03 | 显示全部楼层
每个任务被分配一个时间片,当时间片用完时,操作系统会强制进行上下文切换,将CPU控制权转移到下一个任务上

使用特权

评论回复
liu96jp| | 2024-4-25 11:05 | 显示全部楼层
在抢占式调度中,存在一个问题称为优先级反转。当一个低优先级任务持有某个共享资源时,一个高优先级任务需要访问该资源时,低优先级任务会阻塞高优先级任务的执行,导致高优先级任务无法及时执行。为了解决这个问题,可以使用优先级继承或者优先级翻转等技术

使用特权

评论回复
LEDyyds| | 2024-4-25 13:30 | 显示全部楼层
是不是类似于中断的抢断

使用特权

评论回复
heisexingqisi| | 2024-4-25 20:17 | 显示全部楼层
根据任务的优先级抢占吧。类似中断。

使用特权

评论回复
小明的同学| | 2024-4-29 21:00 | 显示全部楼层
用OS的项目很多吗,我还没用过。

使用特权

评论回复
wangdezhi| | 2024-5-3 16:55 | 显示全部楼层
单片机中的抢占式调度是一种任务调度策略,它允许高优先级的任务打断低优先级任务的执行,从而确保实时系统的响应性和时效性。在抢占式调度中,一旦一个高优先级的任务变为就绪态,即准备执行的状态,它会立即抢占当前正在执行的低优先级任务的处理器使用权。

使用特权

评论回复
beacherblack| | 2024-5-3 17:50 | 显示全部楼层
当一个更高优先级的任务变为可运行状态时,RTOS将执行一个上下文切换。
上下文切换过程中,当前任务的执行状态(CPU寄存器的值等)被保存到内存中(任务的上下文)。
随后,RTOS会选择另一个就绪状态的任务开始执行,并从内存中恢复它的上下文。
新的任务开始执行,直到被一个更高优先级的任务打断,或者它自己执行完毕。

使用特权

评论回复
caigang13| | 2024-5-4 08:36 | 显示全部楼层
这个和嵌入式操作系统原理有关系,可以看看一款RTOS的源码更好理解。

使用特权

评论回复
jtracy3| | 2024-5-4 11:25 | 显示全部楼层
这种调度方式的优点在于它能够保证高优先级任务的及时执行,满足实时系统的需求。

使用特权

评论回复
maudlu| | 2024-5-4 12:06 | 显示全部楼层
调度器负责根据任务的优先级来分配CPU资源。当一个新任务到达或者当前正在执行的任务的优先级发生变化时,调度器会重新评估任务的执行顺序。

使用特权

评论回复
elsaflower| | 2024-5-4 12:54 | 显示全部楼层
RTOS包含一个调度器,它负责决定哪个任务应该运行。调度器会不断检查所有就绪的任务,并选择具有最高优先级的任务来运行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1402

主题

11400

帖子

51

粉丝