美文网首页
Chapter6输入输出系统

Chapter6输入输出系统

作者: 我好菜啊_ | 来源:发表于2019-01-09 00:38 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Chapter6输入输出系统

          本文链接:https://www.haomeiwen.com/subject/hvebrqtx.html