I/O系统管理I/O设备和相应的设备控制器,完成用户提出的I/O请求
I/O系统的基本功能
1.隐藏物理设备的细节
不同的设备配有相应的设备控制器,包含若干用于存放控制命令的寄存器和存放参数寄存器。用户通过这些命令和参数来控制外部设备执行所要求的操作。
不同的设备有不同的命令和参数,I/O系统必须通过对设备加以适当的抽象,以隐藏掉物理设备的实现细节,仅向上层提供少量的,抽象的读写命令(read ,write之类的)
2.与设备的无关性
不仅可以使用抽象的I/O命令,还可使用抽象的逻辑设备名来使用设备。
3.提高处理机和I/O设备的利用率
尽可能让处理机和I/O设备并行操作
4.对I/O设备进行控制
这是驱动程序的功能,有四种控制方式
轮询;中断;直接存储器访问呢;I/O通道
5.确保对设备的正确共享
6.错误处理
临时性错误/持久性错误
层次式结构的I/O系统
将系统中的设备管理模块分为若干层次,每层都是利用下层的服务,完成输入输出功能中的某些子功能,并屏蔽这些功能实现的细节,向高层提供服务。
I/O软件的层次结构
1.用户层I/O软件
实现与用户交互的接口
2.设备独立性软件
实现用户程序与设备驱动器的统一接口
映射,保护,分块,缓冲,分配
(包括设备命名,设备分配,数据缓冲和数据高速缓存等)
(比如把一个磁盘呈现出分成好几个的状态)
3.设备驱动程序
与硬件直接相关,用于实现系统对设备发出的操作指令
设置设备寄存器,检查状态
将上层发来的抽象I/O请求转为对I/O设备的具体命令和参数,并把它装入到设备控制器中的命令和参数寄存器中。
每类设备的驱动程序都不相同,必须由设备制造商提供。
4.中断处理程序
(下面就是硬件了)
接收I/O设备发来的中断请求。
pic
中断处理程序,设备驱动程序,设备独立性软件合在一起称为I/O系统。
I/O系统接口
1.块设备接口
(该接口反映了大部分磁盘存储器和光盘存储器的本质特征)
(块设备:数据的存取和传输都是以数据块为单位。传输速率高(说磁盘慢是相对于内存慢);可寻址。)
将磁盘的二维结构转化为一维的线性序列。
将抽象命令映射为底层操作,比如将逻辑块号转换为磁盘的盘面,磁道和扇区等。
(虚拟存储器系统也需要使用块设备接口)
2.流设备接口(字符设备接口)
(反应了大部分字符设备的本质特质)
(字符设备:数据的存取和传输以字符为单位,如键盘,打印机。传输速率较低;不可寻址。顺序存取,建立一个字符缓冲区。常采用中断驱动程序)
get,put操作。
in-control指令(包含许多参数,每个参数表示一个与具体设备相关的特定功能)
大多数流设备都属于独占设备,提供了打开和关闭操作。
3.网络通信接口
I/O设备
I/O设备一般是由执行I/O操作的机械部分(一般的I/O设备),执行控制I/O的电子部件(设备控制器或适配器)
控制器常做成印刷电路卡,所以也常称为控制卡,接口卡,网卡。可插到计算机的扩展槽中。
I/O设备的类型
按使用特性分类:存储设备,I/O设备(输入设备,输出设备,交互式设备)
按传输速率分类:低速设备(键盘,鼠标器),中速设备(行式打印机,激光打印机),高速设备(磁盘机,关盘机)
设备与控制器之间的接口
pic
1)数据信号线
对于输入设备来说,由外界输入的信号经转换器转换后,所形成的数据通常先送入缓冲器,当数据量达到一定比特后,再从缓冲器通过一组数据信号线传送给设备控制器。
2)控制信号线
规定了设备将要执行的操作。
3)状态信号线
传送指示设备当前状态的信号。
内存映像I/O
利用特定的I/O指令来访问I/O设备,这样会使访问内存和访问设备需要两种不同的指令。于是就有了内存映像I/O,在编址上不再区分内存单元和设备控制器中的寄存器地址。当处在某个范围时被认为是内存地址,否则是后者。
I/O通道
虽然在CPU与I/O设备之间增加了设备控制器后,已大大减少CPU对I/O的干预,但当主机所配置的外设很多时,CPU的负担仍然很重。为此在CPU和设备控制器之间又增设了I/O通道。
CPU只需向通道发送一条I/O指令;通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序;仅当通道完成了规定的I/O任务之后,才向CPU发中断信号。
通道类型
由于外设类型较多,传输速率相差较大,所以通道有多种类型
1)字节多路通道
按字节交叉方式工作的通道,含有许多子通道,每个子通道连接一台I/O设备。这些子通道按时间片轮转方式共享主通道。只要字节多路通道扫描每个子通道的速率足够快,而连接到子通道上的设备的速率又不是很高,便不会丢失信息。
2)数组选择通道
字节多路通道不适于连接高速设备,于是就有了按数组方式进行数据传送的数组选择通道。但只有一个分配型子通道,一段时间只能执行一道通道程序,通道的利用率很低。
3)数组多路通道
既具有很高的数据传输速率,又能获得令人满意的通道利用率。
瓶颈问题
pic
中断:CPU对I/O设备发来的中断信号的一种响应。
陷入:由CPU内部事件所引起的中断。
中断向量表
中断号+中断处理程序入口
当I/O设备发来中断请求信号时,由中断控制器确定该请求的中断号。
中断优先级
键盘的紧急程度不如打印机,打印机的不如磁盘。
对多中断源的处理方式
1)屏蔽(禁止)中断
2)嵌套中断
高优先级的中断请求可以抢占正在运行的低优先级中断的处理机。
中断处理程序
当一个进程请求I/O操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,解除相应进程的阻塞状态,然后返回继续去执行刚才被中断的程序。
1)程序每当执行完当前指令后,处理机都要测试是否有未响应的中断信号。
2)保护被中断的进程的CPU环境。会被保存到中断栈中。
3)处理机对各个中断源进行测试,确定引起本次中断的I/O设备,发送确认信号;设备收到确认信号之后就取消它所发出的中断请求信号;将相应的设备中断处理程序的入口地址装入到PC中。
4)中断处理。先从设备控制器中读出设备状态,判断是正常完成中断还是异常结束中断。
5)恢复CPU的现场并退出中断,如果采用的是屏蔽中断的话就会返回被中断程序,如果采用嵌套中断且有优先级更高的中断请求的话,系统就优先处理优先级更高的中断请求。
有些系统会把中断处理中一些共同的部分集中起来,形成中断总控程序。
设备驱动程序
应具有以下功能
1)接收与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的底层操作序列。
2)检查用户I/O请求的合法性
3)发出I/O命令
如果设备忙碌,则将请求者的请求块挂在设备队列上等待。
4)及时响应由设备控制器发出的中断请求
设备驱动程序的处理过程
1)将抽象要求转换为具体要求
2)对服务请求进行校验
3)检查设备的状态
每个设备控制器中都配置有一个状态寄存器,先把装药寄存器的内容读到CPU的某个寄存器中,通过测试寄存器中的不同位来了解设备的状态。
4)传送必要的参数
传送数据及与控制本次数据传输有关的参数
5)启动I/O设备
向控制器中的命令寄存器传送相应的控制命令;如果是写命令,驱动程序便把一个字符或字传给控制器;如果是读命令,则驱动程序等待数据接收,通过读入控制器的状态寄存器中状态字的方法来确定数据是否到达。
启动了一个I/O操作后,驱动程序便把控制返回给I/O系统,把自己阻塞起来,直到中断到来时再被唤醒。
对I/O设备的控制方式
pic
1.使用轮询的可编程I/O方式
比如对于输入设备,启动输入设备输入数据时,同时把状态寄存器中的忙/闲标志busy置为1;然后不断循环测试busy(轮询);当busy=1,说明还没输完,继续测试;busy=0,说明输入机已将输入数据送入控制器的数据存储器中了;将数据寄存器中的数据取出,送入内存指定单元;接着再去读下一个数据,置busy为1
2.使用中断的可编程I/O方式
3.直接存储器访问方式
中断方式是以字(节)为单位进行I/O的,每当完成一个字(节)的I/O时,控制器便要向CPU请求一次中断,如果将这个方式用于块设备的I/O就很低效。
于是引入了直接存储器访问
1)数据传输的基本单位是数据块
2)直接在设备与内存之间传输
3)尽在一个或多个数据块的开始和结束才需要CPU的干预
DMA由三部分组成:主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。
pic
命令/状态寄存器CR:接收从I/O命令,控制信息,设备状态
内存地址寄存器MAR
数据寄存器DR
数据计数器DC
DMA工作过程
pic
4.I/O通道控制方式
DMA相对于中断来说已经将CPU的干预从以字(节)为单位减少到以数据块为单位,但CPU每发出一条I/O指令也只能读/写一个连续的数据块。
(DMA只能将连续的多个字节放到一段连续的内存中)如果需要一次读多个数据块且将它们分别传送到不同的内存区域,或者相反时,则需要由CPU分别发出多条I/O指令及进行多次中断。
引入通道后,可将干预减少到以一组数据块的读/写及有关的控制和管理为单位。
CPU,通道,I/O设备三者并行。
向I/O通道发送一条I/O指令,以给出其要执行的通道程序的首址和要访问的I/O设备,通道接到该指令后,通过执行通道程序便可完成I/O任务。
通道指令包含:操作码,内存地址,计数,通道程序结束位P(P=1时表示是最后一条指令),记录结束标志R(R=0,表明本条指令与下一条指令所处理的数据属于同一个记录)
与设备无关的I/O软件
把物理设备抽象成逻辑设备
实现I/O重定向,用于I/O操作的设备可以更换,而不必改变应用程序。
包括了执行所有设备公有操作的软件
1.设备驱动程序的统一接口
2.缓冲管理
3.差错控制(暂时性错误(驱动器程序处理不了的话就由独立性软件来);持久性错误)
4.对独立设备的分配与回收
5.独立于设备的逻辑数据块
设备分配
设备控制表DCT
系统为每个设备都配置了一张设备控制表,用于记录设备的情况。
pic
控制器控制表COCT(用于记录控制器情况)
通道控制表(CHCT)
系统设备表(SDT)
设备分配时要考虑设备的固有属性(独占设备,共享设备,虚拟设备),设备分配算法(先来先服务,优先级高者优先),设备分配中的安全性
当某进程提出I/O请求后,系统的设备分配程序可按下述步骤进行设备分配
1)分配设备:查找SDT,找到DCT,判断忙不忙,忙就把进程的PCB挂在设备队列上;否则。计算本次设备的安全性,安全就分配。
2)分配控制器:去DCT中找与该设备连接的控制器COCT
3)分配通道:在COCT中找到与该控制器连接的通道CHCT
只有在设备,控制器,通道三者都分配成功时,这次的设备分配才算成功。然后就可以启动该I/O设备进行数据传送。
逻辑设备名到物理设备名映射的实现
逻辑设备表LUT
逻辑设备名+物理设备名+设备驱动器的入口地址
两种方式
1)整个系统中值设置一张LUT
2)每个用户一张LUT
磁盘存储器的性能和调度
盘片-》两个存储面-》若干个磁道-》若干个扇区
pic
一个物理记录存储在一个扇区上,磁盘上能存储的物理记录块数目是由扇区数,磁道数以及盘面数来决定的。
现代磁盘不再把内外磁道划分为相同数目的扇区,而是将盘面划分成若干条环带,同一环带内的所有磁道具有相同的扇区数。
在磁盘上存储数据,必须先将磁盘低级格式化。然后在进行一次高级格式化。
磁盘类型
硬盘/软盘,单片盘/多片盘,固定头磁盘/移动头磁盘
固定头磁盘:每条磁道上都有一读/写头,可以进行并行读写,主要用于大容量磁盘。
移动头磁盘:仅由一个磁头,要进行寻道,串行读写,用于中小型磁盘设备中。
磁盘访问时间
磁盘设备在工作时以恒定速率旋转,为了读写,磁头必须能移动到所指定的磁道上,并等待所指定的扇区的开始位置旋转到磁头下。
寻道时间Ts:启动磁臂的时间s,磁头移动n条磁道
Ts=m*n+s
m是一常数,与磁盘驱动器的速度有关。
旋转延迟时间Ti:把指定扇区移动到磁头下需要的时间,磁盘每秒钟的转速r 则平均Ti为1/2r
传输时间Tt:把数据从磁盘读出或向磁盘写入所需要的时间,每次读写的字节数b,一条磁道上的字节数N(rN为每秒可访问的字节数)
Tt=b/rN
Ta=Ts+1/2r+b/rN
传输时间所占的比例是十分小的,适当地集中数据传输,有利于提高传输效率。
磁盘调度算法
先来先服务FCFS
最短寻道时间优先SSTF
扫描算法SCAN:SSTF可能导致优先级的进程发生饥饿。SCAN更优先考虑磁头当前的移动方向。比如当磁头正在向外移动时,下一个访问的对象应该是即在当前磁道之外,又是距离最近的。当没有更外面的时候,就去里当前磁道最近的,然后反向移动。又称电梯调度算法。
循环扫描算法CSCAN:与SCAN不同的时,没有更外的时候就去最里的,然后以与刚才相同的方向移动。
NStepSCAN:避免当一个磁道反复被请求时的磁臂粘着现象。将磁盘请求队列分成若干个长度为N的子队列,按FCFS处理子队列,处理某一个队列时按SCAN。当正在处理某个子队列时,有新的磁盘请求来了,把新请求放到其他队列。
FSCAN:只把磁盘请求分为两个队列,一个是当前所有请求磁盘I/O的进程形成的队列,另一个是扫描期间,新出现的所有请求磁盘I/O的进程的队列。
https://blog.csdn.net/qq_42324348/article/details/85402826
网友评论