『现代操作系统』IO软件原理

IO软件目标

  • 设备独立性(device independence): 编写的程序能够访问任何设备而无需事先指定. 即程序的通用性
  • 统一命名(uniform naming): 一个文件或一个设备的名字应该是一个简单的字符串或数字.
  • 错误处理(error handling): 错误应该尽可能接近硬件得到处理. 处理不了再上传
  • 同步(synchronous) 和 异步(asynchronous)(即中断驱动): 大都数物理 I/O 是 异步的

IO处理方式

  • 程序控制 I/O

让 CPU 做全部 I/O工作,成为程序控制 I/O
CPU 要不断地查询设备, 这成为 pollingbusy waiting

  • 中断驱动 I/O

缺点是 中断发生在每个事件上, 同样要花一些时间,
如打印一个缓冲区的字符, 每个字符都要中断一次

  • 使用DMA

需要特殊的硬件 DMA 控制器, 每个缓冲区中断一次

IO软件层次

IO-software-1

中断处理程序

中断发生时软件需要做的

设备驱动程序

每个连接到计算机上的 I/O 设备都需要某些设备特定的代码来对其进行控制 , 注意 设备控制器是硬件上的, 驱动程序是软件上的.

IO-software-2

位置

为了访问设备的硬件(即设备控制器的寄存器), 设备驱动程序需要是系统内核的一部分.

其实也可以构造运行在用户空间的驱动程序,使用系统调用来读写设备寄存器. 这样可以使内核与驱动程序, 驱动程序之间隔离, 消除驱动程序干扰内核造成的系统崩溃.

功能

  • 接收来自其上方与设备无关的软件发出的抽象的读写请求
  • 如果需要, 驱动程序 必须对设备进行初始化,还可能对电源需求和日志事件进行管理

运行

驱动程序在执行期间动态地装在到系统
IO-software-3

IO-software-4

IO-software-5

与设备无关的I/O软件

功能

  • 缓冲

IO-software-6

  • 错误报告
  • 分配与释放专用设备
  • 提供与设备无关的块大小
  • 设备驱动程序的统一接口

用户空间的IO软件

  • C 语言中的 printf
  • 假脱机(spoolilng)

如果一个进程打开它, 然后很长时间不使用, 则其他进程都无法打印 . 另外一种方法是 创建一个 守护进程(daemon)假脱机目录. 一个进程要打印一个文件时, 首先生成要打印的整个文件, 并且放在假脱机目录, 由守护进程打印该目录下的文件, ,,守护进程是唯一允许使用打印机特殊文件的进程.

文章目录
  1. 1. IO软件目标
  2. 2. IO处理方式
  3. 3. IO软件层次
    1. 3.1. 中断处理程序
    2. 3.2. 设备驱动程序
      1. 3.2.1. 位置
      2. 3.2.2. 功能
      3. 3.2.3. 运行
    3. 3.3. 与设备无关的I/O软件
    4. 3.4. 用户空间的IO软件