linux 区别 挂起 阻塞_阻塞和死循环的区别

关于各种任务状态的实质:

1.挂起:将任务挂起的实质就是1)将当前任务控制块的状态标志改为挂起状态2)将任务就绪表中的对应位置0

3)如果是事件类型,则还会将任务加入到当前的事件等待任务列表中(和就绪表一样的位图)。

4)执行任务调度,让出cpu使用权。这里需要注意的是,任务挂起后任务不是处于占用cpu的状态,不占用CPU资源。以ucos处理为例,如果挂起的是自身任务,比如OSTaskSuspend()挂起自身,那么ucos会执行一次任务调度,因为自身就绪表位置被取消,所以无论何时cpu都不会分配给自身挂起的任务,直到自身任务变为就绪态,任务调度才可能轮到自己。这个在ucos实现挂起的接口OSMBoxPend(),OSQPend(),OSSemPend(),OSTaskSuspend(),OSTimeDly()源码都能体现,挂起自身的任务必然会伴随着下面的任务调度,让出已阻塞的任务,而OSQPend()因可以挂起其他任务,因此当挂起其他任务时不需任务调度。//不要以为阻塞状态下任务还会占用cpu,这个概念无论ucos还是linux是一致的

这里我们也体会到了阻塞和死循环的的区别了:阻塞只在多任务操作系统下能体现,阻塞状态的任务是不会占用cpu的,而死循环这种类似while(1)或者while(条件)&&条件一直不满足的下至少在任务调度之前是一直占有cpu,cpu的占用率达到100%。(时间片轮转比如linux还好些等待调度其他任务还能运行些时间,ucos这种基于优先级的如果当前任务又是最高级就完全在这个任务上了)

2.就绪:将任务改为就绪状态的实质就是将对应任务就绪表对应位置1并将任务控制块状态标志改为就绪状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值