• I/O软件层次


    I/O软件层次总览

    在这里插入图片描述

    • 这种思想每一层会利用其下次提供的服务,实现其他功能,并屏蔽实现的具体细节,向高层提供服务(这种封装思想在我们计网中也应用了,TCP/IP五层协议)

    用户层软件

    在这里插入图片描述

    • 用户层软件实现了与用户交互的接口,用户可以直接使用该层提供的,与I/O操作相关的库函数对设备进行操作 比如 printf(“hello,world”);我们的用户层软件通过系统调用来请求我们操作系统内核的服务

      • 用户层软件会将用户请求翻译成格式化的I/O请求,比如我们的printf(“hello,world”)会被翻译成等价的write系统调用,用户层软件也会在系统调用时填入相应的参数

    设备独立性软件

    六大功能

    在这里插入图片描述

    • 向用户层提供统一的调用接口(read/write系统调用)
    • 设备保护
      • 我们操作系统中,将设备被看作一种特殊的文件,比如不同的用户对各个文件发访问权限不一样的,同理对设备的访问权限也不一样
    • 差错处理
      • 设备独立性软件需要对一些设备的错误进行处理

    在这里插入图片描述

    • 设备的分配与回收
    • 数据缓冲区管理
      • 可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异

    在这里插入图片描述

    • 建立逻辑设备名到物理设备名的映射关系,根据设备类选择调用相应的驱动程序
      • 用户或者用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名(比如去打印的时候,需要选择打印机1/打印机2/打印机3,其实这些都是逻辑设备名)

    逻辑设备表 LUT

    在这里插入图片描述

    • 设备独立性软件通过逻辑设备表来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序
    • 两种逻辑设备表
      • 整个系统只设置一张LUT,这也意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适合于单用户操作系统
      • 为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户系统,系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB

    I/O调度

    在这里插入图片描述

    • I/O调度用某种算法确定一个好的顺序来处理各个I/O请求
    • 算法类似磁盘调度算法

    设备驱动程序

    在这里插入图片描述

    在这里插入图片描述

    • 因为各式各样的设备,外形不要太,其内部的电子部件——I/O控制器也可能是不同的,不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家提供与设备相应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作
      • 比如我们第一次插入鼠标的时候,会自动下载对应的驱动程序

    在这里插入图片描述

    • 主要负责对硬件设备的具体控制,将上层发出一系列的命令(read/write)转换为特定设备能听懂的一系列操作,包括设置设备寄存器,检查设备状态等

    中断程序程序

    在这里插入图片描述

    • 我们驱动程序向I/O控制器发出具体命令,等待I/O完成的进程应该被阻塞,因此需要进程切换,而进程切换比如需要中断处理

    在这里插入图片描述

    总结回顾

    在这里插入图片描述

  • 相关阅读:
    ExceptionInInitializerError
    json数据格式的理解(前+后)
    resubmit 渐进式防重复提交框架简介
    盒模型的五个属性的基本语法
    SpringBoot自动配置原理讲解
    Pytorch 实战 LESSON 5 基本优化方法与最小二乘法
    STC 51单片机47——外部中断控制流水灯
    SSD上 NVIDIA Jetson Orin NANO系統如何刷
    4-Dubbo架构设计与底层原理-服务导出源码分析(上)
    iOS 关于UIAlertController常见使用方法
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/127741660