6 输入输出系统

6.1 I/O系统的功能、模型和接口

I/O系统的基本功能

①隐藏物理设备的细节:对设备加以适当的抽象,以隐藏掉物理设备的实现细节。

②与设备的无关性:对设备抽象化使用。

③提高处理机和I/O设备的利用率:尽可能地让处理机和I/O设备并行操作。

④对I/O设备进行控制:驱动程序的功能。(控制方式:轮询的可编程I/O方式、中断的可编程I/O方式、直接存储器访问方式、I/O通道方式)

⑤确保对设备的正确共享:独占设备(打印机、磁带机)、共享设备(磁盘)

⑥错误处理:临时性错误,重试操作;持久性错误,向上层报告。

I/O系统的层次结构

1608640547141

①用户层I/O软件:用于实现用户与I/O设备交互。

②设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护、以及设备分配与释放等。(设备无关的I/O软件)

③设备驱动程序:与硬件直接相关,用来具体实现系统对设备发出的操作指令,驱动I/O设备工作。

④中断处理程序:用于保护被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完后恢复现场,并返回到被中断的进程。

⑤硬件:I/O设备。

I/O系统中各种模块之间的层次视图

1608640577684

I/O系统接口

块设备接口

流设备接口/字符设备接口

网络通信接口

6.2 I/O设备和设备控制器

I/O设备的类型

按传输速率分类:低速设备、中速设备、高速设备

按信息交换的单位分类:块设备、字符设备

按设备的共享属性分类:独占设备、共享设备、虚拟设备

设备与控制器之间的接口

1608640658713

设备控制器

设备控制器是CPU和设备之间的一个接口,它接收从CPU发来的命令,控制I/O设备操作,实现主存和设备之间的数据传输。

控制器接受一条命令后,CPU可以转向其它工作,而设备控制器自行完成具体的I/O操作;当命令执行完毕后,控制器发出一个中断信号,以便OS重新获得CPU的控制权并检查执行结果 设备控制器是一个可编址设备,当它连接多台设备时,则应具有多个设备地址。

设备控制器的基本功能

接收和识别命令:相应的控制寄存器,存放接收的命令和参数,进行译码。

数据交换:CPU与控制器之间、控制器与I/O设备之间,数据交换。

标识和报告设备的状态:控制器记录设备的状态供CPU了解。

地址识别:控制器中配置地址译码器,识别其所控制的设备的地址。

数据缓冲区:主机速率高,I/O设备速率低,暂存数据匹配速率再进行数据传送。

差错控制:I/O设备传来的数据,设备控制器进行差错检测,若错,将差错检测码置位,并向CPU报告,CPU处理,数据作废,重新传送。

设备控制器的组成

  • 设备控制器与处理机的接口
  • 设备控制器与设备的接口
  • I/O逻辑

1608640721273

I/O通道

定义:通道是独立于CPU的专门负责数据输入/输出传输工作的处理机,对外部设备实现统一管理,代替CPU对输入/输出操作进行控制,从而使输入,输出操作可与CPU并行操作。

引入通道的目的:为了使CPU从I/O事务中解脱出来,同时为了提高CPU与设备,设备与设备之间的并行工作能力。

  • 通过执行通道程序来控制I/O操作
  • 指令类型单一
  • 与CPU共享内存

通道类型

(1)字节多路通道(Byte Multiplexor Channel)

字节多路通道以字节为单位传输信息,它可以分时地执行多个通道程序。当一个通道程序控制某台设备传送一个字节后,通道硬件就控制转去执行另一个通道程序,控制另一台设备传送信息,使所有的通道轮转一周。

主要连接以字节为单位的低速I/O设备。如打印机,终端。

以字节为单位交叉传输,当一台传送一个字节后,立即转去为另一台传送字节。

(2)数组选择通道(Block Selector Channel)

选择通道是以成组方式工作的,即每次传送一批数据,故传送速度很高。选择通道在一段时间内只能执行一个通道程序,只允许一台设备进行数据传输。

当这台设备数据传输完成后,再选择与通道连接的另一台设备,执行它的相应的通道程序。

主要连接磁盘,磁带等高速I/O设备。

易出现独占通道现象,利用率低。

(3)数组多路通道(Block Multiplexor Channel)

它结合了选择通道传送速度高和字节多路通道能进行分时并行操作的优点。它先为一台设备执行一条通道指令,然后自动转接,为另一台设备执行一条通道指令;主要连接高速设备。

这样,对于连接多台磁盘机的数组多路通道,它可以启动它们同时执行移臂定位操作,然后,按序交叉地传输一批批数据。数据多路通道实际上是对通道程序采用多道程序设计的硬件实现。

