OpenEdv-开源电子网

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

任务从就绪状态进入运行状态需不需要在就绪表中删除该任务的就绪标志?

[复制链接]

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-14
在线时间
0 小时
发表于 2014-1-8 20:56:49 | 显示全部楼层 |阅读模式
任务从就绪状态进入运行状态需不需要在就绪表中删除该任务的就绪标志?我在任哲的书上找不到答案。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-1-9 00:18:13 | 显示全部楼层
看看邵贝贝的书本,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-14
在线时间
0 小时
 楼主| 发表于 2014-1-9 09:06:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
邵贝贝的书有言:“在任一给定的时刻,任务的状态一定是在这五种状态之一。”,而就绪表用于存放任务就绪标志,那么处于就绪状态的任务转为运行状态之后,便不处于就绪状态,就要在就绪表中删除其就绪标志。
但是邵贝贝的书又有言:“。。。如果不是在中断服务子程序调用OSSched(),并且任务调度是允许的,即没有上锁,则任务调度函数将找出那个进入就绪态且优先级最高的任务[L3.8(2)],进入就绪态的任务在就绪任务表中有相应的位置位。一旦找到那个优先级最高的任务,OSSched()检验这个优先级最高的任务是不是当前正在运行的任务,以此来避免不必要的任务调度[L3.8(3)]。。。”,这句话是否意味:运行状态的任务的就绪标志依然在就绪表中为1?
这两处不是矛盾吗?
回复 支持 反对

使用道具 举报

3

主题

6

帖子

1

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2013-12-12
在线时间
0 小时
发表于 2014-1-9 15:35:57 | 显示全部楼层
参考邵老师的书P145  L5.1(2)  。任务进入运行态后可以调用OSTimeDly把自己从就绪表中移除。

可见任务从就绪态进入运行态后,就绪标志不会被清除

举个栗子:
如果一个处于运行态的任务被中断打断,该中断没有使更高优先级的任务进入就绪态。中断结束时进行任务切换,查找就绪表。如果该任务的就绪标志位被清除了,那么就会切换到优先级比它低的就绪态任务了,而不是该任务本身



不学&无术
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 22:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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