参考书籍:《计算机操作系统》第四版 汤小丹等编著
- 点此链接可跳转到:操作系统笔记整理——目录索引页
- I/O系统的功能、模型和接口
- I/O 系统的任务
- I/O系统的基本功能
- I/O软件的层次结构
- I/O设备和设备控制器
- 设备控制器:
- 内存映像I/O
- 通道
- 通道类型
- 字节多路通道
- 数组选择通道
- 数组多路通道
- “瓶颈”问题
- 中断机构和中断处理程序
- 中断处理程序
- 设备驱动程序
- 设备驱动程序的功能
- 设备驱动程序的特点
- 设备处理的方式
- 设备驱动程序的处理过程
- 对I/O设备的控制方式
- 采用可轮询的可编程I/O方式(程序直接控制方式)
- 采用中断的可编程I/O方式
- 直接存储器访问方式(DMA)
- DMA控制器
- DMA工作过程
- I/O通道方式
- 通道控制工作过程
- 通道指令的格式
- 与设备无关的I/O软件
- 设备分配的数据结构
- 设备分配时应考虑的因素
- 逻辑设备表LUT
输入输出系统是操作系统对计算机系统中除 CPU 和内存之外的外部设备 进行管理、对数据传输进行控制的模块,是操作系统资源管理中最复杂、 最多样化的部分。
I/O系统的功能、模型和接口I/O 系统:用于实现数据输入、输出及数据存储的系统。
I/O 系统的任务完成用户提出的I/O请求,提高I/O速率,提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段
I/O系统的基本功能1.隐藏物理设备的细节 2.与设备的无关性 3.提高处理机和I/O设备的利用率 4.对I/O设备进行控制 5.确保对设备的正确共享 6.错误处理
I/O软件的层次结构由于设备中电子部分比机械部分的速度快得多,为了降低硬件成本,将 电子部分从设备中分离出来作为一个独立的部件,这就是设备控制器。 控制器常采用印刷电路卡的形式插入计算机中(接口卡)。
设备控制器负责控制一个或多个 I/O 设备,实现处理机与 I/O 设备之间的 数据交换。 设备控制器是处于 CPU 与 I/O 设备之间的接口,接收从CPU发来的命令,去控制I/O设备工作,使处理机能从繁杂的设备控制事务中解脱出来 设备控制器是一个可编址设备。当它仅控制一个设备时,它只有一个唯一的设备地址,若连接多个设备,则应含有多个设备地址
设备控制器的基本功能
- 接受和识别命令
- 数据交换
- 标识和报告设备的状态
- 地址识别
- 数据缓冲区
- 差错控制
设备控制器的组成
- 设备控制器与处理机的接口:用于实现 CPU 与设备控制器之间的通信。共有三类信号线: 数据线、地址线和控制线
- 设备控制器与设备的接口:一个接口连接一台设备。在每个接口中都存在数据、控制和状态三种类 型的信号。
- I/O逻辑:用于实现对设备的控制。通过一组控制线与处理机交互,接收 命令并对命令和地址进行译码。
- 寄存器:控制寄存器(存放命令及参数)、数据寄存器(存放数据)、状态寄存器(记录设备状态)。
驱动程序把抽象的 I/O 命令变成具体的命令和参数,装入 设备控制器的寄存器中,由控制器执行 有两种实现方式:利用特定的I/O指令 把CPU 寄存器的内容复制到控制器寄存器中: Io-store cpu-reg, dev-no, dev-reg 把CPU 寄存器的内容复制到内存地址为 k 的单元中: Store cpu-reg, k 缺点:访问内存和访问设备需要两个不同的指令。
内存映像I/O: 不区分内存单元地址和控制器寄存器地址(寄存器占用内存地址的一部 分),采用统一的 I/O 指令。 Store cpu-reg, k k 小于 n 时,被认为是内存地址,大于等于 n 时,被认为是某个控制器寄存器地址。
通道虽然在CPU与I/O设备之间增加了设备控制器后,已能大大减少CPU对I/O的干预,但当主机所配置的外设很多时,CPU的负担仍然很重。为此,在CPU和设备控制器之间又增设了I/O通道。 通道是一种特殊的专门执行 I/O 指令的处理机,与 CPU 共享内存,可以 有自己的总线。
引入通道的目的: 解脱 CPU 对 I/O 的组织、管理。 CPU 只需发送 I/O 命令给通道,通道通过调用内存中的相应通道程序完成 任务,仅当通道完成了规定的 I/O 任务后,才向 CPU 发中断信号。 通道与一般处理机的差异 执行的命令主要局限于与 I/O 操作有关的指令。 通道没有自己的内存(与 CPU 共享内存)。
通道类型 字节多路通道工作原理: 主通道含有许多非分配型子通道,每一个子通道连接一台I/O设备,并控制该设备的I/O操作。这些子通道按时间片轮转方式共享主通道。当第一个子通道控制器I/O设备完成一个字节的交换后,便立即腾出主通道,让给第二个子通道使用;当第二个子通道也完成一个字节的交换后,同样也把主通道让给第三个子通道;以此类推。当所有子通道轮转一周后,重又返回第一个子通道 优点:可连多台中/低速设备;能分时并行操作。 缺点:传输率较低。
工作原理: 数据传送是按成组方式进行工作,每次传输一批数据。主要用于连接高 速 I/O 设备。一个主通道含有多个子通道,每子通道通过一控制器与一台高速的 I/O 设备相连,在一段时间内只能选 择一个子通道程序执行。 优点:可连多台高速设备;传输率较高。 缺点:一段时间内只能执行一道通道程序。某子通道不传数据,而使主 通道闲置,其它子通道也不能传数据。所以通道的利用率很低。
数组多路通道工作原理: 数据传送仍是按数组方式工作。工作原理(结合前两者:并行 + 数组) 一个主通道含有多个子通道。每子通道通过一控制器与一台中/高速的 I/O 设备相连,可同时并行向主通道传数据。各子通道以时间片轮转方式按数组方式使用主通道。 优点: 可连多台中/高速设备;能分时并行操作,传输率较高。
“瓶颈”问题假设设备1至设备4是四个磁盘,为了启动磁盘4,必须用通道1和控制器2;但若这两者已经被其他设备占用,则无法启动,这就是通道不足所造成的“瓶颈”现象。 解决“瓶颈”问题最有效的方法,便是增加设备到主机间的通路而又不增加通道,如下图,就是把一个设备连接到多个控制器上,而一个控制器有链接到多个通道上。多通路方式不仅解决了“瓶颈”问题,而且提高了系统的可靠性
中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备并行执行,也必须有中断的支持。
中断:CPU 对外部某个事件作出的一种响应。某个事件发生时,系统中 止现运行程序的执行,引出处理事件程序对相应事件进行处理,处理完 毕后返回断点继续执行。 陷入:由 CPU 内部事件引起的中断。如非法指令、地址越界等。(内中 断) 中断处理程序:对中断事件进行处理的程序。如时钟中断处理、打印机 完成中断处理、打印机缺纸中断处理等。 中断向量表:表项为中断处理程序的入口地址。当设备发出中断请求信 号后,根据中断号查中断向量表,取得该设备中断处理程序的入口地址 对多中断源的处理方式:
- 屏蔽中断:在处理一个中断时屏蔽掉所有的中断,即处理机对任何新到的中断请求都暂时不予理睬,所有的中断都会按次序顺序处理。优点是简单,但不适合实时性要求较高的系统。
- 嵌套中断: ①如果同时有多个中断请求,CPU 优先响应优先级最高的中 断请求。 ②高优先级中断请求抢占低优先级中断的处理机。
当一个进程请求 I/O 时,进程将被阻塞,直到 I/O 完成。 I/O 完成后,设备控制器向 CPU 发出一个中断请求,CPU 响应中断请求 后转向中断处理程序。 中断处理程序执行相应的处理后,唤醒被阻塞的进程。
中断处理程序是操作系统中与硬件最接近的一部分
处理过程:
- 检测是否有未响应的中断请求。 每当设备完成一个字符的读入(或输出)时,设备控制器便向处理机发送一个中断请求信号。请求处理机将设备已读入的数据传送到内存的缓冲区中(读入),或者请求处理机将要输出的数据(输出)传送给设备控制器。程序每当执行完当前指令后,处理机都要测试是否有未响应的中断信号。若没有,继续执行下一条指令。若有,则停止原有进程的执行,准备转去执行中断处理程序。 注意:缺页中断在指令执行期间 产生和处理中断信号,且一条指令在执行期间可能产生多次缺页中断。
- 保护被中断进程的CPU环境
- 转入相应的中断处理程序
- 中断处理
- 恢复被中断进程的现场并退出中断
设备驱动程序通常又称为设备处理程序,它是 I/O 进程与设备控制器之间的通信程序,它常以进程的形式存在。 系统处理输入输出请求的步骤:
- I/O软件系统接受用户发出的I/O请求,需要通过系统调用取得操作系统的服务。
- 执行到与I/O请求相对应的系统调用后,转去执行操作系统的核心程序 (设备驱动程序),此时处理机状态由用户态转到核心态。
- 启动设备工作。
- I/O 完成后,由通道(或设备)产生中断信号。CPU 接到中断请求后, 如条件符合,则响应中断,转去执行相应的中断处理程序。唤醒因等待I/O 而阻塞的进程,调度用户进程继续运行。
- 接受由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为具体要求。例如,将磁盘块号转换为磁盘的 盘面、磁道号及扇区号。
- 检查用户 I/O 请求的合法性、I/O 设备状态、传递有关参数、设置设备的 工作方式。
- 发出 I/O 命令。按处理机的 I/O 请求去启动指定的设备进行 I/O 操作。
- 及时响应由控制器或通道发来的中断请求,并进行相应处理。
- 设备驱动程序是实现在与设备无关软件与设备控制器之间的一个通信和 转换程序。把抽象的命令转为具体的 I/O 操作。
- 与 I/O 设备的特性紧密相关。
- 与 I/O 控制方式紧密相关,常用的I/O控制方式是中断驱动和DMA方式。
- 与硬件紧密相关,因而其中一部分程序必须用汇编语言编写。很多驱动 程序的基本部分已经固化在 ROM 中。
- 驱动程序应允许可重入。一个正在运行的驱动程序常会在一次调用完成 前被再次调用。
- 为每一类设备设置一个进程,专门执行这类设备的 I/O 操作。
- 在整个系统中设置一个进程,执行所有的 I/O 操作。
- 不设置专门的设备处理进程,而为各类设备设置相应的设备驱动程序, 供用户进程或系统进程调用。这类方式目前使用最多。
- 将抽象要求转为具体要求
- 对服务请求进行校验
- 检查设备的状态(是否为就绪态)
- 传送必要的参数(如内存始址和字节数)
- 设置设备的工作方式
- 按处理机的I/O请求去启动指定的设备
当 CPU 向设备控制器发送完命令后(状态寄存器中的忙/闲标志 busy 置 为 1),CPU 就循环检测设备控制器中的状态寄存器(轮询),看 I/O 操作是否 完成,直到 I/O 完成(busy=0)。 CPU 大部分时间都处于检查和等待状态,整个计算系统的效率十分低下。
进程向CPU发出指令启动I/O设备输入数据 该进程放弃处理机(CPU转去做其它工作,此时CPU与I/O设备并行操作),等待输入完成 输入完成后,I/O 控制器向 CPU 发出中断请求,CPU 收到后,转向中断服务程序。中断服务程序将输入寄存器中的数据送指定内存单元,并将原进程唤醒,继续执行。 优点: CPU 不需等待数据传输完成,I/O 设备与 CPU 并行工作,CPU 的利用率因此提高。(例如,从终端输入一个字符的时间约为 100 ms,而将字符送入终端缓冲 区的时间小于 0.1 ms。若采用程序 I/O 方式,CPU 约有 99.9 ms 的时间 处于忙等待。采用中断驱动方式,CPU 可利用这 99.9 ms 的时间去做其 它事情,而仅用 0.1 ms 的时间来处理中断请求。) 缺点: CPU 在响应中断后,还需要时间来执行中断服务程序。如果数据 量大,需要多次执行中断程序,CPU 的效率仍然不高
程序直接控制方式是以字 (节) 为单位进行 I/O。 中断控制方式仍是以字 (节) 为单位进行 I/O。也就是说在采用中断控制方 式的 I/O 中,CPU 每字节的传送就产生一次中断。
直接存储器访问 (DMA)I/O 控制方式 数据传输的基本单位是数据块。 数据从设备直接送入内存或相反。 整块数据的传送在 DMA 控制器的控制下完成,CPU 仅在数据传输的起止 时参与。
组成:
- 主机与 DMA 控制器的接口
- DMA 控制器与块设备的接口
- I/O 逻辑控制
DMA 控制器中设置如下四类寄存器:
- 命令/状态寄存器 (CR)
- 内存地址寄存器 (MAR):输入时存放设备到内存的内存始址;输出存放由 内存到设备的内存源地址。
- 数据寄存器 (DR)
- 数据计数器 (DC):存放本次 CPU 要读或写的字节数。
- 需要 I/O 的进程向 CPU 发出指令,向 DMA 控制器写入数据存放的内存 始址、传送的字节数,并置中断位和启动位,启动 I/O 设备输入数据并允 许中断。
- 进程放弃处理机等待输入完成,处理机被其它进程占据。
- DMA 控制器挪用存储器周期,把一个字节的数据写入MAR所指示的内存单元,然后便对MAR内容加1,将DC内容减1,若DC内容不为0,表示传送未完,继续传送下一个字节。
- DMA 控制器传送完数据后向 CPU 发中断请求,CPU 响应后转向中断服 务程序唤醒进程,返回被中断进程。
- 在以后该进程再被调度,从内存取出数据进行处理。
周期挪用是利用 CPU 不访问存储器的那些周期来实现 DMA 操作。 周期挪用不减慢 CPU 的操作,但数据传送过程是不连续和不规则的。 DMA 控制器在获得总线控制权后(窃取总线控制权、挪用存储器周 期),直接在内存与外设之间实现数据传送。 CPU 和 DMA 传送不完全并行,会有总线竞争。处理器用总线时可能稍 作等待,但不会引起中断,不引起程序上下文的切换。
通道相当于一个独立于 CPU 的专管 I/O 控制的处理机,用于控制设备与内存直 接进行数据交换。 I/O 通道方式中以一组数据块为单位进行干 预。 通道有自己的一套简单的指令系统,称为通道指令。每条通道指令规定了设备 的一种操作,通道指令序列便是通道程序,通道执行通道程序来完成规定动作。 通道靠执行通道程序软件完成数据传输,通道控制器的功能比 DMA控制器更强 大,它能够承担外设的大部分工作。通道有自己的总线,不需要窃取总线控制 权。
通道控制工作过程- 需要 I/O 的进程向 CPU 发出指令,CPU 发出启动设备指令,指明 I/O 操 作、设备号和对应的通道。
- 该进程放弃 CPU 等待输入完成,CPU 被其它进程占据。
- 通道接收到 CPU 发来的启动指令后,取出内存中的通道程序执行,控制 设备将数据传送到内存指定区域。
- 传送完数据后,通道向 CPU 发中断请求,CPU 响应后转向中断服务程 序,唤醒进程,并返回被中断进程。
- 在以后该进程再被调度,从内存取出数据进行处理。
操作码:规定了指令所要执行的操作,如读、写等。 计数:表示本条指令要读(写)数据的字节数。 内存地址:数据要送入的内存地址或从内存何处取出数据。 通道程序结束位 P:P=1 表示本条指令是通道程序的最后一条指令。 记录结束位 R:R=0 表示本条指令与下一条指令所处理的数据属于一个 记录,R=1 表示该指令处理的数据是最后一条记录。
- DMA 方式与中断方式的区别 中断方式是在数据寄存器满之后发中断请求,而 DMA 方式则是在数据块 全部传送结束时请求中断。 中断方式的数据传送是在中断处理时由 CPU 控制完成的,而 DMA 方式则 是在 DMA 控制器的控制下不经过 CPU 控制完成的。
- DMA 方式与通道方式的区别 在 DMA 方式中,数据的传送方向、存放数据的内存始址以及传送的数据块 长度等都由 CPU 控制,而在通道方式中,这些都由通道来进行控制。
例:假设幼儿园一个老师带 10 个孩子,要给每个孩子分 4 块糖。 方法一:她先给孩子甲一块糖,盯着甲吃完,然后再给第二块,等吃完 第二块又给第三块,吃完第三块又给第四块。接着给孩子乙,其过程与 孩子甲完全一样。依次类推,直至到第 10 个孩子发完四块糖。孩子们吃 糖时她一直在守候,什么事也不能干。(程序直接控制方式) 方法二:每人发一块糖各自去吃,并约定谁吃完后就向她举手报告,再 发第二块。在未接到孩子们吃完糖的报告以前,她还可以腾出时间给孩 子们改作业。(中断控制方式) 方法三:每人拿 4 块糖各自去吃,吃完 4 块糖后再向她报告。这种方法 工作效率大大提高,她可以腾出更多的时间改作业。(直接存储器访问方 式 (DMA)) 方法四:把发糖的事交给另一个人分管,只是必要时她才过问一下。(通 道控制方式)
与设备无关的I/O软件设备独立性:为提高 OS 的可适应性和可扩展性,将应用程序独 立于具体使用的物理设备。 驱动程序是一个与硬件紧密相关的软件。为了实现设备独立性,必须再 在驱动程序之上设置一层软件,称为设备独立性软件(与设备无关的软 件)。
设备独立性软件执行所有设备的公有操作: 1.设备驱动程序的统一接口 2.缓冲管理 3.差错控制 4.对独立设备的分配与回收 5.提供独立与设备的逻辑数据块
设备分配的数据结构- 设备控制表(DCT):每个设备一张,记录设备的情况
- 控制器控制表(COCT):每个控制器一张,记录控制器的情况
- 通道控制表(CHCT):每个通道一张
- 系统设备表(SDT):记录系统中全部设备的情况
1.设备的固有属性 2.设备分配算法 先来先服务 优先级高者优先 3.设备分配的安全性
逻辑设备表LUT逻辑设备名到物理设备名映射的实现 每个表目中包含三项:逻辑设备名、物理设备名和设备驱动程序的入口 地址。 分配流程:进程给出逻辑名,通过 LUT 得到物理设备及其 driver 入口。