计算机操作系统笔记(6)
第六章 输入输出系统
6.1 I/O系统的功能、模型和接口
I/O系统的基本功能
- 方便用户使用I/O设备:
隐藏物理设备的细节(用户使用逻辑设备名)
使用与设备无关的软件 - 提高CPU和I/O设备的利用率
提高CPU和I/O的利用率(CPU与I/O并行)
对设备进行控制(CPU对I/O的干预) - 方便用户共享设备
确保设备正确共享(共享/独占)
错误处理(错误底层处理)
I/O系统的层次结构、模型和接口
- 层次结构:
(1)用户层软件
(2)设备独立性软件
(3)设备驱动程序
(4)中断处理程序
- 模型:
(1)I/O系统的上、下接口
(2)I/O系统的分层 - 接口:
(1)块设备接口
(2)流设备接口
(3)网络通信接口
6.2I/O设备和设备控制器
I/O设备
类型:
- 按使用特性分:
(1)存储设备(磁盘)
(2)I/O设备(键盘) - 按速度分:
(1)低速(键盘)
(2)中速(打印机)
(3)高速(磁盘)
设备与控制器之间的接口:
- 数据信号:双向、有缓存
- 控制信号:控制器发给设备,要求其完成相关操作
- 状态信号:设备发给控制器
设备控制器
基本功能:接收CPU命令,控制I/O设备工作,解放CPU
*
- 接收和识别命令
- 数据交换:数据寄存器
- 设备状态的了解和报告:状态寄存器
- 地址识别
- *数据缓冲
- *差错控制
组成:
- 接口:与CPU、与设备的接口
- 各类寄存器:数据、状态
- 信号线:数据线、地址线、控制线
- I/O逻辑:完成与CPU、设备的通信
内存映像
数据从内存到控制器的两种方法:
- 利用特定的I/0指令
访问内存和访问控制器需要两种不同的指令 - 内存映像
统一内存和控制器的访问方法
I/O通道
概念:一种特殊的执行I/O指令的处理机,与CPU共享内存
引入目的:解脱CPU对I/O的组织、管理
功能过程:CPU发I/O指令给通道,通道建立并执行通道程序完成I/O任务
三种类型通道:
- 字节多路通道
各子通道以时间片轮转方式共享主通道(适用低、中速设备)
- 数组选择通道
仅有主通道,某时间由某设备独占(适用高速设备)
缺点:信道利用率低 - 数组多路通道
类似字节多路通道,不过分配是按需分配(结合前两种的优点)
瓶颈问题:
- 有瓶颈的单通路I/O系统:
瓶颈原因:通道不足
- 解决瓶颈的多通路I/O系统:
总线系统
微机I/O系统:
- CPU-设备控制器-设备
- 设备控制器与设备是一对多的关系
- 缺点:有总线瓶颈、CPU瓶颈
主机I/O系统
- 计算机-I/O通道-I/O控制器-设备
I/O通道相当于对总线的扩展,且具有一定的智能性
6.3中断机构和中断处理程序
中断机制
两种中断:
- 中断(外中断):CPU对I/O设备发来的中断信号的一种响应
- 陷入(内中断):CPU内部事件所引起的中断
中断处理流程:
6.4设备驱动程序
设备驱动程序概述
设备驱动程序功能:让设备开始运转
*
- 将I/O进程的命令的抽象要求转具体要求
- 传递参数,设置设备的工作方式
- 启动I/O设备
- 调用相应的中断处理程序
- 构成通道程序
设备驱动程序特点:
- 是请求I/O进程和设备控制器之间的通信和转换程序
- 与设备控制器以及I/O设备的硬件特性紧密相关
- 与I/O设备采用的I/O控制方式密切相关
- 用汇编语言编写
*设备处理方式:
- 不专设进程
- 一设备管一进程
- 一进程管多设备
*设备驱动程序的处理过程:
- 抽象要求转具体要求
- 检查I/O请求的合法性
- 读出和检车设备的状态
- 传送必要的参数
- 工作方式的设置
- 启动I/O设备
对I/O设备的控制方式
四个阶段:程序I/O——中断I/O——DMA控制——通道控制
趋势:减少CPU对I/O操作的干预程度,提高并行度
程序I/O方式:
- 过程:CPU不断查询I/O状态
- 特点:CPU资源浪费极大
- CPU干预:CPU完全干预I/O
中断I/O方式:
- 过程:
向I/O发命令——返回——执行其它任务
I/O中断产生——CPU转相应中断处理程序 - CPU干预:CPU以字节为单位干预
DMA方式:
- 过程:由DMA控制器直接控制总线传递数据块。(DMA控制器完成从I/O到内存的传输)
- 特点:主要用在块设备中
- CPU干预:CPU以块为单位干预I/O(仅在传送一个或多个块的开始和结束时才干预)
- DMA控制器的组成:一组寄存器+控制逻辑
- DMA的工作过程:
通道方式:
- 过程:CPU给出通道程序首址和要访问的I/O设备,通道程序完成一组块操作
- CPU干预:COU以一组数据块为单位干预I/O
6.5与设备无关的I/O软件
基本概念
别称:设备独立性软件
功能/含义:执行所有设备的共有操作、向用户层软件提供统一接口
相关概念:物理设备名、逻辑设备名、逻辑设备表
逻辑设备表:
设备分配
内容:
- 3种分配:包括对设备、设备控制器、通道的分配
- 4张表:数据结构包括了系统表、设备表、控制器表、通道表
- *大致分配流程:
根据I/O请求,在系统设备表查找设备,
根据对应的设备表状态,得知其是否忙,不忙则分配设备给I/O进程,
分配后,根据对应的控制器表状态,得知其是否忙,不忙则分配控制器给进程,
最后根据通道的状态,得知其是否忙,不忙则分配通道给进程,然后即可启动该I/O设备进行数据传送
设备独立性的实现
概念:设备独立性的实现,即是逻辑设备名到物理设备名映射的实现
查找流程:逻辑设备表->系统表->设备表->控制表->通道表(->执行通道程序完成传输)
设备独立性的优点:
- 设备分配更灵活
- 易于实现I/O重定向
独占设备的分配程序
基本分配程序:分配设备->分配控制器->分配通道
分配程序的改进:增加设备的独立性,考虑多通路情况
6.6用户层的I/O软件
SPOOLing技术
SPOOLing技术即假脱机技术
作用:缓和CPU的高速性与I/O设备低速性间的矛盾,使其具有并发性
组成:
工作原理:
- 包括四大部分:输入/出井、输入/出缓冲区、输入/出进程、井管理程序
共享打印机:
- 假脱机打印系统的构成:磁盘缓冲区、打印缓冲区、假脱机管理进程和假脱机打印进程
SPOOLing系统的特点:
- 提高了I/O的速度
- 将独占设备改造为共享设备
- 实现了虚拟设备功能
6.7缓冲处理
缓冲管理:组织管理、分配、释放buffer
缓冲的引入
引入原因:
- 缓和CPU和I/O设备间速度不匹配的矛盾
- 减少对CPU的中断频率
- 提高CPU和I/O并行性
单、双缓冲区
单缓冲区:
- 并行:T与C并行
- 处理时间:每块处理时间为Max(C,T)+M
- 阻塞:
I/O输入到缓冲区时,进程挂起
进程输出到缓冲区时,若缓冲区数据未被I/O提取完毕会发生阻塞
双缓冲区:
- 并行:T与M并行、T与C并行
- 处理时间:每块处理时间为Max(C,T)
- 特点:
*效率提高,更平滑传输峰值
收发可双向同时传送
循环多缓冲区:
- 使用:
nextg:指示下一个应取数据的buf
nexti:知识下一个空buf
Getbuf:取nextg缓冲区使用,然后置nextg为空;取nexti缓冲区使用,然后置nexti为满
Releasebuf:C满则改为G;C空则改为R - 同步问题:
nexti追上nextg:输入速度>输出速度,阻塞输入进程
nextg追上nexti:输出速度>输入速度,阻塞输出进程
共用缓冲池:
- 缓冲池:系统提供的公用缓冲,由OS统一管理
- 组成:
三个队列:
空缓冲队列emq
输入队列inq
输出队列outq
4个工作缓冲区:
收容输入数据hin
提取输入数据sin
收容输出数据hout
提取输出数据sout - 工作方式:1收容输入、2提取输入、3收容输出、4提取输出(可不按序同时发生)
- Getbuf和Putbuf过程
RS:缓冲池资源信号量
MS:缓冲池的互斥信号量
6.8磁盘存储器的性能
磁盘性能简述
数据的组织和格式:
- 盘面、扇区、磁道、磁道间隔、扇区间隔
- 格式化:每个扇区包括两个字段:标识符字段、数据字段
磁盘的类型:
- 固定头磁盘:每条磁道都有磁头,磁盘I/O速度较高、主用于大容量磁盘上
- 移动头磁盘:每个盘面仅有一个磁头,磁盘I/O速度较低,主用于中小型磁盘设备
磁盘访问时间:
- 寻道时间:把磁头移动到指定磁道上经历的时间()
- 旋转延迟时间:扇区移动到磁头下面所经历的时间
- 传输时间:把数据从磁盘读出或向磁盘写入数据所经历的时间()
(磁盘访问时间)
磁盘调度
先来先服务FCFS:根据进程请求访问磁盘的先后次序进行调度
最短寻道时间优先SSTF:每次选择与当前磁头距离最近的磁道进行调度
扫描算法SCAN(电梯调度算法):在最短寻道时间优先算法基础上,更优先考虑当前磁头的移动方向
循环扫描算法CSCAN:在扫描算法的基础上,规定了磁头单向移动(比如由里到外后,再直接回到里)
N步SCAN算法(NStepSCAN算法):将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法一次处理这些子队列(避免中途插队,避免粘着现象)
FSCAN算法:是NStepSCAN算法的简化,只将磁盘请求队列分成两个子队列(一个用于处理一个存放新出现的请求)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律