“瓶颈”问题

解决问题的方法是增加设备到主机的通路而不增加通道:即把一个设备连接到多个控制器上,一个控制器连接到多个通道上。

总线系统

ISA(Industry Standard Architecture)总线

EISA(Extended ISA)总线

VESA(Video Electronic Standard Association)总线

PCI(Peripheral Component Interface)总线

6.3 中断机构和中断处理程序

中断简介

中断:I/O设备向CPU发来中断信号,CPU暂停正执行的程序,保护现场,转而执行该I/O设备的中断处理程序,执行完后,返回断点,继续执行原程序。外部设备引起。(外中断)

陷入:CPU内部事件引起。(内中断)

中断向量表:存放中断处理程序的入口地址于中断向量表中的表项中。每种设备配以相应的中断处理程序,一个设备的中断请求规定一个中断号,一个中断号直接对应中断向量表中的一个表项。(I/O设备发中断请求信号,中断控制器确定中断号,查找中断向量表,取其中断处理程序的入口地址,转入执行该程序)

对多中断源的处理方式:屏蔽(禁止)中断、嵌套中断

中断处理程序

中断处理程序的处理过程:

1608641161787

①测定是否有未响应的中断信号

②保护被中断进程的CPU环境

③转入相应的设备处理程序

④中断处理

⑤恢复CPU的现场并退出中断

6.4 设备驱动程序

设备驱动程序概述

设备驱动程序

设备驱动程序是I/O进程与设备控制器之间的通信程序。

设备驱动程序包括与设备相关的代码,它的工作是:把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行,如设备名转化为端口地址、逻辑记录转化为物理记录、逻辑操作转化为物理操作等。

设备驱动程序的功能

  • 接收软件发来的命令和参数,将其中的抽象要求转换为与设备相关的低层操作系列。
  • 检查用户I/O请求的合法性,了解I/O设备工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式。
  • 发出I/O命令,若设备空闲,启动I/O设备,完成指定操作;若设备忙碌,将请求块挂在设备队列上等待。
  • 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
  • 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。

设备驱动程序的特点 ▲

  1. 驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通信和转换程序
  2. 驱动程序与设备控制器和I/O设备的硬件特性紧密相关, 因而对不同类型的设备应配置不同的驱动程序。
  3. 驱动程序与I/O设备所采用的I/O控制方式紧密相关。
  4. 由于驱动程序与硬件紧密相关, 因而其中的一部分必须用汇编语言书写。
  5. 驱动程序应允许可重入

设备处理方式

为每一类设备设置一个进程,专门用于执行这类设备的I/O操作。

在整个系统中设置一个I/O进程,专门用于执行系统中所有各类设备的I/O操作。

不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序(模块), 供用户进程或系统进程调用。

设备驱动程序的处理过程

  1. 将抽象要求转换为具体要求
  2. 检查I/O请求的合法性
  3. 读出和检查设备的状态
  4. 传送必要的参数
  5. 工作方式的设置
  6. 启动I/O设备

对I/O设备的控制方式 ▲

使用轮询的可编程I/O方式(程序I/O方式)

在这种方式下,输入输出指令不断循环测试状态寄存器中的忙/闲标志busy(轮询),决定主存储器和外围设备是否交换一个字符或一个字。

  • 一旦CPU启动I/O设备,便不断查询I/O设备的准备情况,终止原程序的执行,浪费CPU时间。
  • I/O准备就绪后,CPU参与数据传送工作,而不能执行原程序。
  • CPU和I/O设备串行工作,使主机不能充分发挥效率,外围设备也不能得到合理使用,整个系统效率很低。

1608642242207

使用中断的可编程I/O方式(中断驱动I/O方式)

CPU启动I/O设备后,不必查询I/O设备是否就绪,继续执行现行程序。

  • 设备控制器按照命令要求去控制指定的I/O设备,当数据准备好后,即进入数据寄存器后,控制器通过控制线向CPU发送中断信号
  • I/O操作直接由CPU控制,每传送一个字符或字,要发生一次中断,仍然消耗大量CPU时间。
  • 不必忙式查询I/O准备情况,CPU和I/O设备可实现部分并行,与程序查询的串行工作方式相比,使CPU资源得到较充分利用。

1608642302074

直接存储器访问方式(DMA方式)

利用DMA控制器的直接存储器访问方式。

如果I/O设备能直接与主存交换数据而不占用CPU,CPU的利用率还可提高,这就出现了直接存储器存取DMA方式。

