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

问一个P、V原语实现的问题

    来源: 互联网  发布时间:2015-07-03

    本文导语:  在《操作系统:设计与实现》一书中说:”操作系统只需在以下操作时短暂地关掉中断,这些操作包括:检测信号量修改信号量以及在需要时使进程睡眠。“     我的问题是:作为原语,上述所有操作应该包含在sti...

在《操作系统:设计与实现》一书中说:”操作系统只需在以下操作时短暂地关掉中断,这些操作包括:检测信号量修改信号量以及在需要时使进程睡眠。“
    我的问题是:作为原语,上述所有操作应该包含在sti和cli之间,这样的话P操作中睡眠和开中断之间的顺序怎么解决?如果先睡眠,那么开中断就不是不能马上跟着执行的,而是等到唤醒,但是中断没开连进程调度都不能进行,又如何唤醒呢(是不是这样我不知道,猜想的)?如果先开中断,后睡眠,那么就可能出现这种情况:开中断后进程马上被调度切换,下次调度回来时执行睡眠,这样就有了P操作的现有效果,但是这样就不是原语了吧?
    小弟学识浅薄,想不出个所以然来,盼求各位高人指点一二,跪谢。。。。。

|
你看的是什么文件,我知道的,在一个简单的类linux的实现里,P的时候,计数器减1前关中断,然后判断,如果小于0,挂入等待队列,设置状态,然后,调用一个task dispatch,在它里面开中断。

linux内核里,down是一个原子操作,汇编实现的,如计数器减一后小于0,调用的是__down_fail();__down_fail()调用的是__down()。

关于这方面,我也没仔细想过,说说你看到的实现和你的想法吧。

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












  • 相关文章推荐
  • c/c++ iis7站长之家
  • FIFO属于什么原语?
  • 操作系统P,V原语
  • “进程进入临界区时要执行开锁原语”这句话错在哪里?
  • 邮件原语:消息内容如何设定!telnet mail 25 subject:testrnto:mm@mm.comrnhello world!rn.rn报502 unimplemented (#5.5.1)


  • 站内导航:


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

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

    浙ICP备11055608号-3