I/O软件层次

本文详细介绍了计算机系统中I/O软件的层次结构及其功能,包括用户层软件、设备独立性软件、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完成的进程应该被阻塞,因此需要进程切换,而进程切换比如需要中断处理

在这里插入图片描述

总结回顾

在这里插入图片描述

### ### IO设备的定义 IO设备(输入/输出设备)是计算机系统中用于实现数据在计算机与外部环境之间传输的硬件设备。这些设备能够将外部数据输入到计算机中,或将计算机处理后的数据输出到外部介质。IO设备通常由机械部件和电子部件组成,其中机械部分负责执行具体的物理操作,电子部分负责与CPU通信并控制设备的运行状态[^2]。 例如,键盘和鼠标是典型的输入设备,负责将用户的操作转化为计算机可识别的数据;显示器和打印机则是典型的输出设备,负责将计算机处理后的信息以可视或可打印的形式呈现给用户。此外,硬盘、固态硬盘(SSD)和网络接口卡(NIC)等设备则同时具备输入和输出功能,能够实现数据的双向传输[^1]。 ### ### IO设备的作用 IO设备的主要作用是实现计算机与外部世界的数据交互。这种交互可以分为两类:输入和输出。输入设备负责将外部信息(如用户输入、传感器数据等)转换为计算机可以处理的数字信号;输出设备则负责将计算机处理后的数据转换为用户或其他外部系统可以理解的形式[^1]。 IO设备还承担着与CPU进行通信的任务,确保数据的准确传输和设备状态的反馈。例如,当一个外围设备准备就绪时,它可以通过中断机制向CPU发出信号,请求处理相应的IO操作。这种方式避免了CPU长时间等待设备完成操作,提高了系统的整体效率[^3]。 此外,IO设备还支持多种控制方式,如程序直接控制、中断驱动、DMA(直接内存访问)和通道控制,以适应不同设备的性能需求。例如,中断驱动方式允许设备在完成操作后主动通知CPU,而DMA方式则允许设备直接与内存交换数据,减少了CPU的干预,从而提高IO操作的效率[^1]。 ### ### IO设备的分类 IO设备可以根据数据传输速率和工作方式进行分类。常见的IO设备包括: - **低速设备**:如键盘、鼠标和打印机,其数据传输速率较低,通常涉及机械运动,响应时间较长。 - **高速设备**:如固态硬盘(SSD)和高速网络接口卡(NIC),具备较高的数据传输能力,能够满足高性能计算需求。 根据IO设备的功能,还可以将其分为输入设备、输出设备和存储设备。输入设备负责接收外部数据,输出设备负责将数据发送到外部环境,而存储设备则用于长期保存数据,如硬盘和光盘驱动器[^1]。 ### ### IO设备的控制与优化 为了提高IO操作的效率,计算机系统采用多种控制方式,包括程序直接控制(轮询)、中断驱动、DMA(直接内存访问)和通道控制。其中,中断驱动方式允许IO设备在完成操作后主动通知CPU,避免了CPU的空等现象;DMA方式则允许设备直接与内存交换数据,减少了CPU的干预;通道控制进一步提高了IO操作的独立性,使CPU可以专注于其他任务[^1]。 此外,操作系统通常采用缓冲技术来缓解CPU与IO设备之间的速度差异。常见的缓冲方式包括单缓冲、双缓冲、循环缓冲和缓冲池。这些技术通过在内存中设置数据缓冲区,使得数据的输入和输出可以异步进行,从而提高整体系统性能。例如,在单缓冲模式下,计算进程可以从缓冲区读取数据,而输入进程则可以在另一个缓冲区中继续写入新的数据[^1]。 ### ### IO设备的软件支持 操作系统中的IO子系统由多个层次组成,包括用户层软件、设备独立性软件、设备驱动程序和中断处理程序等。这些层次协同工作,确保IO操作的正确性和高效性。例如,设备独立性软件负责屏蔽不同设备的硬件差异,为上层应用提供统一的接口;设备驱动程序则直接与硬件交互,实现特定设备的数据读写操作[^1]。 在编程中,IO设备的访问通常涉及特定的库和API。例如,在Java中,所有的IO类和接口都位于`java.io`包下,其中最重要的包括`File`、`OutputStream`、`InputStream`、`Writer`和`Reader`等类,以及`Serializable`接口。这些工具使得开发者可以方便地实现文件读写、网络通信等IO操作[^4]。 ```java import java.io.*; public class IOExample { public static void main(String[] args) { try (InputStream is = new FileInputStream("input.txt"); OutputStream os = new FileOutputStream("output.txt")) { int data; while ((data = is.read()) != -1) { os.write(data); } } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码展示了如何使用Java的IO类实现文件的复制操作。通过`InputStream`和`OutputStream`,程序可以逐字节地读取和写入数据,实现基本的IO功能。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库里不会投三分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值