操作系统3:设备管理

正文索引 [隐藏]

1. I/O 控制方式

由于 I/O 的效率和 CPU 可谓天壤之别,I/O 控制技术的目标是尽量减少 CPU 对 I/O 控制的干预,把 CPU 从 I/O 交互中节方出来

I. Polling

又称程序驱动方式,最为暴力直接,CPU 不断查询 I/O 控制器的状态,直到收到 ready 信号,CPU 浪费极大

II. 中断驱动

CPU 向 I/O 控制器中发一个启动信号,然后自己忙自己的,I/O 控制器好了之后通过中断的方式告诉 CPU,把数据传给 CPU,适合小规模数据传输

image-20191214111745188

III. DMA

CPU 把要取数据的信号传给 DMA 控制器,然后彻底不管了, DMA 负责把数据从设备运到内存,适合大规模数据传输(比如磁盘数据运输)

image-20191214111619813

IV. 通道

I/O 通道是一个比较特别的处理器,专门用于处理通道程序来传送数据

image-20191214111931677

2. 缓冲管理

缓冲区是为了进一步缓和 CPU 、I/O 设备速度不匹配的矛盾,降低中断频率而设置的

image-20191214112244614

I. 缓冲区结构

单缓冲:M、T 不能同时进行,C 可以和 M 同时进行

image-20191214112759779

双缓冲:M、T、C 可以同时进行(但要注意最后一个数据块,C 要单独处理,因为有延迟)

image-20191214112956118

循环缓冲

包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形(类似于循环队列)

  • in 指针指向可以输入数据的第一个空缓冲区
  • out指针指向可以提取数据的第一个满缓冲区

缓冲池

image-20191214113551124

数据 -> 收容工作缓冲区 hin -> 提取输入缓冲区 sin -> CPU 处理 -> 收容输出缓冲区hout -> 提取输出缓冲区 sout

II. 虚拟设备技术

SPOOLing 技术,又称假脱机技术,可使多个主机共享一台 I/O 设备,常见共享打印机

image-20191214142307409

  1. 由输出进程在输出井中为它申请一空闲缓冲区,并将要打印的数据送入其中
  2. 输出进程再为用户进程申请一张空白的用户打印请求表,将用户的打印请求填入表中,再将该表挂到打印队列上
  3. 打印机空闲时,输出进程将从请求队列队首取出一张打印请求表,根据表中的要求将要打印的数据从输出井传送到内存输出缓冲区,再由打印机进行打印

3. 设备分配

image-20191214114405156

设备独立性:应用程序独立于具体使用的物理设备,它可提高设备分配的灵活性和设备的利用率

  • 系统中有多台该类设备时,可将其中任意一台分配给请求进程,而不必局限于一台指定设备,提升资源利用率方便输入输出重定向
  • 用户程序独立于设备类型,比如输出可以有终端,也可以有打印机,方便进行输入输出重定向

为了实现设备独立性,用户程序不直接使用物理设备名、物理设备地址,而使用逻辑设备名来请求设备,映射关系存在 LUT(Logical Unit Table) 中:

image-20191214115025741

4. 设备处理

设备处理层次如下:

image-20191214143814803

  • 用户进程:进行 I/O 系统调用,数据格式化, Spooling
  • 独立于设备的系统进程:设备命名、设备保护、成块处理 、缓冲、设备分配与释放
  • 设备驱动程序:设置设备寄存器、检查设备的执行情况
  • 中断处理:唤醒设备驱动程序,中断处理
  • 硬件:物理 I/O 操作