Skip to main content

22 输入与输出

设备控制器

CPU 并不直接和设备打交道,中间有一个设备控制器(Device Control Unit)组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。

  • 块设备将信息存储在固定大小的块中,每个块都有自己的地址。(硬盘)就是常见的块设备
  • 字符设备发送或接收的是字节流。而不用考虑任何块结构,没有办法寻址。(鼠标)

控制器的寄存器一般会有状态标志位,可以通过检测状态标志位,来确定输入或者输出操作是否完成。

  • 轮询等待,一直查直到完成。
  • 通过中断的方式,通知操作系统输入输出操作已经完成。

驱动程序

用来对接各个设备控制器的设备驱动程序。设备控制器不属于操作系统的一部分,但是设备驱动程序属于操作系统的一部分。

一个设备驱动程序初始化时,先注册一个该设备的中断处理函数,这个函数是中断处理的统一入口。在函数里可以找到设备驱动程序注册的中断处理函数 Handler,然后执行它进行中断处理。

文件系统接口

所有设备都在 /dev/ 文件夹下面创建一个特殊的设备文件。设备特殊文件也有 inode,但不关联到硬盘或任何其他存储介质上的数据,而是建立与某个设备驱动程序的连接。

  • /sys/devices 是内核对系统中所有设备的分层次的表示;
  • /sys/dev 目录下一个 char 文件夹,一个 block 文件夹,分别维护一个按字符设备和块设备的主次号码 (major:minor) 链接到真实的设备 (/sys/devices 下) 的符号链接文件;
  • /sys/block 是系统中当前所有的块设备;
  • /sys/module 有系统中所有模块的信息。

输入输出设备的层次模型