特点:

  • 数据传输的基本单位是数据块,在主机与I/O设备之间每次至少传递一个数据块;
  • 所传送的数据块是从设备直接送入内存
  • 在传送一个或多个数据块的开始和结束才需CPU干预,传送过程是在控制器的控制下完成

1608642427115

DMA控制器的组成 :

1608642456568

DMA工作过程:

1608642516351

I/O通道控制方式

(1)I/O通道控制方式的引入

为获得CPU和外围设备间更高的并行工作能力,也为了让种类繁多,物理特性各异的外围设备能以标准的接口连接到系统中,计算机系统引入了自成独立体系的通道结构。

由通道管理和控制I/O操作,减少了外围设备和CPU的逻辑联系。把CPU从琐碎的I/O操作中解放出来。

I/O通道控制方式是DMA方式的发展,进一步减少CPU的干预,实现CPU、通道、I/O设备三者的并行操作。

(2)与DMA方式的区别

通道控制方式与DMA方式相类似,也是一种内存和设备直接进行数据交换的方式。与DMA方式不同的是,在通道控制方式中,数据传送方向、存放数据的内存始址及传送的数据块长度均由一个专门负责输入/输出的硬件——通道来控制。

另外,DMA方式每台设备至少需要一个DMA控制器,而通道控制方式中,一个通道可控制多台设备与内存进行数据交换。

(3)通道程序

操作码。 内存地址。 计数。 通道程序结束位P。 记录结束标志R。

6.5 与设备无关的I/O软件

与设备无关的I/O软件的概念

设备独立性/无关性

其基本含义是: 应用程序独立于具体使用的物理设备

设备无关性:应用程序中所用的设备,不局限于使用某个具体的物理设备

引入了逻辑设备和物理设备这两个概念:

  • 在应用程序中, 使用逻辑设备名称来请求使用某类设备;而系统在实际执行时, 还必须使用物理设备名称。
  • 系统须具有将逻辑设备名称转换为某物理设备名称的功能。

设备独立性的好处

在实现了设备独立性的功能后, 可带来以下两方面的好处:

  • 设备分配时的灵活性
  • 易于实现I/O重定向

与设备无关的软件

设备驱动程序的统一接口

缓冲管理

差错控制

对独立设备的分配与回收

独立于设备的逻辑数据块

设备分配

(1)设备分配中的数据结构

设备控制表DCT:

1608651286135

控制器控制表、 通道控制表和系统设备表

1608651319152

(2)设备分配时应考虑的因素

设备的固有属性:独享设备、共享设备、虚拟设备。

设备分配算法:先来先服务、优先级高者优先。

设备分配中的安全性:安全分配方式、不安全分配方式。

(3)独占设备的分配程序

基本的设备分配程序

  • 分配设备
  • 分配控制器
  • 分配通道

设备分配程序的改进

  • 增加设备的独立性
  • 考虑多通路情况

(4)逻辑设备名到物理设备名映射的实现

为了实现设备的独立性,系统必须设置一张逻辑设备表(LUT),用于将应用程序中所使用的逻辑设备名映射为物理设备名。

1608651466526

LUT的设置问题:

  • 第一种方式是在整个系统中只设置一张LUT。
  • 第二种方式是为每个用户设置一张LUT。

6.6 用户层的I/O软件

系统调用与库函数

用户层软件必须通过一组系统调用来取得操作系统服务。在现代的高级语言以及C 语言中,通常提供了与各系统调用一一对应的库函数,用户程序通过调用对应的库函数使用系统调用。

 

假脱机(SPOOLing)系统 ★

SPOOLing(假脱机)技术:多道程序环境中,用程序来模拟脱机输入时的外围控制机功能。

1608651695348

利用一道程序模拟脱机输入时的外围控制机功能,把低速I/O设备的数据传送到高速磁盘上(脱机输入),再利用另一道程序脱机输出时的外围控制机功能,把高速磁盘的数据传送到低速输出设备上(脱机输出)。

在联机情况(主机直接控制脱机输入、输出)下实现的同时外围操作的技术。

SPOOLing系统的组成

1608651623205

SPOOLing系统的特点 ▲

①提高I/O的速度。

②将独占设备改造为共享设备。

③实现虚拟设备功能。

共享打印机——SPOOLing技术的典型实例 ★

打印机属于独享设备。 用SPOOLing技术转换为共享设备,提高设备的利用效率。

用户请求打印后:

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

6.7 缓冲区管理

缓冲区:暂存储区域,I/O设备与处理机交换数据的场所。

引入缓冲技术的目的 ▲

  • 缓和CPU与I/O设备之间速度不配的矛盾。凡是数据到达和离去速度不匹配的地方均可采用缓冲技术。
  • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
  • 解决数据粒度不匹配的问题。
  • 提高CPU和I/O设备的并行性

