简介
通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以使用,非阻塞方式的话会通过 poll 函数来不断的轮询,查看驱动设备文件是否可以使用。
1、阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式,在编写驱动的时候一定要考虑到阻塞和非阻塞。 2、这里的 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。 3、阻塞式IO(他应用程序里面还是循环read,我猜想应该是应用里read走到设备里读,然后设备里读被睡眠了,这一步就被卡住了,也就是进入了休眠状态,等数据到了,read被唤醒了,之后应用程序的read步骤就能进行下去了,就待着读到的数,重新回到了应用层)
- 当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。
- 阻塞访问最大的好处就是当设备文件不可操作的时候进程可以进入休眠态,这样可以将CPU 资源让出来。但是,当设备文件可以操作的时候就必须唤醒进程,一般在中断函数里面完成唤醒工作。
- Linux 内核提供了等待队列(wait queue)来实现阻塞进程的唤醒工作
- 对于设备驱动文件的默认读取方式就是阻塞式的,我们前面所有例程APP也都是阻塞式的。其创建如下所示:
1 int fd
|