字符设备的I/O模型
一个字符设备的主要功能是用来实现I/O操作,反映到应用程序中就是进行读/写等相关的操作。在对一个设备进行读写操作时,由于设备在实际的操作中响应速速各不相同,因此数据并不总是在任何时候都可用:
- 对于读操作来说,也许请求的数据还没有到达设备的缓冲区;
- 对于写操作来说,应用层传递过来的数据也许不能一下子全部放进设备的缓冲区。
此时对读写操作来说,要么放弃等待直到返回一个错误码给上层,要么让发起读写操作的进程进入等待状态直到数据可用为止。
根据不用的需求和使用场景,Linux内核支持几种不同的I/O操作模式,称为字符设备的I/O模型,该模型根据同步与异步、阻塞与非阻塞分为四大来。
- 同步阻塞I/O:I/O模型中最常见的一种操作。对于这种I/O模型,应用程序在执行一个系统调用对设备进行read/write时,这种操作会阻塞应用程序直到完成read/write操作或者返回一个错误码。在应用程序阻塞的这段时间里,程序所代表的进程不消耗CPU的时间。为了支持这种I/O操作模式,设备驱动程序需要实现file_operation中read和