目录
1、I/O系统的功能、模型和接口
(1)I/O系统的基本功能
1.1 - 隐藏物理设备的细节
1.2 - 与设备的无关性
1.3 - 提高处理机和I/O设备的利用率
1.4 - 对 I/O 设备进行控制
1.5 - 确保对设备的正确共享
1.6 - 错误处理
(2)I/O系统的层次结构和模型
2.1 - I/O 软件的层次结构
2.2 - I/O 系统中各种模块之间的层次视图
(3)I/O系统接口
3.1 - 块设备接口
3.2 - 流设备接口
2.3 - 网络通信接口
2、I/O 设备和设备控制器
(1)I/O 设备
1.1 - I/O 设备类型
1.2 - 设备与控制器之间的接口
(2)设备控制器
2.1 - 设备控制器的基本功能
2.2 - 设备控制器的组成
(3)内存映像 I/O
(4)I/O 通道
I/O 系统管理的主要对象是 I/O 设备和相应的设备控制器。其最主要的任务是,完成用户提出的 I/O 请求,提高 I/O 速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。
1、I/O系统的功能、模型和接口
(1)I/O系统的基本功能
1.1 - 隐藏物理设备的细节
I/O 设备控制器是一种硬件设备,用来对各类型的 I/O 设备进行控制,其中包含有若干个用于存放控制命令的寄存器和存放参数的寄存器。用户通过这些命令和参数,可以控制外部设备执行所要求的操作。
对于不同的设备,需要有不同的命令和参数。例如,在对磁盘进行操作时,不仅要给出本次是读还是写的命令,还需给出源或目标数据的位置,包括磁盘的盘面号、磁道号和扇区号。由此可见,如果要求程序员或用户编写直接面向这些设备的程序,是极端困难的。因此,I/O 系统必须通过对设备加以适当的抽象,以隐藏掉物理设备的实现细节,仅向上层进程提供少量的、抽象的读/写命令,如 read、write 等。//让设备易用
1.2 - 与设备的无关性
与设备的无关性是是在隐藏物理设备细节的基础上实现的。
一方面,用户不仅可以使用抽象的 I/O 命令,还可使用抽象的逻辑设备名来使用设备,例如,当用户要输出打印时,他只须提供读(或写)的命令(提出对 I/O 的要求),和提供抽象的逻辑设备名如 /dev/printer,而不必指明是哪一台打印机。
另一方面,也可以有效地提高 OS 的可移植性和易适应性,对于 OS 本身而言,应允许在不需要将整个操作系统进行重新编译的情况下,增添新的设备驱动程序,以方便新的 I/O 设备的安装。如 Windows 中,系统可以为新 I/O 设备自动安装和寻找驱动程序,从而做到即插即用。
1.3 - 提高处理机和I/O设备的利用率
I/O 系统要尽可能地让处理机和 I/O 设备并行操作,以提高它们的利用率。
- 一方面,要求处理机能快速响应用户的 I/O 请求,使 I/O 设备尽快地运行起来;
- 另一方面,也应尽量减少在每个 IO 设备运行时处理机的干预时间。
1.4 - 对 I/O 设备进行控制
对 I/O 设备进行控制是驱动程序的功能。目前对 I/O 设备有四种控制方式:
- 采用轮询的可编程 I/O 方式
- 采用中断的可编程 I/O 方式
- 直接存储器访问方式
- I/O 通道方式。
具体应采用何种控制方式,与 I/O 设备的传输速率、传输的数据单位等因素有关。//比如传输的数据是字节还是数据块等
1.5 - 确保对设备的正确共享
从设备的共享属性上,可将系统中的设备分为如下两类:
- 独占设备,进程应互斥地访问这类设备,即系统一旦把这类设备分配给了某进程后,便由该进程独占,直至用完释放。典型的独占设备有打印机、磁带机等。系统在对独占设备进行分配时,还应考虑到分配的安全性。
- 共享设备,是指在一段时间内允许多个进程同时访问的设备。典型的共享设备是磁盘,当有多个进程需对磁盘执行读、写操作时,可以交叉进行,不会影响到读、写的正确性。
1.6 - 错误处理
大多数的设备都包括了较多的机械和电气部分,运行时容易出现错误和故障。从处理的角度,可将错误分为临时性错误和持久性错误。
对于临时性错误,可通过重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告。例如,在磁盘传输过程中发生错误,系统并不认为磁盘已发生了故障,而是可以重新再传,一直要重传多次后,若仍有错,才认为磁盘发生了故障。
由于多数错误是与设备紧密相关的,因此对于错误的处理,应该尽可能在接近硬件的层面上进行,即在低层软件能够解决的错误就不向上层报告,因此高层也就不能感知;只有低层软件解决不了的错误才向上层报告,请求高层软件解决。//错误解决的思路和指导思想,软件也适用,错误尽可能的在底层解决
总结:
- 第 1、2 方面的功能是为了方便用户使用 I/O 设备
- 第 3、4 方面的功能是用于提高 CPU 和 I/O 设备的利用率
- 第 5、6 方面的功能是为用户在共享设备时提供方便,以保证系统能有条不紊的运行,当系统发生错误时能及时发现错误,甚至于能自动修正错误。
(2)I/O系统的层次结构和模型
I/O 软件涉及的面很宽,向下与硬件有密切关系,向上又与文件系统、虚拟存储器系统和用户直接交互,它们都需要 I/O 系统来实现 I/O 操作。为使十分复杂的 I/O 软件能具有清晰的结构、更好的可移植性和易适应性,目前已普遍采用层次式结构的 I/O 系统。这是将系统中的设备管理模块分为若干个层次,每一层都是利用其下层提供的服务,完成输入输出功能中的某些子功能,并屏蔽这些功能实现的细节,向高层提供服务。//计算机网络的指导思想也是层次结构,就面向对象来说,这种做法叫做封装
2.1 - I/O 软件的层次结构
通常把 I/O 软件组织成四个层次,如下图所示,各层次及其功能如下,图中的箭头表示 I/O 的控制流://分层是解决复杂问题的一种指导思想:由繁到简、由易到难
- 用户层 I/O 软件,实现与用户交互的接口,用户可直接调用该层所提供的、与 I/O 操作有关的库函数对设备进行操作。
- 设备独立性软件,用于实现用户程序与设备驱动器的统一接口、设备命名、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
- 设备驱动程序,与硬件直接相关,用于具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。
- 中断处理程序,用于保存被中断进程的 CPU 环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断的进程。//计算机组成里有详细介绍
2.2 - I/O 系统中各种模块之间的层次视图
《1》I/O 系统的上、下接口
I/O 系统接口:它是 I/O 系统与上层系统之间的接口,向上层提供对设备进行操作的抽象 I/O 命令,以方便高层对设备的使用。有不少 OS 在用户层提供了与 I/O 操作有关的库函数,供用户使用。在上层系统中有文件系统、虚拟存储器系统以及用户进程等。//操作设备的入口
软件/硬件(RW/HW)接口:软件和硬件之间的接口,由于设备种类繁多,该接口相当复杂。
下边这个图,清晰的展示的 I/O 系统中各种模块之间的层次结构://不复杂,好好看
《2》I/O 系统的分层
与 I/O 软件组织的层次结构相对应,I/O 系统本身也可分为如下三个层次:
- 中断处理程序。它处于 I/O 系统的底层,直接与硬件进行交互。
- 设备驱动程序。它是进程和设备控制器之间的通信程序。其主要功能是,将上层发来的抽象 I/O 请求转换为对 I/O 设备的具体命和参数,并把它装入到设备控制器中的命令和参数寄存器中,或者相反。由于设备之间的差异很大,每类设备的驱动程序都不相同,故必须由设备制造厂商提供,而不是由 OS 设计者来设计。因此,每当在系统中增加一个新设备时,都需要由安装厂商提供新的驱动程序。//驱动程序由设备制造商提供
- 设备独立性软件。现代 OS 中的 I/O 系统基本上都实现了与设备无关性,也称为与设备无关的软件。其基本含义是:I/O 软件独立于具体使用的物理设备。由此带来的最大好处是,提高了 I/O 系统的可适应性和可扩展性。使它们能应用于许多类型的设备,而且在每次增加新设备或替换老设备时,都不需要对 I/O 软件进行修改,这样就方便了系统的更新和扩展。设备独立性软件的内容包括设备命名、设备分配、数据缓冲和数据高速缓冲一类软件等。
(3)I/O系统接口
3.1 - 块设备接口
块设备接口是块设备管理程序与高层之间的接口。该接口反映了大部分磁盘存储器和光盘存储器的本质特征,用于控制该类设备的输入或输出。
所谓块设备,是指数据的存取和传输都是以数据块为单位的设备。典型的块设备是磁盘。
该设备的基本特征是传输速率较高,通常每秒钟为数 MB 到数十 MB。另一特征是可寻址,即能指定数据的输入源地址及输出的目标地址,可随机地读/写磁盘中任一块;磁盘设备的 I/O 常采用 DMA 方式。
3.2 - 流设备接口
流设备接口是流设备管理程序与高层之间的接口。该接口又称为字符设备接口,它反映了大部分字符设备的本质特征,用于控制字符设备的输入或输出。
所谓字符设备,是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。
字符设备的基本特征是传输速率较低,通常为每秒几个字节至数千字节。另一特征是不可寻址,即不能指定数据的输入源地址及输出的目标地址。字符设备在输入/输出时,常采用中断驱动方式。
由于字符设备是不可寻址的,因而对它只能采取顺序存取方式。通常是为字符设备建立一个字符缓冲区(队列),设备的 I/O 字符流顺序地进入字符缓冲区(读入),或从字符缓冲区顺序地送出到设备(输出)。// 批量的 I/O 读写,提升 I/O 效率
由于大多数流设备都属于独占设备,必须采取互斥方式实现共享,为此,流设备接口提供了打开和关闭操作。在使用这类设备时,必须先用打开操作来打开设备。如果设备已被打开,则表示它正被其它进程使用。
2.3 - 网络通信接口
在现代OS中,都提供了面向网络的功能。但首先还需要通过某种方式把计算机连接到网络上。同时操作系统也必须提供相应的网络软件和网络通信接口,使计算机能通过网络与网络上的其它计算机进行通信或上网浏览。//该部分在网络操作系统中详细介绍
2、I/O 设备和设备控制器
I/O 设备一般是由执行 I/O 操作的机械部分和执行控制 I/O 的电子部件组成。通常将这两部分分开,执行 I/O 操作的机械部分就是一般的 I/O 设备,而执行控制 I/O 的电子部件则称为设备控制器或适配器(adapter)。
在微型机和小型机中的控制器常做成印刷电路卡形式,因而也常称为控制卡、接口卡或网卡,可将它插入计算机的扩展槽中。在有的大、中型计算机系统中,还配置了 I/O 通道或 I/O 处理机。
(1)I/O 设备
1.1 - I/O 设备类型
I/O 设备的类型繁多,除了能将它们分为块设备和字符设备、独占设备和共享设备外,还可从设备使用特性上,分为存储设备和 I/O 设备;从设备的传输速率上,又分为低速设备、中速设备和高速设备。//各种概念性的东西
1.2 - 设备与控制器之间的接口
通常,设备并不是直接与 CPU 进行通信,而是与设备控制器通信,因此,在 I/O 设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号,各对应一条信号线。
- 数据信号线。这类信号线用于在设备和设备控制器之间传送数据信号。对输入设备而言,由外界输入的信号经转换器转换后,所形成的数据通常先送入缓冲器中,当数据量达到一定的比特(字符)数后,再从缓冲器通过一组数据信号线传送给设备控制器。对输出设备而言,则是将从设备控制器经过数据信号线传送来的一批数据先暂存于缓冲器中,经转换器作适当转换后,再逐个字符地输出。//用来传输 I/O 数据
- 控制信号线。这是作为由设备控制器向 I/O 设备发送控制信号时的通路。该信号规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(从控制器接收数据),或执行磁头移动等操作。//用来指定操作类型,读或者写
- 状态信号线。该信号线用于传送指示设备当前状态的信号。设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。//传送设备状态
(2)设备控制器
设备控制器的主要功能是,控制一个或多个 I/O 设备,以实现 I/O 设备和计算机之间的数据交换。它是 CPU 与 I/O 设备之间的接口,接收从 CPU 发来的命令,去控制 I/O 设备工作,使处理机能够从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址的设备当它仅控制一个设备时,它只有一个唯一的设备地址;若控制器可连接多个设备,则应含有多个设备地址,每一个设备地址对应一个设备。可把设备控制器分成两类:一类是用于控制字符设备的控制器,另一类是用于控制块设备的控制器。
2.1 - 设备控制器的基本功能
- 接收和识别命令。设备控制器能接收并识别处理机发来的多种命令。在控制器中具有相应的控制寄存器,用来存放接收的命令和参数,并对所接收的命令进行译码。//设置命令译码器
- 数据交换。设备控制器可实现 CPU 与控制器之间、控制器与设备之间的数据交换。//设置数据寄存器
- 标识和报告设备的状态。控制器应记下设备的状态供 CPU了解。//设置状态寄存器
- 地址识别。设备控制器必须能够识别其所控制的每个设备的地址。//配置地址译码器
- 数据缓冲区。由于 I/O 设备的速率较低,而 CPU 和内存的速率却很高,故在控制器中必须设置一缓冲区。//设置缓冲区
- 差错控制。对于由 I/O 设备传送来的数据,设备控制器还兼管进行差错检测。若发现传送中出现了错误,通常是将差错检测码置位,并向 CPU 报告,于是 CPU 将本次传送来的数据作废,并重新进行一次传送。这样便可保证数据输入的正确性。
2.2 - 设备控制器的组成
- 设备控制器与处理机的接口。该接口用于实现CPU 与设备控制器之间的通信,在该接口中共有三类信号线:数据线、地址线和控制线。
- 设备控制器与设备的接口。
- I/O 逻辑。逻辑用于实现对设备的控制。它通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送 I/O 命令。
(3)内存映像 I/O
驱动程序将抽象 I/O 命令转换出的一系列具体的命令、参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对 I/O 设备的控制。这一工作可用如下两种方法完成:
- 利用特定的 I/O 指令,该方法的主要缺点是,访问内存和访问设备需要两种不同的指令。
- 内存映像 I/O,在这种方式中,在编址上不再区分内存单元地址和设备控制器中的寄存器地址。内存映像 I/O 方式统一了对内存和对控制器的访问方法,有利于简化 I/O 的编程。
(4)I/O 通道
虽然在 CPU 与 I/O 设备之间增加了设备控制器后,已能大大减少 CPU 对 I/O 的干预,但当主机所配置的外设很多时,CPU 的负担仍然很重。为此,在 CPU 和设备控制器之间又增设了 I/O 通道(I/O Channel)。
其主要目的是为了建立独立的 I/O 操作,不仅使数据的传送能独立于 CPU,而且也希望有关对 I/O 操作的组织、管理及其结束处理尽量独立,以保证 CPU 有更多的时间去进行数据处理;或者说,其目的是使一些原来由 CPU 处理的 I/O 任务转由通道来承担,从而把 CPU 从繁杂的 I/O 任务中解脱出来。//使用 I/O 通道的原因
在设置了通道后,CPU 只需向通道发送一条 I/O 指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序然后执行该通道程序,仅当通道完成了规定的 I/O 任务后,才向 CPU 发中断信号。// I/O通道工作原理
实际上,I/O 通道是一种特殊的处理机。它具有执行 I/O 指令的能力,并通过执行通道(I/O)程序来控制 I/O 操作。但 I/O 通道又与一般的处理机不同,主要表现在以下两个方面:
- 一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令,主要局限于与 I/O 操作有关的指令
- 二是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与 CPU 共享内存。