文章目录
6.1 I/O系统的功能、模型和接口
I/O系统管理的主要对象是I/O设备和相应的设备控制器。其最主要的任务是,完成用户提出的I/O请求,提高I/O速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。
6.1.1 I/O系统的基本功能
1.隐藏物理设备的细节
I/O设备的类型非常多,且彼此间在多方面都有差异,诸如它们接收和产生数据的速度,传输方向、粒度、数据的表示形式及可靠性等方面。
2.与设备的无关系
隐藏物理设备的细节,在早期的OS中就已实现,它可方便用户对设备的使用。与设备的无关性是在较晚时才实现的,这是在隐藏物理设备细节的基础上实现的。
3.提高处理机和I/O设备的利用率
在一般的系统中,许多I/O设备间是相互独立的,能够并行操作,在处理机与设备之间也能并行操作。因此,I/O系统的第三个功能是要尽可能地让处理机和I/O设备并行操作,以提高它们的利用率。为此,一方面要求处理机能快速响应用户的I/O请求,使I/O设备尽快地运行起来;另一方面也应尽量减少在每个I/O设备运行时处理机的干预时间。
4.对I/O设备进行控制
对I/O设备进行控制是驱动程序的功能。目前对I/O设备有四种控制方式:
① 采用轮询的可编程I/O方式;
② 采用中断的可编程I/O方式;
③ 直接存储器访问方式;
④ I/O通道方式。
5.确保对设备的正确共享
从设备的共享属性上,可将系统中的设备分为如下两类:
(1) 独占设备,进程应互斥地访问这类设备,即系统一旦把这类设备分配给了某进程后,便由该进程独占,直至用完释放。典型的独占设备有打印机、磁带机等。系统在对独占设备进行分配时,还应考虑到分配的安全性。
(2) 共享设备,是指在一段时间内允许多个进程同时访问的设备。典型的共享设备是磁盘,当有多个进程需对磁盘执行读、写操作时,可以交叉进行,不会影响到读、写的正确性。
6.错误处理
大多数的设备都包括了较多的机械和电气部分,运行时容易出现错误和故障。从处理的角度,可将错误分为临时性错误和持久性错误。对于临时性错误,可通过重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告。
6.1.2 I/O系统的层次结构和模型
1.I/O软件的层次结构
2.I/O系统中各种模块之间的层次视图
为了能更清晰地描述I/O系统中主要模块之间的关系,我们进一步介绍I/O系统中各种I/O模块之间的层次视图。
- I/O系统的上、下接口
(1) I/O系统接口。
(2) 软件/硬件(RW/HW)接口。 - I/O系统的分层
与前面所述的I/O软件组织的层次结构相对应,I/O系统本身也可分为如下三个层次:
(1) 中断处理程序。
(2) 设备驱动程序。
(3) 设备独立性软件。
6.1.3 I/O系统接口
在I/O系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干个接口。
1. 块设备接口
(1) 块设备。
(2) 隐藏了磁盘的二维结构。
(3) 将抽象命令映射为低层操作。
2. 流设备接口
流设备接口是流设备管理程序与高层之间的接口。该接口又称为字符设备接口,它反映了大部分字符设备的本质特征,用于控制字符设备的输入或输出。
(1) 字符设备。
(2) get和put操作。
(3) in-control指令。
3.网络通信接口
在现代OS中,都提供了面向网络的功能。但首先还需要通过某种方式把计算机连接到网络上。同时操作系统也必须提供相应的网络软件和网络通信接口,使计算机能通过网络与网络上的其它计算机进行通信或上网浏览。
6.2 I/O设备和设备控制器
I/O设备一般是由执行I/O操作的机械部分和执行控制I/O的电子部件组成。通常将这两部分分开,执行I/O操作的机械部分就是一般的I/O设备,而执行控制I/O的电子部件则称为设备控制器或适配器(adapter)。在微型机和小型机中的控制器常做成印刷电路卡形式,因而也常称为控制卡、接口卡或网卡,可将它插入计算机的扩展槽中。在有的大、中型计算机系统中,还配置了I/O通道或I/O处理机。
6.2.1 I/O设备
1.I/O设备的类型
- 按使用特性分类
- 按传输速率分类
2.设备与控制器之间的接口
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号,各对应一条信号线。
(1) 数据信号线。
(2) 控制信号线。
(3) 状态信号线。
6.2.2 设备控制器
1.设备控制器的基本功能
(1) 接收和识别命令。
(2) 数据交换。
(3) 标识和报告设备的状态。
(4) 地址识别。
(5) 数据缓冲区。
(6) 差错控制。
2.设备控制器的组成
由于设备控制器位于CPU与设备之间,它既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备工作的功能,因此,现有的大多数控制器都是由以下三部分组成:
(1) 设备控制器与处理机的接口。
(2) 设备控制器与设备的接口。
(3) I/O逻辑。
6.2.3 内存映像I/O
1.利用特定的I/O指令
在早期的计算机中,包括大型计算机,为实现CPU和设备控制器之间的通信,为每个控制寄存器分配一个I/O端口,这是一个8位或16位的整数,另外还设置了一些特定的I/O指令。
2.内存映像I/O
在这种方式中,在编址上不再区分内存单元地址和设备控制器中的寄存器地址,都采用k。当k值处于0~n-1范围时,被认为是内存地址,若k大于等于n时,被认为是某个控制器的寄存器地址。
6.2.4 I/O通道
1.I/O通道设备的引入
虽然在CPU与I/O设备之间增加了设备控制器后,已能大大减少CPU对I/O的干预,但当主机所配置的外设很多时,CPU的负担仍然很重。为此,在CPU和设备控制器之间又增设了I/O通道(I/O Channel)。
2.通道类型
-
字节多路通道(Byte Multiplexor Channel)
这是一种按字节交叉方式工作的通道。它通常都含有许多非分配型子通道,其数量可从几十到数百个,每一个子通道连接一台I/O设备,并控制该设备的I/O操作。这些子通道按时间片轮转方式共享主通道。 -
数组选择通道(Block Selector Channel)
字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。 -
数组多路通道(Block Multiplexor Channel)
数组选择通道虽有很高的传输速率,但它却每次只允许一个设备传输数据。数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道。
3.“瓶颈”问题
由于通道价格昂贵,致使机器中所设置的通道数量势必较少,这往往又使它成了I/O的瓶颈,进而造成整个系统吞吐量的下降。
6.3 中断机构和中断处理程序
对于操作系统中的I/O系统,本章采取从低层向高层的介绍方法,从本节开始首先介绍中断处理程序。中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备并行执行,也必需有中断的支持。中断处理程序是I/O系统中最低的一层,它是整个I/O系统的基础。
6.3.1 中断简介
1.中断和陷入
是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。
- 陷入
陷入是计算机的一种异常情况。陷入(trap)保存的EIP指向触发异常的那条指令的下一条指令
2.中断向量表和中断优先级
- 中断向量表
中断向量(Interrupt vector)是中断服务程序的入口地址,或中断向量表(它是一个中断处理程序地址的数组)的表项。
系统程序必须维护一份中断向量表,每一个表项纪录一个中断处理程序(ISR,Interrupt Service Routine)的地址当外部事件或异常产生时,由硬件负责产生一个中断标记,CPU根据中断标记获得相应中断的中断向量号,然后由CPU根据中断向量表的地址和中断向量号去查找中断向量表获得相应中断号的中断程序地址,进一步执行对应的中断处理程序。
- 中断优先级
为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。
在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。
3.对多中断源的处理方式
- 屏蔽(禁止)中断
- 嵌套中断
6.3.2 中断处理程序
当一个进程请求I/O 操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。