type
slug
status
summary
icon
category
date
tags
password





5.1 I/O 系统简介
- 设备管理的对象:主要是I/O设备。
- 设备管理的基本任务:完成用户提出的I/O请求,提高I/O速率以及改善I/O设备的利用率。
- 设备管理的主要功能有:缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等。
5.1.1 IO系统的基本功能
- 设备分配
- 设备映射
- 设备驱动
- I/O缓冲区的管理
5.1.2 通用设备管理分层模型
为了使得复杂的 I/O 软件具有清晰的结构、更好的可移植性和易适应性,I/O系统目前普遍采用层次式的结构。通常划分为四层。


5.1.3 IO设备和设备控制器
- 设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在设备与设备控制器之间应有一接口


- 设备控制器
- 设备控制器是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理机从繁杂的设备控制事务中解脱出来。
- 设备控制器主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。
- 若控制器可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。

5.1.4 IO通道
- 目的:使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来。
- 采用通道有以下特点: ① DMA(直接存储器存取)方式显著地减少了CPU的干预。 ②只需向I/O通道发送一条I/O指令,即可完成一组相关的读(或写)操作及有关控制。 ③可实现CPU、通道和I/O设备三者的并行操作,从而更有效地提高整个系统的资源利用率。

5.2 中断处理程序和设备驱动程序
- 中断的简介
- 中断和陷入—CPU外部事件和内部事件导致
- 中断向量表和中断优先级
- 对多中断源的处理方式
- 屏蔽(禁止)中断
- 嵌套中断
5.2.1 中断简介
- 中断源:引起中断发生的事件
- 中断请求:中断源向CPU发出的请求中断处理信号
- 中断响应:CPU收到中断请求后转到相应的事件处理程序的过程
- 关中断/开中断:CPU内部的PSW的中断允许位被清除/被设置,不允许/允许CPU响应中断。用于保证某段程序执行的原子性
- 中断屏蔽:在中断请求产生后,系统有选择地封锁一部分中断而允许另一部分仍能得到响应。有些具有最高优先级的中断不允许被屏蔽。
5.2.2 中断处理程序
中断处理层的主要工作有:
- 进行进程上下文的切换
- 对处理中断信号源进行测试
- 读取设备状态和修改进程状态等
对于为每一类设备设置一个I/O进程的设备处理方式,其中断处理程序的处理过程分成以下几个步骤
- 测定是否有未响应的中断信号
- 程序完成当前指令后测试是否有未响应的中断信号。
- 如果没有,继续执行下一条指令。
- 如果有,则停止原有进程的执行,准备转去执行中断处理程序,为把处理机的控制权转交给中断处理程序做准备。
- 保护被中断进程的CPU 环境
- 通常由硬件自动将处理机状态字PSW 和程序计数器(PC)中的内容,保存在中断保留区(栈)中
- 然后把被中断进程的CPU现场信息(即包括所有的CPU寄存器,如通用寄存器、段寄存器等内容)都压入中断栈中

- 转入相应的设备处理程序
- 由处理机对各个中断源进行测试,以确定引起本次中断的I/O设备,并发送一应答信号给发出中断请求的进程,使之消除该中断请求信号
- 然后将相应的设备中断处理程序的入口地址装入到程序计数器中,使处理机转向中断处理程序。
- 中断处理

- 恢复被中断进程的现场
- 当中断处理完成以后,便可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中其中包括该程序下一次要执行的指令的地址N+1、处理机状态字PSW,以及各通用寄存器和段寄存器的。
- 这样,当处理机再执行本程序时,便从N+1处开始,最终返回到被中断的程序。

5.2.3 设备驱动程序
- 设备驱动程序通常又称为设备处理程序,它是I/O 进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称之为设备驱动进程。
- 设备驱动程序的主要任务是启动指定设备。
- 设备驱动程序的处理过程
- 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求:例如,将磁盘块号转换为磁盘的盘面、磁道号及扇区号。
- 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
- 发出I/O命令
- 如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;
- 如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。
- 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
- 对I/O设备的控制方式
- 使用轮询的可编程I/O方式
- 使用中断的可编程I/O方式
- 直接存储器访问方式
- I/O通道控制方式
5.2.4 对I/O设备的控制方式
5.2.4.1 使用轮询的可编程I/O方式
- 程序I/O(Programmed I/O)方式,或称为忙 -- 等待方式。
- 处理机向控制器发出一条I/O指令启动输入设备输入数据时,同时把busy置为1,再不断循环测试busy。
- Busy=0,完成输入,处理机读取数据,送入指定单元,完成一次I/O。
- 对状态寄存器中的忙/闲标志busy的检查实现控制。

5.2.4.2 使用中断的可编程I/O方式
- 中断驱动方式可以成指数级地提高CPU的利用率。
- CPU与I/O 设备并行工作
- 在I/O设备输入每个数据的过程中,由于无须CPU干预,因而可使CPU与I/O设备并行工作。仅当输完一个数据时,才需CPU花费极短的时间去做些中断处理。
- 例如,从终端输入一个字符的时间约为100 ms, 而将字符送入终端缓冲区的时间小于 0.1 ms。 若采用程序I/O方式,CPU约有 99.9 ms的时间处于忙—等待中。 采用中断驱动方式后,CPU可利用这 99.9 ms的时间去做其它事情,而仅用 0.1 ms的时间来处理由控制器发来的中断请求。 可见,中断驱动方式可以成百倍地提高CPU的利用率。

5.2.4.3 直接存储器访问方式(DMA)
- DMA控制方式的引入
- 为了进一步减少CPU对I/O的干预而引入了直接存储器访问方式
- DMA控制方式的特点
- 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块;
- 所传送的数据是从设备直接送入内存的,或者相反;
- 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。

