22 输入与输出
设备控制器
CPU 并不直接和设备打交道,中间有一个设备控制器(Device Control Unit)组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示 器有视频控制器等。
- 块设备将信息存储在固定大小的块中,每个块都有自己的地址。(硬盘)就是常见的块设备
- 字符设备发送或接收的是字节流。而不用考虑任何块结构,没有办法寻址。(鼠标)
控制器的寄存器一般会有状态标志位,可以通过检测状态标志位,来确定输入或者输出操作是否完成。
- 轮询等待,一直查直到完成。
- 通过中断的方式,通知操作系统输入输出操作已经完成。
驱动程序
用来对接各个设备控制器的设备驱动程序。设备控制器不属于操作系统的一部分,但是设备驱动程序属于操作系统的一部分。
一个设备驱动程序初始化时,先注册一个该设备的中断处理函数,这个函数是中断处理的统一入口。在函数里可以找到设备驱动程序注册的中断处理函数 Handler,然后执行它进行中断处理。
文件系统接口
所有设备都在 /dev/ 文件夹下面创建一个特殊的设备文件。设备特殊文件也有 inode,但不关联到硬盘或任何其他存储介质上的数据,而是建立与某个设备驱动程序的连接。
- /sys/devices 是内核对系统中所有设备的分层次的表示;
- /sys/dev 目录下一个 char 文件夹,一个 block 文件夹,分别维护一个按字符设备和块设备的主次号码 (major:minor) 链接到真实的设备 (/sys/devices 下) 的符号链接文件;
- /sys/block 是系统中当前所有的块设备;
- /sys/module 有系统中所有模块的信息。