本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第六章 输入输出系统
输入输出系统是操作系统对计算机系统中除 CPU 和内存之外的外部设备进行管理、对数据传输进行控制的模块,是操作系统资源管理中最复杂、最多样化的部分。
I/O系统的功能、模型和接口
I/O 系统:用于实现数据输入、输出及数据存储的系统。
I/O系统的任务和基本功能
- 任务
- 对 I/O 设备进行控制,完成用户提出的输入/输出要求。
- 根据设备请求的情况,按照一定的算法实现对 I/O 设备的合理分配。
- 提高设备利用率以及设备与 CPU 的并行操作程度。
- 基本功能
- 隐藏物理设备的细节(向上提供抽象的命令)
- 实现与设备的无关性(提高可移植性;即插即用)
- 提高处理机和 I/O 设备的利用率(并行)
- 对 I/O 设备进行控制(驱动程序)
- 确保对设备的正确共享
- 其他功能(错误处理、缓冲管理等)
I/O软件的层次结构
- 用户层I/O软件
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
I/O系统的上下接口
- I/O系统接口(上层,提供服务)
- 块设备接口
- 流设备接口
- 网络通信接口
- 软件、硬件(SW/HW)接口(底层硬件)
I/O系统的分层
- 中断处理程序 用于保存被中断进程的 CPU 环境,转入相应的中断处理程序进行处理,处理完后恢复现场,并返回到被中断的进程。
- 设备驱动程序 用来具体实现系统对设备发出的操作指令,驱动 I/O 设备工作。
- 设备独立性软件 使 I/O 软件独立于具体的物理设备。
I/O设备和设备控制器
I/O设备的类型
- 按设备的从属关系分类 系统设备、 用户设备
- 按使用特性 存储设备、I/O设备
- 按传输速率 低速、中速、高速
- 按使用方式/共享属性 独享/独占设备、共享设备、虚拟设备
设备控制器
- 定义 设备控制器是处于 CPU 与 I/O 设备之间的接口。设备控制器是一个可编址设备。当它仅控制一个设备时,它只有一个唯一的设备地址,连接多个设备时,则含有多个设备地址。
- 功能
- 接收和识别命令(控制寄存器)
- 实现数据交换(数据寄存器)
- 了解设备状态(状态寄存器)
- 识别设备地址(地址译码器)
- 数据缓冲(缓冲器)
- 差错控制
- 组成 设备控制器与处理机的接口(数据线、地址线、控制线)、设备控制器与设备的接口、I/O逻辑、寄存器
内存映像I/O
驱动程序把抽象的 I/O 命令通过驱动程序变成具体的命令和参数,装入设备控制器的寄存器中,由控制器执行。这一项工作可由两种方法完成
- 利用特定的I/O指令
- 内存映像I/O
I/O通道
通道是一种特殊的专门执行 I/O 指令的处理机,与 CPU 共享内存,可以有自己的总线。通道包含通道指令(空操作,读操作,写操作,控制,转移操作),并可执行用这些指令编写的通道程序。
- 引入目的
解脱 CPU 对 I/O 的组织、管理。 CPU 只需发送 I/O 命令给通道,通道通过调用内存中的相应通道程序完成任务,仅当通道完成了规定的 I/O 任务后,才向 CPU 发中断信号。
- 通道与一般处理机的差异 执行的命令主要局限于与 I/O 操作有关的指令、通道没有自己的内存(与 CPU 共享内存)。
- 通道类型
字节多路通道、数组选择通道、数组多路通道
- 瓶颈问题
中断机构和中断处理程序
中断简介
- 中断 CPU 对外部某个事件作出的一种响应。某个事件发生时,系统中止现运行程序的执行,引出处理事件程序对相应事件进行处理,处理完毕后返回断点继续执行。
- 陷入 由 CPU 内部事件引起的中断。如非法指令、地址越界等。(内中断)
- 中断处理程序 对中断事件进行处理的程序。如时钟中断处理、打印机完成中断处理、打印机缺纸中断处理等。
- 中断向量表 表项为中断处理程序的入口地址。当设备发出中断请求信号后,根据中断号查中断向量表,取得该设备中断处理程序的入口地址。
对多源中断的处理方式
- 屏蔽中断
- 嵌套中断(优先级)
中断处理程序
- 处理过程
设备驱动程序
设备驱动程序简介
设备驱动程序通常又称为设备处理程序,它是 I/O 进程与设备控制器之间的通信程序,它常以进程的形式存在。 一个设备驱动程序通常由若干子程序组成,每个子程序实施一种或一组物理操作。如读、写子程序、设备初始化、关闭设备、控制和配置设备子程序等。通过这些子程序向上层提供了与硬件无关的接口。 每一类设备都需要配置一种驱动程序。
设备驱动程序功能
- 将接收到的抽象要求转换为具体要求
- 检查用户 I/O 请求的合法性、I/O 设备状态、传递有关参数、设置设备的工作方式。
- 发出 I/O 命令。
- 及时响应由控制器或通道发来的中断请求,并进行相应处理。
设备驱动程序特点
- 设备驱动程序是实现在与设备无关软件与设备控制器之间的一个通信和转换程序。把抽象的命令转为具体的 I/O 操作。
- 与 I/O 设备的特性紧密相关。
- 与 I/O 控制方式紧密相关(中断驱动、DMA)。
- 与硬件紧密相关,因而其中一部分程序必须用汇编语言编写。很多驱动程序的基本部分已经固化在 ROM 中。
- 驱动程序应允许可重入。
设备处理方式
- 操作系统为每一类设备设置一个进程,专门执行这类设备的 I/O 操作。
- 在整个系统中设置一个进程,执行所有的 I/O 操作。
- 不设置专门的设备处理进程,而为各类设备设置相应的设备驱动程序,供用户进程或系统进程调用。这类方式目前使用最多。
设备驱动程序的处理过程
对 I/O 设备的控制方式
- 采用轮询的可编程I/O方式(程序直接控制)
- 采用中断的可编程I/O方式
- 直接存储器访问方式(DMA)
- I/O通信方式
与设备无关的I/O软件(了解思想)
引入
设备独立性的概念:为提高 OS 的可适应性和可扩展性,将应用程序独立于具体使用的物理设备。 驱动程序是一个与硬件紧密相关的软件。为了实现设备独立性,必须再在驱动程序之上设置一层软件,称为设备独立性软件(与设备无关的软件)。 与设备无关的软件是I/O系统的最高层软件
设备分配的数据结构
逻辑设备表 LUT(Logical Unit Table)
每个表目中包含三项:逻辑设备名、物理设备名和设备驱动程序的入口地址。
设备分配时应考虑的因素
设备的使用性质/固有属性、设备分配算法、设备分配的安全性、
用户层I/O软件
库函数1、假脱机技术(可以参考打印店里面多电脑共享打印机)
缓冲区管理
为了缓解解 CPU 与 I/O 传输速度不匹配的矛盾。有两种实现方法(硬件缓冲区、软缓冲区又称内存缓冲区)
磁盘存储器的性能和调度
提高磁盘I/O速度的主要途径
- 选择性能好的磁盘
- 采用好的磁盘调度算法
- 设置磁盘高速缓存
- 其他方法(提前读、延迟写、虚拟盘)
- 采用高度可靠、快速的磁盘系统:独立磁盘冗余阵列
磁盘结构
磁盘的 0 磁道在最外圈,记录了分区表,主引导记录等一些重要信息。
数据的组织
- 磁盘物理块的地址(磁头号、柱面号、扇区号)
- 存储容量
存储容量=磁头(盘面)数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
磁盘访问时间
磁盘调度算法
- 先来先服务FCFS
- 最短寻道时间优先SSTF(磁臂黏着、磁道歧视)
- 扫描 (SCAN)/电梯 (LOOK) 算法(不扫描到头!)
- 循环扫描 (CSCAN) 算法
- N-STEP-SCAN 调度算法和 FSCAN 调度算法 N-STEP-SCAN 调度算法将磁盘请求队列分成若干个长度为 N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列,而每一子队列按SCAN 算法处理。
Footnotes
-
系统调用(System Call)是操作系统内核提供的一组功能强大的函数,在核心态下运行。系统调用是用户程序取得 OS 服务的唯一途径。库函数是系统调用的一种封装和扩展,工作在用户态。 ↩