- DMA的组成


- DMA的工作流程
- DC:存/读字节数,MAR:输出时的内存源地址,输入时的目标地址

5.2.4.4 I/O通道控制方式
- I/O通道方式是DMA方式的发展,它可进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。
- 可实现CPU、通道和I/O设备三者的并行操作,从而更有效地提高整个系统的资源利用率。

5.3 与设备无关的I/O软件
5.3.1 设备独立性
- 应用程序独立于具体使用的物理设备。
- 为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。
- 因此,系统须具有将逻辑设备名称转换为某物理设备名称的功能
实现设备独立性后,可带来两方面的好处。
- 设备分配时的灵活性
- 进程能以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备已全部分配完毕时,进程才会阻塞。
- 易于实现I/O 重定向
- 所谓I/O 重定向,是指用于I/O 操作的设备可以更换(即重定向),而不必改变应用程序。
5.3.2 设备独立性软件
- 驱动程序是一个与硬件(或设备)紧密相关的软件
- 为了实现设备独立性,必须再在驱动程序之上设置一层软件,称为

设备独立性软件属于内核层,执行所有设备的公有操作,向用户层(或文件层)软件提供统一接口。
这一层软件的主要功能就是前面学习到的映射,保护,分块,缓冲,分配。

5.3.3 SPOOLing技术
- 为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入、 脱机输出技术。
- 该技术是利用专门的外围控制机, 将低速I/O设备上的数据传送到高速磁盘上。
- 再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。
- 核心思想:在快速辅助存储设备(高速磁盘)中建立I/O缓冲区,用于缓存从慢速输入设备流入内存的数据,或缓存从内存流向慢速输出设备的数据。
- 通过SPOOLing技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备


5.4 磁盘系统及磁盘调度
- 提高磁盘I/O速度的主要途径:
- 选择性能好的磁盘
- 采用好的磁盘调度算法
- 设置磁盘高速缓存(Disk Cache)
- 其它方法
- 采用高度可靠、快速的容量磁盘系统--磁盘冗余阵列

5.4.1 磁盘访问时间
- 寻道时间(Ts)
- 磁盘接收到读指令后,磁头从当前位置移到目标磁道位置,所需的时间
- 这是指把磁臂(磁头)移动到指定磁道上所经历的时间。

- 旋转延迟:旋转磁盘,定位数据所在的扇区所需的时间
- 这是指定扇区移动到磁头下面所经历的时间
- 那么 Tr = 1/(2r) (因为平均情况下,需要旋转半圈)
- 转速相当于频率,转速的倒数=周期t,转半圈,再/2.这里注意单位。
- 60*1000/300/2=100ms,60*1000/600/2=50ms

- 数据传输时间
- 这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。
- 转速相当于频率,转速的倒数=周期t,平均每个字节再/N,每个字节的读入写出时间
- N为一条磁道上的字节数,b为读写的字节数

访问时间=寻道时间+旋转延迟+传输时间

- 综上所述,传统上影响磁盘I/O性能的主要技术指标是平均寻道时间和转速。
- 从磁盘调度的方式和访问数据的组织形式上入手,即缩短寻道时间和旋转延迟。
5.4.2 磁盘调度
磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘时,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。
5.4.2.1 先来先服务FCFS
- 根据进程请求访问磁盘的先后次序进行调度。
- 此算法的优点是公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。

5.4.2.2 最短寻道时间优先SSTF(Shortest Seek Time First)
- 该算法选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,SSTF算法虽然能获得较好的寻道性能,但却可能导致某个进程发生“饥饿”现象。
- SSTF算法平均每次磁头移动的距离明显低于FCFS算法的距离,因此性能比FCFS高,SSTF算法曾经广泛使用。

5.4.2.3 扫描(SCAN)算法
- 该算法优先考虑的是磁头当前的移动方向。
- 例如,磁头自里向外移动, 并同时自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向自外向里移动。(又常称之为电梯调度算法 )
- 核心在于临界处需要反向

5.4.2.4 循环扫描(CSCAN)算法
- CSCAN算法规定磁头单向移动。例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描。
- 和Scan区别是:前者是最大挨着最大,最小挨着最小。CSCAN是最大挨着最小。

5.4.2.5 N步扫描算法N-Scan
- 在SSTF、 SCAN及CSCAN几种调度算法中, 都可能出现磁臂停留在某处不动的情况。例如,有一个或几个进程对某一磁道有较高的访问频率, 即这个(些)进程反复请求对某一磁道的I/O操作,从而垄断了整个磁盘设备。 我们把这一现象称为“磁臂粘着”(Armstickiness)。在高密度磁盘上容易出现此情况。
- N步扫描算法将磁盘请求队列分成若干个长度为N的子队列,磁盘调度程序按照FCFS算法依次处理这些子队列,而处理每一个子队列时,则按照SCAN算法。
- 对一个队列处理完后,再处理其他队列。
- 当N值取得很大时,N步扫描算法的性能与SCAN算法的性能相当;当N取值为1时,N步扫描算法退化为FCFS算法。
5.4.2.6 FSCAN算法
- FSCAN算法实质上是N步SCAN算法的简化, 只将磁盘请求队列分成两个子队列
- 一个是由当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按SCAN算法进行处理。
- 在扫描期间,将新出现的所有请求磁盘I/O的进程, 放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。
5.5 习题






注意计算时一定不能出错,一错就全错!!!!

48,13,15








12ms (60*1000/10000/2)=3ms 1/r=6ms,
6/(18*512)*512=0.33ms





- 作者:🐟🐟
- 链接:https://www.imyuyu.top//article/OS/Chapter5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。