• I/O系统


    I/O系统结构:

    I/O管理:

    应用程序若想访问磁盘上文件,要多经过文件系统,之后通过I/O设备管理来对相应的硬件进行操作。

    I/O设备管理包括:

    逻辑I/O,设备驱动程序,中断服务程序

    I/O设备特点:

    I/O性能经常成为系统性能的瓶颈

    操作系统庞大复杂的原因之一:资源多、杂,并发,均来自I/O

    与其他功能联系密切,特别是文件系统

    设备分类:

    块设备
    以数据块为单位存储、传输信息

    特点:
    传输速率较高、可寻址(随机读写)
    字符设备
    以字符为单位存储、传输信息

    特点:
    传输速率低、不可寻址

    I/O管理的目标和任务:

    目标(1) 按照用户的请求,控制设备的各种操作,完成I/O设备与内存之间的数据交换,最终完成用户的I/O请求

    任务:

      实现设备分配与回收

      记录设备的状态

      根据用户的请求和设备的类型,采用一定的分配算法,选择一条数据通路

      执行设备驱动程序,实现真正的I/O操作

      设备中断处理:处理外部设备的中断

      缓冲区管理:管理I/O缓冲区

    目标(2) 建立方便统一的独立于设备的接口

    方便性:向用户提供使用外
    部设备的方便接口,使用户
    编程时

    统一性:对不同的设备采取
    统一的操作方式,即在用户
    程序中使用的是逻辑设备
        逻辑设备与物理设备
        屏蔽硬件细节

    目标(3)

    充分利用各种技术(通道,中断,缓冲,异步I/O等)提高CPU与设备、设备与设备之间的并行工作能力,充分利用资源,提高资源利用率

    目标(4) 保护设备传送或管理的数据应该是安全的、不被破坏的、保密的

    I/O硬件:

    I/O设备一般由机械(设备本身)和电子(设备控制器)两部分组成

    设备控制器作用:

    (1)操作系统将命令写入控制器的接口寄存器(或接口缓冲区)中,以实现输入/输出,并从接口寄存器读取状态信息或结果信息

    (2)当控制器接受一条命令后,可独立于CPU完成指定操作,CPU可以另外执行其他计算;命令完成时,控制器产生一个中断,CPU响应中断,控制转给操作系统;通过读控制器寄存器中的信息,获得操作结果和设备状态

    (3)控制器与设备之间的接口常常是一个低级接口

    (4)控制器的任务:把串行的位流转换为字节块,并进行必要的错误修正:首先,控制器按位进行组装,然后存入控制器内部的缓冲区中形成以字节为单位的块;在对块验证检查和并证明无错误时,再将它复制到内存中

    I/O端口地址:

    接口电路中每个寄存器具有的、唯一的地址,而且是个整数,所有I/O端口地址形成I/O端口空间(受到保护)

    I/O指令形式与I/O地址是相互关联的, 主要有两种形式:
       内存映像编址(内存映像I/O模式)
       I/O独立编址(I/O专用指令)

    内存镜像编址:

    a,b,c代表三种不同的内存编址方式,最后一种应用了缓冲技术,即I/O端口地址映射到内存中某个区域。

    分配给系统中所有端口的地址空间与内存的地址空间统一编址

    把I/O端口看作一个存储单元,对I/O的读写操作等同于对内存的操作

    优点:
      凡是可对内存操作的指令都可对I/O端口操作

      不需要专门的I/O指令

       I/O端口可占有较大的地址空间

       不需要特殊的保护机制来阻止用户进程执行I/O操作,但是OS必须保证那部分覅只空间不能分配给其他用户进程

       可以引用内存的每一条指令也可以引用控制寄存器

    缺点:
       占用内存空间

    I/O独立编址:

    分配给系统中所有端口的地址空间完全独立与内存地址空间无关

    使用专门的I/O指令对端口进行操作

    优点

      外设不占用内存的地址空间,导致编程时易于区分是对内存操作还是对I/O端口操作

    缺点:

      1.I/O端口操作的指令类型少,操作不灵活

               

               例子:在8086/8088中,分配给I/O端口的地址空间64K,0000H~0FFFFH,只能用in和out指令进行读写操作

    2.对一个设备控制寄存器不能进行高速缓存

        例如:

            

    LOOP:TEST PORT-4 //检测端口4是否为0
    BEQ READY //如果为0,转向READY
    BRANCH LOOP //否则,继续测试
    READY:

    第一次引用PORT_4将导致它被高速缓存,随后的引用将只从高速缓存中取值(因为端口已在cache中)并且不会再查询设备,之后当设备最终变为就绪时,软件将没有办法发现这一点,结果循环将永远进行下去,为避免这一情形,硬件必须针对每个页面具备选择性禁用高速缓存的能力,操作系统必须管理选择性高速缓存,所以这一特性为硬件和操作系统两者增添了额外的复杂性

    I/O控制方式:

    (1)可编程I/O(轮询/查询)
    由CPU代表进程给I/O模块发I/O命令,进程进入忙等待,直到操作完成才继续执行

    (2)中断驱动I/O
    为了减少设备驱动程序不断地询问控制器状态寄存器的开销,I/O操作结束后,由设备控制器主动通知设备驱动程序

    (3)DMA

    对于可编程I/O:

    过程:一个应用程序想从设备上读取数据,它会发送信息给设备驱动程序,设备驱动程序会检查设备状态,如果设备为空闲状态,再往设备发送控制命令,之后不断测试设备是否完成任务,完成后就把数据返回到应用程序

    中断驱动I/O:

    过程:

    一个应用程序想从设备上读取数据,它会发送信息给设备驱动程序,设备驱动程序会检查设备状态,如果设备为空闲状态,再往设备发送控制命令,然后把设备状态记录在设备状态表中,若设备完成后就向CPU发送中断信号,CPU接收到该信号,就执行中断处理程序,若发现I/O设备本次操作正常,将CPU执行权再交给设备处理程序,其将设备中对应设备信息取出,发送给应用程序。

     I/O软件组成:

    分层思想:

    把I/O软件组织成多个层次

    每一层都执行操作系统所需要的功能的一个相关子集,它依赖于更低一层所执行的更原始的功能,从而可以隐藏这些功能的细节;同时,它又给高一层提供服务

    较低层考虑硬件的特性,并向较高层软件提供接口

    较高层不依赖于硬件,并向用户提供一个友好的、清晰的、简单的、功能更强的接口

    I/O软件层次:

    (1)用户进程层执行输入输出系统调用,对I/O数据进行格式化,为假脱机输入/输出作准备

    (2)独立于设备的软件实现设备的命名、设备的保护、成块处理、缓冲技术和设备分配

    (3)设备驱动程序设置设备寄存器、检查设备的执行状态

    (4)中断处理程序负责I/O完成时,唤醒设备驱动程序进程,进行中断处理

    (5)硬件层实现物理I/O的操作

    I/O相关技术:

    缓冲技术的引入:

    其是操作系统中最早引入的技术
      → 解决CPU与I/O设备之间速度的不匹配问题:凡是数据到达和离去速度不匹配的地方均可采用缓冲技术

           → 提高CPU与I/O设备之间的并行性

           → 减少了I/O设备对CPU的中断请求次数,放宽CPU对中断响应时间的要求

    缓冲区分类:
    硬缓冲:由硬件寄存器实现(例如:设备中设置的缓冲区)

    软缓冲:在内存中开辟一个空间,用作缓冲区

    缓冲区管理:

    1.单缓冲
    2.双缓冲
    3.缓冲池(多缓冲,循环缓冲):统一管理多个缓冲区,采用有界缓冲区的生产者/消费者模型对缓冲池中的缓冲区进行循环使用

    例如:终端输入软件中的键盘驱动程序其任务之一:收集字符,所使用的缓冲区

    I/O设备管理:

    有关的数据结构:

    描述设备、控制器等部件的表格:系统中常常为每一个部件、每一台设备分别设置一张表格,常称为设备表或部件控制块。这类表格具体描述设备的类型、标识符、状态,以及当前使用者的进程标识符等
    建立同类资源的队列:系统为了方便对I/O设备的分配管理,通常在设备表的基础上通过指针将相同物理属性的设备连成队列(称设备队列)
    面向进程I/O请求的动态数据结构:每当进程发出I/O请求时,系统建立一张表格(称I/O请求包),将此次I/O请求的参数填入表中,同时也将该I/O有关的系统缓冲区地址等信息填入表中。I/O请求包随着I/O的完成而被删除
    建立I/O队列:如请求包队列

    独占设备的分配:

    静态分配:

    在进程运行前, 完成设备分配;运行结束时,收回设备

    缺点:设备利用率低

    动态分配:

    在进程运行过程中,当用户提出设备要求时,进行分配,一旦停止使用立即收回

    优点:效率好;

    缺点:分配策略不好时, 产生死锁

    分时式共享设备的分配:

    1.所谓分时式共享就是以一次I/O为单位分时使用设备,不同进程的I/O操作请求以排队方式分时地占用设备进行I/O

    2.由于同时有多个进程同时访问,且访问频繁,就会影响整个设备使用效率,影响系统效率。因此要考虑多个访问请求到达时服务的顺序,使平均服务时间越短越好

    设备驱动程序:

    1.与设备密切相关的代码放在设备驱动程序中,每个设备驱动程序处理一种设备类型
    2.一般,设备驱动程序的任务是接收来自与设备无关的上层软件的抽象请求,并执行这个请求
    3.每一个控制器都设有一个或多个设备寄存器,用来存放向设备发送的命令和参数。设备驱动程序负责释放这些命令,并监督它们正确执行
    4.在设备驱动程序的进程释放一条或多条命令后,系统有两种处理方式,多数情况下,执行设备驱动程序的进程必须等待命令完成,这样,在命令开始执行后,它阻塞自已,直到中断处理时将它解除阻塞为止;而在其它情况下,命令执行不必延迟就很快完成

    设备驱动程序与外界的接口:

    1.与操作系统的接口:为实现设备无关性,设备作为特殊文件处理。用户的I/O请求、对命令的合法性检查以及参数处理在文件系统中完成。在需要各种设备执行具体操作时,通过相应数据结构转入不同的设备驱动程序

    2.与系统引导的接口(初始化,包括分配数据结构,建立设备的请求队列)

    3.与设备的接口

     驱动程序中函数:

    驱动程序初始化函数(如向操作系统登记该驱动程序的接口函数,该初始化函数在系统启动时或驱动程序安装入内核时执行)

    驱动程序卸载函数

    申请设备函数

    释放设备函数

    I/O操作函数:对独占设备,包含启动I/O的指令;对共享设备,将I/O请求形成一个请求包,排到设备请求队列,如果请求队列空,则直接启动设备

    中断处理函数:对I/O完成做善后处理,一般是唤醒等待刚完成I/O请求的阻塞进程,使其能进一步做后续工作;如果存在I/O请求队列,则启动下一个I/O请求

    I/O进程:

    专门处理系统中的I/O请求和I/O中断工作

    I/O请求的进入
       用户程序:调用send将I/O请求发送给I/O进程;调用block将自己阻塞,直到I/O任务完成后被唤醒
       系统:利用wakeup唤醒I/O进程,完成用户所要求的I/O处理
    I/O中断的进入
       当I/O中断发生时,内核中的中断处理程序发一条消息给I/O进程,由I/O进程负责判断并处理中断

    对于I/O进程特点:

    1.是系统进程,一般赋予最高优先级。一旦被唤醒,它可以很快抢占处理机投入运行
    2.I/O进程开始运行后,首先关闭中断,然后用receive去接收消息

    接收消息情况:

    1.没有消息,则开中断,将自己阻塞

    2.有消息,则判断消息类型(I/O请求或I/O中断)
      a. I/O请求
        准备通道程序,发出启动I/O指令,继续判断有无消息
      b. I/O中断,进一步判断正常或异常结束

       正常:唤醒要求进行I/O操作的进程

            异常:转入相应的错误处理程序

    I/O性能:

    为了使CPU利用率尽可能不被I/O降低,使CPU尽可能摆脱I/O,我们:

    减少或缓解速度差距 使用 缓冲技术
    使CPU不等待I/O 使用 异步I/O
    让CPU摆脱I/O操作 使用 DMA、通道

    异步传输(不要求立刻返回结果):

    通过异步I/O,应用程序可以启动一个I/O操作,然后在I/O请求执行的同时继续处理
    基本思想:填充I/O操作间等待的CPU时间

    同步I/O(等待直到返回一个结果):

    应用程序被阻塞直到I/O操作完成

          作者水平有限,文章肯定有错还请各位指点!!!感谢!!!

  • 相关阅读:
    WSDL
    对协程的理解
    调用webServer
    待看
    BZOJ4668 冷战(并查集)
    BZOJ4651 NOI2016网格(割点)
    Lyft Level 5 Challenge 2018
    BZOJ3073 PA2011Journeys(线段树+bfs)
    BZOJ4602 SDOI2016齿轮(搜索)
    BZOJ4597 SHOI2016随机序列(线段树)
  • 原文地址:https://www.cnblogs.com/chaunceyctx/p/7252891.html
Copyright © 2020-2023  润新知