阻塞与非阻塞简介
阻塞:资源不可以的时候,程序挂起,资源可以的时候唤醒。
非阻塞:资源不可以的时候,应用轮询查看,或者放弃。
等待队列
Linux 内核提供了等待队列(wait queue)来实现阻塞进程的唤醒工作。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/000f120dabadc9efc3747960fd2495af.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7b9f7240eb3873bed4bececa309c780a.png)
轮询处理非阻塞
如果用户应用程序以非阻塞的方式访问设备,设备驱动程序就要提供非阻塞的处理方式,也就是轮询。poll、epoll 和 select 可以用于处理轮询,应用程序通过 select、epoll 或 poll 函数来查询设备是否可以操作,如果可以操作的话就从设备读取或者向设备写入数据。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/18c1c408b42b4b9522b5d78d609517f2.png)
poll
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bf534ef158dbfb278fb4fba3d524b3eb.png)
驱动编写
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/097c0423e7527ddcaae6d38e769175d1.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/051e3bc6e39ac405358eea24b00ad739.png)
中断处理函数唤醒。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7ad228a0c111f11636b06f8a500445fc.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2247bcef272e777735447c81e3e06cc1.png)