zoukankan      html  css  js  c++  java
  • 操作系统-I/O(5)I/O软件的层次结构

    IO软件的设计目标:
    (1)高效率:改善设备效率,尤其是磁盘I/O操作的效率
    (2)通用性:用统一的标准来管理所有设备
    IO软件的设计思路: 把软件组织成层次结构,低层软件用来屏蔽硬件细节,高层软件向用户提供简洁、友善的界面
    IO软件设计中主要考虑的问题:
    (1)设备无关性:编写访问文件的程序与具体设备无关
    (2)出错处理:低层软件能处理的错误不让高层软件感知
    (3)同步/异步传输:支持阻塞和中断驱动两种工作方式
    (4)缓冲技术:建立数据缓冲区,提高吞吐率
    I/O软件的层次结构:
    • I/O中断处理程序
    位于操作系统底层,与硬件设备密切相关,与系统其余部分尽可能少地发生联系
    进程请求I/O操作时,通常被挂起,直到数据传输结束后并产生I/O中断时,操作系统接管CPU后转向中断处理程序
    当设备向CPU提出中断请求时,CPU响应请求并转入中断处理程序
    功能:检查设备状态寄存器内容,判断产生中断的原因,根据I/O操作的完成情况进行相应的处理
    1. 如果数据传输有错,向上层软件报告设备的出错信息,实施重新执行
    2. 如果正常结束,唤醒等待传输的进程,使其转换为就绪态
    3. 如果有等待传输的I/O命令,通知相关软件启动下一个I/O请求
    • 设备驱动程序
    包括与设备密切相关的所有代码,从独立于设备的软件中接收并执行I/O请求
    把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行;监督设备是否正确执行,管理数据缓冲区,进行必要的纠错处理
    功能:
    1. 设备初始化:在系统初次启动或设备传输数据时,预置设备和控制器以及通道状态
    2. 执行设备驱动例程:负责启动设备,进行数据传输;对于具有通道方式,还负责生成通道指令和通道程序,启动通道工作
    3. 调用和执行中断处理程序:负责处理设备和控制器及通道所发出的各种中断
    设备驱动程序分为:
    (1)整体驱动程序直接向操作系统提供接口和控制硬件。适用于功能简单的驱动程序,效率较高,但较难迁移
    (2)分层驱动程序将驱动程序分成多层,放在栈中,系统接到I/O请求时先调用栈顶的驱动程序,栈顶的驱动程序可以直接处理请求或向下调用更低层的驱动程序,直至请求被处理,适用于功能复杂、重用性要求较高的驱动程序,结构清晰且便于移植,但会增加一部分系统开销。
    外设种类繁多、其控制接口不一,导致不同外设的设备驱动程序千差万别, 因而设备驱动程序与设备相关每个设备驱动程序只处理一种设备,或者一类紧密相关的设备。每个外设或每类外设都有一个设备控制器,其中包含各种I/O端口。 CPU通过执行设备驱动程序中的I/O指令访问各种I/O端口。设备所采用的I/O控制方式不同,驱动程序的实现方式也不同:
    1. 程序直接控制:驱动程序完成用户程序的I/O请求后才结束。这种情况下,用户进程在I/O过程中不会被阻塞,内核空间的I/O软件一直代表用户进程在内核态进行I/O处理 。
    2. 中断控制:驱动程序启动第一次I/O操作后,将调出其他进程执行,而当前用户进程被阻塞。在CPU执行其他进程的同时,外设进行I/O操作,此时, CPU和外设并行工作。外设完成I/O时,向CPU发中断请求,然后CPU调出相应中断服务程序执行。在中断服务程序中再次启动I/O操作。
    3. DMA控制:驱动程序对DMA控制器初始化后,便发送“启动DMA传送” 命令,外设开始进行I/O操作并在外设和主存间传送数据。同时CPU执行处理器调度程序,转其他进程执行,当前用户进程被阻塞。DMA控制器完成所有I/O任务后,向CPU发送一个“DMA完成”中断请求信号。
    • 独立于设备的I/O软件
    执行适用于所有设备的常用I/O功能,功能包括:
    (1)设备驱动程序统一接口:
    操作系统为所有外设的设备驱动程序规定一个统一接口,这样,新设备的驱动程序只要按统一接口规范来编制,就可在不修改操作系统的情况下,添加新设备驱动程序并使用新的外设进行I/O。
    所有设备都抽象成文件,设备名和文件名在形式上没有差别,设备和文件具有统一的接口,不同设备名和文件名被映射到对应设备驱动程序。
    (2)设备命名:通过路径名寻址设备
    (3)设备保护:检查用户是否有权访问所申请设备
    (4)提供与设备无关的数据单位:字符数量,块尺寸
    例如,为了为所有的块设备、字符设备提供一个统一的抽象视图,以隐藏不同块设备、字符设备之间的差异,与设备无关的I/O软件为所有块设备、字符设备设置统一的逻辑块大小。这样,高层I/O软件就只需处理简化的抽象设备,从而在高层软件中简化了数据定位等处理 。
    (5)缓冲技术:传输速率、时间约束,不能直接送达目的地。每个设备的I/O都需使用内核缓冲区,因而缓冲区的申请和管理等处理是所有设备公共的,可包含在与设备无关的I/O软件部分
    (6)设备分配和状态跟踪:分配不同类型的设备
    (7)错误处理和报告:
    I/O操作在内核态执行时所发生的错误信息,都通过与设备无关的I/O软件返回给用户进程,也即:错误处理框架与设备无关。
    直接返回编程等错误,无需设备驱动程序处理,如请求了不可能的I/O操作、写信息到一个输入设备或从一个输出设备读信息、指定了一个无效缓冲区地址或者参数、指定了不存在的设备等。
    有些错误由设备驱动程序检测出来并处理,若驱动程序无法处理,则将错误信息返回给设备无关I/O软件,再由设备无关I/O软件返回给用户进程,如写一个已被破坏的磁盘扇区、打印机缺纸、读一个已关闭的设备等。
    (8)打开和关闭文件:
    对设备或文件进行打开或关闭等I/O函数所对应的系统调用,并不涉及具体的I/O操作,只要直接对主存中的一些数据结构进行修改即可 ,这部分工作也由设备无关软件来处理。
    • 用户空间的I/O软件
    库函数:一小部分I/O软件不在操作系统中,是与应用程序链接在一起的库函数,甚至完全由运行于用户态的程序组成。系统调用通常由库函数封装后供用户使用,封装函数只是将系统调用所用的参数放在合适位置,然后执行访管指令来陷入内核,再由内核函数实现真正的I/O操作。
    SPOOLing软件:在内核外运行的系统I/O软件,采用预输入、缓输出和井管理技术,通过创建守护进程和特殊目录解决独占型设备的空占问题
  • 相关阅读:
    cocos2d
    Java中== equals hashcode浅析[转]
    javamail发送邮件的简单实例[转]
    跨平台 游戏 引擎
    7 个漂亮的 JavaScript 的时间轴组件 [转]
    Java中的equals学习小结 [转]
    javamail gmail
    JavaMai——邮箱验证用户注册
    daomain
    oDesk Exam
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/9328087.html
Copyright © 2011-2022 走看看