本章思维导图
7.1 I/O系统的功能、模型与接口
7.1.1 I/O系统的基本功能
(1)能够隐藏I/O设备的细节。
(2)能够保证设备无关性。
(3)能够提高处理及和I/O设备的利用率。
(4)能够对I/O设备进行控制。
(5)能够确保对设备的正确共享。
(6)能够处理错误。
第一、第二方面的功能是为了方便用户使用I/O设备;第三、第四方面的功能是为了提高处理机和I/O设备的利用率;第五、第六方面的功能是为了给用户在共享设备时提供方便。
7.1.2 I/O系统的层次结构与模型
I/O系统由I/O软件和I/O设备(硬件)等组成。目前已普遍采用具有层次结构的I/O系统。每层都是利用下层提供的服务来完成I/O功能中的某些子功能的。
1 I/O系统的层次结构
(1)用户层软件。与用户交互,给用户操作设备提供了库函数。
(2)与设备无关的I/O软件。实现用户与设备驱动器的统一接口,设备命令,设备保护,分配释放,缓冲区管理。
(3)设备驱动程序。与硬件直接想关,实现CPU向设备发出的操作命令,驱动IO设备工作。
(4)中断处理程序。保存现场信息,转ISR,恢复现场,返回。
2 I/O系统的模型
7.1.3 I/O系统的接口
I/O系统与上层之间的接口,根据设备类型的不同,可分为三个接口:块设备接口、流设备接口和网络通信接口。
1 块设备接口
块设备接口是块设备管理程序与上层之间的接口。该接口反映了大部分磁盘存储器、光盘存储器、闪存等的本质特征,用于控制该类设备的I/O。
(1)块设备。是指数据的存取和传输都是以数据块为单位的设备。典型的块设备是磁盘。该设备的基本特征是传输速率较高,每秒几十MB或几百MB。可寻址;可随机访问;DMA方式传输。
(2)隐藏了磁盘的二维结构。磁道->扇区->逻辑块号。
(3)将抽象命令映射为低层操作。将上层抽象命令映射为底层操作,逻辑块号为具体磁盘地址。
2 流设备接口
流设备接口是流设备管理程序与上层之间的接口。又称为字符设备接口,反映了大部分字符设备的本质特征,用于控制字符设备的I/O。
(1)字符设备。是指数据的存取和传输都是以字符(字节)为单位的设备,如打印机、键盘等。字符设备的基本特征是传输速率较低,每秒几B或数千B。不可寻址;中断驱动I/O方式。
(2)get操作和put操作。由于字符不可寻址,因此采用顺序存取方式并使用缓冲区。
(3)in-control指令。字符设备种类多,差异大,流接口提供in-control设置设备参数。
3 网络通信接口
现在的OS都提供面向网络的功能。OS提供网络软件和网络通信接口,计算机通过网络与其他计算机进行通信与数据访问。
7.2 I/O设备和设备控制器
7.2.1 I/O设备
1 I/O设备的类型
(1)按使用特性分类。第一类是存储设备,也称为外存、辅存,是用于存储信息的主要设备。第二类是I/O设备,它又可分为输入设备、输出设备和交互式设备。输入设备用于接受外部信息,如键盘、鼠标、扫描仪、视频摄像机等。输出设备用于将计算机处理后的信息送向处理机外部的设备,如打印机、绘图仪等。交互式设备主要有显示器等。
(2)按传输速率分类。第一类是低速设备,其传输设备仅为每秒几字节至数百字节,典型的低速设备有键盘、鼠标等。第二类是中速设备,其传输设备为每秒数千字节至数十万字节,典型的中速设备有行式打印机、激光打印机等。第三类是高速设备,其传输设备为每秒数十万字节至千兆字节,典型的高速设备有磁带机、磁盘机、光盘机等。
2 设备与设备控制器之间的接口
设备并不直接与CPU通信,而是与设备控制器通信。
接口中的三类信号:数据信号;状态信号;控制信号。
7.2.2 设备控制器
设备控制器的主要功能是,控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,接受从CPU发来的命令。设备控制器可分为两类:一类是用于控制字符设备的控制器,另一类是用于控制块设备的控制器。
1 设备控制器的基本功能
基本功能:接受和识别命令;数据交换;标志和报告设备的状态;地址识别;数据缓冲区;差错控制。
2 设备控制器的组成
组成:设备控制器与CPU之间的接口;设备控制器与I/O设备之间的接口;I/O逻辑。
7.2.3 内存映像I/O
每个端口都有地址,CPU通过端口地址控制设备控制器工作
端口地址有两种编址方式
①设备独立编址方式(利用特定I/O指令方式)
②内存统一编址(内存映像方式)
1 采用特定I/O指令形式
用于独立编址,端口地址与内存地址不可重叠,读端口和读内存用不同的指令,通过IO指令控制设备端口读写。如微机:IN/OUT/MOV
2 采用内存映像I/O指令形式
用于统一编址中,端口地址与内存地址统一编制,作为内存地址空间的一部分,读端口和读内存用相同指令,简化IO编程。
7.2.4 I/O通道
1 I/O通道设备的引入
设备控制器减少了CPU对I/O设备的干预,大型机增设I/O通道,I/O通道是一种特殊处理机:只执行IO指令,与CPU共享内存,把CPU从繁重I/O任务解脱。
①数据传输由通道完成
②IO操作组织,管理及结束工作尽量独立由通道完成
③CPU专注数据计算
通道是一种特殊的处理机,但又与处理机不同:通道没有自己的内存;通道指令类型单一。
2 通道类型
(1)字节多路通道。以字节交叉方式工作,连接多个低速设备,按时间片轮转方式为多个设备服务。
(2)数组选择通道。可连接多个高速设备,一次只服务一个设备,通道利用率低。
(3)数组多路通道。将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作相结合,按数组方式传输,速率高,通道利用率高。
3 通道传输“瓶颈”问题
由于通道价格昂贵,机器中所设置的通道数量势必较少,这往往又会使它成为I/O的“瓶颈”,进而造成整个系统吞吐量下降。
解决“瓶颈”问题最有效的方法:增设通路而不增加通道,一个设备连接多个控制器,一个控制器连接多个设备。
7.2.5 I/O设备的控制方式
1 使用轮询的可编程I/O方式
最早出现的I/O处理方式。轮询查询I/O控制器中的状态R,busy=0/1。
特点:
①CPU绝大部分时间查询设备状态,CPU忙等;
②CPU主动,设备被动。
2 使用中断的可编程I/O方式
CPU向设备控制器发出I/O命令,然后继续返回执行原理命令;设备控制器按命令要求去控制指定I/O设备。CPU与I/O设备并行操作;完成后设备控制器由CPU发出中断,CPU中断处理读/写数据。
特点:
①设备主动;
②CPU与I/O设备并行工作,CPU只需要极短时间处理中断;
③提高资源利用率和吞吐量;
④实时性好。
3 直接存储访问(DMA)方式
中断驱动I/O仍以字节为单位进行I/O,每传送1字节发送一次中断;中断处理前后开销大,若用于块设备效率低,中断过于频繁;为进一步减少IO对CPU的干预,引入直接存储器访问方式,也称DMA。
特点:
①传输单位是数据块,CPU和I/O设备每次至少传输一个数据块;
②数据从设备直接送入内存,或者相反,不经过CPU;
③仅在传送开始和结束才需CPU干预,整块数据传送是在DMA控制器的控制下完成的;
④DMA比中断方式CPU和I/O设备并行度高。
·DMA的组成
DMA控制器由三部分组成:主机与DMA控制器的接口,DMA控制器与块设备的接口;I/O控制逻辑
命令/状态寄存器 CR,内存地址寄存器MAR,数据寄存器DR,数据计数器DC
·DMA的工作过程
以磁盘为例:
CPU向设备控制器发出命令,并设置DR,MAR,DC,CR;启动DMA控制器进行数据传送;在DMA控制器控制下数据传至内存,CPU可做其他工作;完成后DMA控制器发中断请求。
4 I/O通道方式
(1)I/O通道方式的引入。进一步减少CPU对I/O设备的干预,以多个块为单位进行数据传送,一次传送多组数据到多个不同的内存区域。
(2)通道程序。通道程序通过执行通道程序并与设备控制器共同实现I/O设备的控制,通道程序是一系列通道指令(通道命令)所构成,通道指令通常与I/O操作有关,指令包含:
①操作码 ②内存地址 ③计数 ④通道结束位P:是否是最后一条指令 ⑤记录结束标志R:R=0:与上条记录相同,R=1:新纪录。
7.3 中断和中断处理程序
7.3.1 中断
1 中断和陷入
(1)中断(interrupt)。指CPU对I/O设备发来的中断信号的一种响应。IO设备向CPU发出的信号,又称外部中断。CPU暂停正在执行的程序,保留CPU环境后,自动地转去执行该IO设备的中断处理程序。
(2)陷入或陷阱(trap)。由CPU内部事件所引起的中断,又称内中断。例如:运算溢出,程序出错,非法指令,地址越界。
2 中断向量表和中断优先级
(1)中断向量表。OS为每个中断都配备一个中断号和中断处理程序(ISR);ISR在内存的首地址称为中断向量;系统所有中断向量放在一起构成表格称为中断向量表IVT。
(2)中断优先级。根据中断紧迫程度为中断安排优先级;优先级越高越紧迫;高优先级可打断低优先级的执行,中断嵌套。
3 处理多中断信号源的方式
(1)屏蔽(禁止)中断。处理中断时屏蔽所有中断。简单,所有中断按顺序处理,不能满足实时性要求高的中断请求。
(2)嵌套中断。如果同时有多个中断发送,先处理优先级高的中断;高优先级中断可抢占低优先级中断CPU。
7.3.2 中断处理程序
进程请求I/O操作将被挂起,I/O设备完成I/O操作后,设备控制器向CPU发出I/O中断请求,CPU响应后转入中断处理程序,中断处理程序执行相应处理,处理完解除相应进程的阻塞状态。
中断处理程序的处理过程可分为以下几个步骤。
(1)测定是否有未响应的中断信号。
(2)保护被中断进程的CPU现场环境。
(3)转入相应设备的中断处理程序。
(4)处理中断。
(5)恢复CPU现场环境后退出中断。
7.3.3 实例:Linux系统中断处理
中断处理程序是普通的C函数,设计可分为3个部分:注册中断;处理中断;注销中断。
7.4 设备驱动程序
设备驱动程序又称为设备处理程序。它是I/O系统的上层与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象I/O要求,如read或write命令。
7.4.1 设备驱动程序概述
1 设备驱动程序的功能
① 接受设备无关层软件的命令和参数,将抽象命令转换为与设备相关的低层操作序列。
② 检查I/O合法性,了解设备工作状态,传递与I/O设备有关的操作序列,设置设备工作方式。
③ 发出I/O命令,若设备空闲便启动I/O设备完成操作;若设备忙碌则将请求块挂在设备队列上等待。
④ 及时响应设备控制器的中断请求,根据中断类型调用相应中断处理程序。
2 设备驱动程序的特点
① 实现设备无关层软件与设备控制器的通信和转换程序。
② 与设备控制器及I/O设备紧密相关。
③ 与I/O设备所采用的I/O控制方式紧密相关,若中断驱动和DMA。
④ 因为与设备的紧密相关,许多用汇编语言编写。目前很多驱动程序已经固化在ROM中。
⑤ 驱动程序应允许可重入,一个正在运行的驱动程序常会在一次调用完成前再次被调用。
3 设备处理方式
① 每类设置一个进程,专门执行该类设备I/O操作,如交互式中断进程。打印进程等,适合大型系统。
② 系统中只有一个I/O进程,执行所有各类设备I/O操作。
③ 不设置专门设备处理进程,只为各类设备设置相应设备驱动程序供调用,该方式最为普遍。
7.4.2 设备驱动程序的执行过程
执行过程分为5个过程。
①将抽象要求转换为具体要求:如逻辑块号转化为磁盘地址。
②检查请求服务合法性。
③检查设备状态:是否为就绪状态? 状态R。
④传送必要参数:命令R,工作模式,如232的波特率,校验方式。
⑤启动I/O设备。
7.4.2 设备驱动程序的框架
1 设备驱动程序与外界的接口
(1)设备驱动程序与OS内核的接口。
(2)设备驱动程序与系统引导的接口。
(3)设备驱动程序与设备的接口。
2 设备驱动程序与外界的组成
(1)设备驱动程序的注册与注销。
(2)设备的打开与释放。
(3)设备的读/写操作。
(4)设备的控制操作。
(5)设备的中断与轮询。