当前位置:  技术问答>linux和unix

关于抢占的一个疑问

    来源: 互联网  发布时间:2017-01-31

    本文导语:  下面引用网上的一段话, ------------------------------------------ 实时和抢占,是为了减少latency  在非抢占的内核中(比如2.4),中断返回时(包括时钟中断?),如果发现CPU是在内核态,是不进行调 度的。  因此,在内...

下面引用网上的一段话,
------------------------------------------
实时和抢占,是为了减少latency 

在非抢占的内核中(比如2.4),中断返回时(包括时钟中断?),如果发现CPU是在内核态,是不进行调

度的。 
因此,在内核态中的某些代码,如果运行时间太长的话,是会增加schedule latency的。 
此时,主要依靠内核本身主动进行调度。 

对于可以抢占的内核,中断返回时,即使CPU是内核态,也可以调度,因此可以减少latency。 
此时,即使是内核态,也可以被动的调度。 

但是,即使在可以抢占的内核,如果在某个锁中的运行时间太长,也会增加schedule latency,因为锁中

是不能抢占的。 
因此,内核的很多代码,当觉得占用了较长时间,就会主动调用cond_resched()。 

也就是说,在可抢占的内核中,没有占用锁的时候,可以抢占(中断返回的时候),这是被动的调度。 
占用锁的时候,主要靠内核本身主动调度。

-----------------------------------------------------------------
我有一个问题 不清楚  就是红色字体部分
不是说了锁中不能抢占的吗!那还主动调用cond_resched()有用吗?????schedule()应该会打印出错信息啊????
疑惑啊。。。。。。。。。。



|
在锁中不能调度,是为了另一个竞争者想获得锁时产生死锁。

楼主误会这句话“内核的很多代码,当觉得占用了较长时间,就会主动调用cond_resched”了,
它并不是告诉你这么做:
spin_lock
cond_resched
spin_unlock

你可以在内核里搜一下cond_resched的用处,你会发现它都是在锁外被调用的:
spin_unlock之后,才会调用cond_resched

也可那句话可以改为:内核的很多代码,当觉得占用了较长时间,“并且现在不是在锁中”,就会主动调用cond_resched



    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 抢占式和非抢占式的
  • 请问:2.6的内核是抢占式还是非抢占式的?如何更改?
  • 中断上下文,进程上下文 ,内核抢占,用户抢占,中断
  • 关于用户抢占
  • 分时操作系统中有没有抢占式调度呢?
  • 关于用户抢占的问题
  • 关于抢占式调度
  • 有关 mutex和内核抢占的问题
  • “多级反馈调度算法属于抢占调度方式”这句话不对吗?谢谢!
  • linux内核抢占
  • 关于内核抢占的
  • 关于有自旋锁进程不能被抢占和调度
  • lkd中关于抢占的讲解,有一点没有看明白
  • 这属于内核在和service抢占CPU吗??
  • 内存屏障与抢占
  • 关于抢占式调度 iis7站长之家
  • 菜鸟问,linux的高优先级进程能无条件抢占低优先级进程吗?
  • *****SCHED_FIFO线程的无法抢占问题,我给100分,不够的话,另开贴送分 *****


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3