内核中的种种延时同步

1.   原子操作、自旋锁、互斥体等 都是 为了保证 “防止内核全局变量的竞争”、保护内核代码的可重入性;而设立;重点在于“保护全局变量的 一致性”

2.  wait_queue_xxx (q,  condition)是 当前进程(内核态)执行时等待必须的条件而设立的。重点在于“条件”

以上 两点 在功能上是不同的。

   其中wait_queue_xxx的实现中,

   a. condition满足时直接往下走;

  b. condition不满足时,将 当前进程放入q队列, 然后将进程状态 改变(即由原来的running变为 incorruptible或者其他)。然后调用schedule()函数。这样 此进程失宠。

是不是说 condition一旦满足,那么 那个已经睡眠在q队列中的进程就会自己醒来 走向running的状态呢?

显然由上述b中机制,wait_queue以后的进程,已经没有机会接触到CPU了。也就是说condition条件与自身无关。

其它进程在 使condition满足之后,必须调用wake_up()

wake_up() has to be called after changing any variable that could change the result of the wait condition.

使得睡眠在q的进程的状态改变为running.


说白了,一个进程调用wait_queue(具体为变自己的state为interruptable,然后调用schedule)是自己睡眠;

别的进程通过wake_up使 睡眠的进程醒来。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值