OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5993|回复: 4

请教一下关于操作系统任务切换优先级的的问题

[复制链接]

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
846
金钱
846
注册时间
2015-12-8
在线时间
175 小时
发表于 2022-11-7 14:17:53 | 显示全部楼层 |阅读模式
5金钱
如任务A和任务B属于同一个优先级,任务C优先级高于任务A和任务B。任务A运行需等待信号量sem,信号量sem有任务B释放。
情况一:任务A等待信号量sem时,任务B正在运行,任务B运行到一半(整个任务未结束),释放信号量,此时任务B是继续运行结束后才切换到任务A,还是先切换运行完任务A之后再来运行任务B?
情况二:任务A等待信号量sem时,任务B正在运行,任务B运行到一半(整个任务未结束),释放信号量,此时任务C优先级高,任务C开始运行,当C运行完之后,任务A和任务B谁先运行?

最佳答案

查看完整内容[请看2#楼]

等待信号量的阻塞态收到事件就会编程就绪态 任务A本来阻塞 收到B的信号就会进入就绪态 不会进入运行态 不调度BC都不会运行 发了信号继续运行B直到任务调度了 所以我的理解是(想精确需要写代码模拟测试下): 未产生调度C为啥能运行呢 C要运行肯定调度了,以下按调度了说 B释放sem,但是B任务未结束 没调度继续运行B直到调度 调度了(假如你自己不主动提前调度就等时间片轮换调度) C运行(前提C在就绪态) C运行 ...
为自己掌握新的知识感到快乐
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-7 14:17:54 | 显示全部楼层
Jundodo 发表于 2022-11-9 17:55
感谢回复,还是有些疑问请教一下。
像情况二:
1.B释放sem,但是B任务未结束,也未产生任务调度,此时C ...

等待信号量的阻塞态收到事件就会编程就绪态
任务A本来阻塞  收到B的信号就会进入就绪态 不会进入运行态 不调度BC都不会运行 发了信号继续运行B直到任务调度了
所以我的理解是(想精确需要写代码模拟测试下):
未产生调度C为啥能运行呢  C要运行肯定调度了,以下按调度了说  
B释放sem,但是B任务未结束  没调度继续运行B直到调度
调度了(假如你自己不主动提前调度就等时间片轮换调度)   C运行(前提C在就绪态)   C运行的时候 AB都是就绪态
C结束我觉得直接时间片轮换执行A
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2022-11-7 15:02:39 | 显示全部楼层
本帖最后由 nashui_sx 于 2022-11-7 15:07 编辑

情况较多理解3句话:
1.相同优先级的可运行的任务,轮流执行
2.时间片调度策略不保证同等优先级的任务之间平均分配时间,只保证同等优先级的Ready状态任务会依次进入Running状态。
3.你自己不主动调度,任务切换只能等滴答定时器切换


所以你的问题要看B发了信号量你自己调度否,C运行完其他任务A是否就绪否,B运行到一半(整个任务未结束)滴答定时器是否调度了

回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
846
金钱
846
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2022-11-9 17:55:54 | 显示全部楼层
nashui_sx 发表于 2022-11-7 15:02
情况较多理解3句话:
1.相同优先级的可运行的任务,轮流执行
2.时间片调度策略不保证同等优先级的任务之 ...

感谢回复,还是有些疑问请教一下。
像情况二:
1.B释放sem,但是B任务未结束,也未产生任务调度,此时C抢占CPU开始运行,C结束之后是先执行B,等B执行完或者产生任务调度,才会执行A的吗?
2.A是否就绪,是不是可以理解为只要等待的sem被释放了,A就已经进入就绪态,只要有任务产生调度,就可以执行了?如果A已经就绪,如1所述,C结束后是先执行B任务还是A任务呢?
为自己掌握新的知识感到快乐
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
846
金钱
846
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2022-11-10 10:41:54 | 显示全部楼层
nashui_sx 发表于 2022-11-9 18:42
等待信号量的阻塞态收到事件就会编程就绪态
任务A本来阻塞  收到B的信号就会进入就绪态 不会进入运行态 ...

OK,明白了,谢谢
为自己掌握新的知识感到快乐
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 21:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表