等待队列介绍:
等待队列可以让进程进入休眠等待状态。
等待队列, 例如,在字符设备的读状态当中,如果没有可读的字符, 那么进程可以进入休眠等待状态,条件满足以后,唤醒进程。
在写操作当中,如果缓冲区满了,进程也可以进入等待状态,等有空间以后再唤醒进程进行写的操作。
休眠对进程意味着,它会被标记为一种特殊的状态,并从调度器中把运行的队列移走。
在某个时刻这个状态发生改变了以后,进程才会在任意的cpu上调度。
在让进程休眠时,我们需要注意自己的代码。。。
a:不要在原子上下文中进入休眠,也就是说,不要在进程拥有自旋锁,seqlock,RCU时进入休眠。
在禁止中断的情况下也不能进入休眠,而在拥有信号量时进入休眠是可以的,但是在其他的线程当中,如果有
现在在获取这个信号量,那么这个线程也会进入休眠(因为这个线程获取不到信号量嘛,所以也进入休眠了)
b:在唤醒进程以后我们不对进程的状态做任何的判断,因为也有可能有其他的进程在唤醒了以后把我们的资源拿走。。所以最好不要做这种判断。
c:我们必须知道,进入休眠的进程,我们的代码可能会在程序的那些地方唤醒它。
所以在ldd3里面,等待队列的意思被解释为,需要维护一个数据结构(也就是等待队列),它能够帮助我们知道休眠的进程。
也就是说,等待队列就是一个进程列表,其中包含了等待某个特定事件的所有进程。
等待队列通过等待队列头(wait queue head)来管理。
需要包含的头文件: #include<linux/w