操作系统漫游(五)输入输出系统

操作系统中的I/O系统用于管理I/O设备(打印机、扫描仪等)和存储设备(磁盘驱动器、磁带机等)。


I/O系统的基本功能

  • 方便用户使用I/O设备
  • 提高CPU和I/O设备的利用率
  • 为用户在共享设备时提供方便

I/O系统对I/O设备的控制

对 I/O设备进行控制是驱动程序的功能。目前包括 4 种控制方式:

  • 采用轮询的可编程 I/O 方式
  • 采用中断的可编程 I/O 方式:适用于打印机、键盘终端等低速设备
  • 直接存储器访问方式(DMA):适用于磁盘、光盘等高速设备
  • I/O通道方式:使I/O操作的组织和运行无需CPU的干预,独立运行。

I/O系统的层次结构

I/O软件分层

通常把I/O软件组织成四个层次:

  1. 用户层I/O软件:产生I/O请求,格式化I/O,Spooling
  2. 设备独立性软件:映射、分块、保护、缓冲、分配
  3. 设备驱动程序:设置设备寄存器:检查状态
  4. 中断处理程序:中断处理

经过四个层次之后,I/O操作将交给硬件执行。

I/O系统分层

  1. 中断处理程序:直接与硬件进行交互
  2. 设备驱动程序:进程和设备控制器之间通信的程序,将上层的I/O请求转化为具体的命令和参数。一般驱动程序都是由设备制造商提供,而非OS设计者。
  3. 设备独立性软件:软件独立于具体使用的物理设备。好处是增加新设备和替换老设备时不需对I/O软件进行修改

I/O系统接口

在 I/O系统中,根据类型不同,可分为三种接口:块设备接口流设备接口网络接口

块设备接口

所谓块设备,是指数据的存储和传输都是以块为单位的设备,例如磁盘。其特点是传输速率高,能够寻址,可随机读写其中任意一块。磁盘设备的I/O常采用 DMA 方式。

块设备接口隐藏了磁盘的二维结构,将抽象的命令映射为低层的操作。

虚拟存储器也需要块设备接口。因为当发生缺页中断时,需要通过块设备接口从磁盘中调入所缺的页面。

流设备接口

流设备接口又称为字符设备接口。所谓字符设备,是指数据的存储和传输是以字符为单位的设备,例如键盘、打印机。其特点是传输速率低,不可寻址。字符设备的I/O常采用中断驱动方式。

由于字符设备不可寻址,因此只能顺序存储。通常,我们会为字符设备建立一个缓冲区(队列),字符流在缓冲区中读写。分别使用 get 和 put 操作来读和写。

大多数流设备都属于独占设备(例如打印机),因此必须采用互斥方式实现共享。流设备接口提供来 open 和 close 操作,如果被 open 表示正在被某个进程使用。

网络通信接口

通过网络通信接口,计算机可以与网络上的其他计算机通信。


I/O 设备和设备控制器

I/O设备包括:执行I/O操作的机械部分 和 执行I/O控制的电子部分。

机械部分是一般的I/O设备,而电子部分称为设备控制器适配器(adapter)

设备控制器

设备控制器的作用是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它接收CPU发来的命令,去控制I/O设备工作,使处理机从繁杂的设备控制事务中解脱出来。

设备控制器基本功能包括:

  • 接收和识别指令
  • 数据交换
  • 标识和报告设备的状态
  • 地址识别
  • 数据缓冲区
  • 差错控制

I/O通道

虽然有来设备控制器,CPU对I/O的干预已经减少了。但是外设变多的时候,CPU还是负担很重。为此,又增设了 I/O通道(I/O Channel)

I/O通道的作用是建立独立的I/O操作,使数据的传送独立于CPU,而且有关对I/O的操作都尽量独立。解放CPU。

有来I/O通道,CPU只需向通道发送一条指令,通道便开始执行通道程序。待完成来之后向CPU发送响应中断。

实际上,I/O通道是一种特殊的处理机。

在单处理机系统中,I/O通道和处理机可以实现并行操作。


假脱机(Spooling)系统

多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机。

类似地,假脱机技术(Simultaneous Peripheral Operation On-Line, SPOOLing),就是将一台 物理I/O设备 虚拟为多台 逻辑I/O设备,这样就允许多个用户共享一台物理I/O设备。

Spooling技术通过预输入和缓冲输出,将低速的I/O设备上的数据传送到高速磁盘上,把独占设备改造成了共享设备,使得多个作业同时使用设备。在Spooling中,设备与输入输出井之间的数据传输是由外围控制机实现的,而不是用户程序控制。


磁盘调度算法

为了减少磁盘寻道的时间,我们需要采用合适的磁盘调度算法。常见的磁盘调度算法包括:

  • 先来先服务(FCFS):先来先服务
  • 最短寻道时间优先(SSTF):寻道时间短的优先,但是会导致“饥饿”现象
  • 扫描算法(SCAN,电梯算法):根据磁头方向,先上再下,或先下再上
  • 循环扫描算法(CSCAN):先上到顶,然后从底开始上;或者反过来先下到底,然后从顶往下 (方向一致)
  • N步扫描
  • FSCAN

文件控制块(FCB)

FCB包括文件名、扩展名、物理位置、逻辑结构、物理结构、存取权限、建立日期、修改日期、使用信息等。

当我们使用 open 打开一个文件时,把文件的FCB调入了内存,但没有将文件内容读入内存。