
本节路线图阻塞IO与非阻塞IO:先→先看设备结构:等待队列和→关键链路一:`read(兔兔建议先顺着路线图跑一遍,再抄命令和代码,学习体验会轻松很多。上一课我们解决的是“多个访问者同时来时怎么办”,这一课解决的是另一个同样真实的问题:如果设备现在没有数据可读,应用程序是该一直死循环查询,还是应该安静等着?Linux 给出的经典答案就是阻塞 IO:条件不满足时,先睡。条件满足时,再醒。醒来以后继续把数据搬给用户空间。这听起来像一句很朴素的话,但它后面会把三个很重要的概念串在一起:wait queue等待队列中断唤醒read()阻塞语义本节路线图(参考原理图)阶段 1:应用先读`while(1)` 里不断 `read()`,但不再忙等狂刷 CPU→阶段 2:驱动先睡眠`wait_event_interruptible()` 把进程挂进等待队列→阶段 3:中断来叫醒按键上升沿触发 IRQ,修改状态并唤醒队列→阶段 4:用户再继续读到按键状态,打印结果,重新等待下一次事件