利用缓冲寄存器实现缓冲

1608651927401

缓冲技术实现的基本思想

进程执行写操作输出数据时,向系统申请一个缓冲区,若为顺序写请求,则不断把数据填到缓冲区,直到被装满。此后,进程继续它的计算,系统将缓冲区内容写到I/O设备上。

进程执行读操作输入数据时,向系统申请一个缓冲区,系统将一个物理记录的内容读到缓冲区,根据进程要求,把当前需要的逻辑记录从缓冲区中选出并传送给进程。

  • 在输出数据时,只有在系统还来不及腾空缓冲而进程又要写数据时,它才需要等待;
  • 在输入数据时,仅当缓冲区空而进程又要从中读取数据时,它才被迫等待。

单缓冲区和双缓冲区

单缓冲区(Single Buffer):每当用户进程发出一I/O请求时,OS在内存中为其分配一缓冲区。

1608651995252

双缓冲区(Double Buffer):生产者缓冲区、消费者缓冲区。

1608652012474

双机通信时缓冲区的设置:

1608652076767

循环缓冲

循环缓冲的组成

1608652118167

循环缓冲区的使用

Getbuf过程。计算进程要使用缓冲区数据时使用。

Releasebuf过程。当计算进程把C缓冲区中数据提取完毕后,调用Releasebuf将缓冲区C释放。

进程同步

Nexti指针追赶上Nextg指针。意味着输入进程输入数据速度大于计算进程处理数据的速度。称为系统受计算限制。

Nextg指针追赶上Nexti指针。意味着输入数据的速度低于计算进程的计算速度,称为系统受I/O限制。

缓冲池(Buffer Pool)

缓冲池的组成

  • 空缓冲队列emq。
  • 输入队列inq。
  • 输出队列outq。

除了上述三种(个)队列外,还应具有四种工作缓冲区:

  • 用于收容输入数据的工作缓冲区;
  • 用于提取输入数据的工作缓冲区;
  • 用于收容输出数据的工作缓冲区;
  • 用于提取输出数据的工作缓冲区;

Getbuf过程

Procedure Getbuf(type)
   begin
      Wait(RS(type));
      Wait(MS(type));
      B(number) := Takebuf(type);
      Signal(MS(type));
    end

Putbuf过程

Procedure Putbuf(type, number)
   begin
     Wait(MS(type));
     Addbuf(type, number);
     Signal(MS(type));
     Signal(RS(type));
   end 

缓冲区的工作方式

1608652243028

 

6.8 磁盘存储器的性能和调度 ★

磁盘性能简述

数据的组织和格式

1608652268462

磁盘的类型

固定头磁盘:每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。可以并行读/写。

移动头磁盘:每一个盘面仅配有一个磁头,也被装入磁臂中。仅能以串行方式读/写。

磁盘访问时间 ★

寻道时间Ts:把磁臂(磁头)移动到指定磁道上所经历的时间。Ts=m×n+s

m与磁盘驱动器的速度有关。

n为移动的磁道数。

s是启动磁臂的时间。

旋转延迟时间Tτ:指定扇区移动到磁头下面所经历的时间。

传输时间Tt:把数据从磁盘读出或向磁盘写入数据所经历的时间。1608652362956

b是每次写入/读出字节数。

r是磁盘每秒转速。

N是一条磁道的上的字节数。

磁盘调度

目标

使磁盘的平均寻道时间最少。

磁盘调度算法 ★★★

先来先服务FCFS(First-Come, First Served)

原理:根据进程请求访问磁盘的先后次序进行调度。

1608652748458

优点:公平、简单、不会出现饥饿现象。

缺点:平均寻道时间可能较长。

最短寻道时间优先SSTF(Shortest Seek Time First)

原理:选择有距当前磁头所在磁道最近的访问磁道的进程。

1608652739465

优点:比FCFS有更好的寻道性能。

缺点:可能导致某个进程发生饥饿现象。

扫描(SCAN)算法

原理:选择与当前磁头移动方向一致且距离最近的进程。

1608652718894

优点:寻道性能较好避免出现“饥饿”现象.

循环扫描(CSCAN)算法

规定磁头单向移动。

1608652730243

N-Step-SCAN算法 ○

“磁臂粘着”现象:磁臂停留在某处不动。

将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列。而每个队列的处理是按SCAN算法,一个处理完毕再处理下一个队列。

FSCAN算法 ○

N-Step-SCAN算法的简化,只分为两个队列。

  • 当前请求I/O的进程队列:SCAN算法
  • 扫描期间请求的进程队列:FCFS