内核中的种种延时同步

来源:互联网 发布:免费的交友软件 编辑:程序博客网 时间:2024/06/05 03:48

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
原创粉丝点击