ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

OS——I/O系统

OS——I/O系统 5.1 I/O 管理基础5.1.1 I/O 管理基本概念I/O 管理操作系统对主机外部硬件进行管理完成主机与外设之间的信息传输。常见 I/O 设备鼠标、键盘、打印机、硬盘、固态硬盘。5.1.2 I/O 设备的分类按设备特性分类存储设备硬盘、SSD用于持久化保存数据输入输出设备键盘、鼠标、打印机完成信息输入输出按传输速率分类低速设备鼠标、键盘中速设备打印机、传真机高速设备磁盘、固态硬盘按信息交换单位分类字符设备以字符为单位交换传输速率低多采用中断驱动例鼠标、键盘块设备以数据块为单位交换属于有结构设备支持随机寻址访问例磁盘、固态硬盘按设备共享属性分类独占设备同一时刻仅允许一个进程使用属于临界资源例打印机、传真机共享设备同一时刻允许多个进程访问例磁盘、固态硬盘虚拟设备借助 Spooling假脱机技术将物理独占设备改造为逻辑上的共享设备一台物理设备映射为多台逻辑设备。5.1.3 I/O 接口设备控制器I/O 设备分为机械部件、电子部件其中电子部件即为 I/O 接口I/O 控制器、设备控制器是主机与外设之间信息交换的逻辑桥梁。主机侧内部接口连接系统总线数据并行传输外设侧外部接口通过 USB、电缆连接外设可串行 / 并行传输I/O 接口四大功能数据缓冲解决 CPU、主存与外设速度不匹配接口内部设置缓冲区域暂存数据。数据格式转换完成串‑并转换、数模 / 模数转换匹配主机与外设的数据格式。控制与定时接收总线控制定时信号协调外设动作时序管控数据通信流程。错误与状态检测设置状态寄存器CPU 读取寄存器获取外设工作状态与出错信息。I/O 接口内部寄存器数据缓冲寄存器暂存 CPU / 内存交互的数据。状态寄存器记录接口、外设工作状态。控制寄存器存放 CPU 下发给外设的控制命令。状态、控制寄存器分时工作、数据流向相反硬件上可以合并为状态‑控制寄存器。I/O 接口的分类按数据传送方式并行接口字节 / 字全部位同时传输串行接口数据一位一位依次传输按主机访问设备的控制方式程序查询接口、程序中断接口、DMA 接口按可编程性可编程接口可通过程序修改接口功能与工作方式不可编程接口接口功能硬件固定无法由程序修改5.1.4 I/O 端口与编址方式I/O 端口CPU 可以直接访问的接口内部寄存器。数据端口存放传输的数据可读可写控制端口存放 CPU 下发的控制命令CPU 只写状态端口存放外设状态CPU 只读每一个端口拥有独立地址一个 I/O 接口可以包含多个端口对应多个端口地址。两种编址方式独立编址I/O 独立编址I/O 端口地址与内存地址相互隔离需要专门的 I/O 读写指令不会占用主存地址空间。统一编址内存映射 I/O/ 存储器映射 I/O将一部分主存地址划分给 I/O 端口使用普通访存指令访问端口不需要专门 I/O 指令缺点是占用主存地址减少可用主存范围。5.1.5 I/O 的三种控制方式1程序查询方式CPU 通过程序循环查询外设状态控制主机与外设数据交换。每次读写前 CPU 检查外设是否就绪。定时查询CPU 周期性读取状态寄存器其余时间可以执行其他任务。缺点存在忙等CPU 与外设串行工作CPU 利用率低。2程序中断方式CPU 启动外设之后不需要原地等待将 I/O 进程挂起调度其他进程运行实现 CPU 与外设并行工作。 外设完成 I/O 操作后向 CPU 发送 I/O 中断请求。CPU 响应中断保存现场执行中断服务程序完成一次数据传送传送结束恢复现场回到原来被打断的进程继续运行。工作流程CPU 下发读写命令启动外设CPU 执行其他任务外设完成操作发出中断请求CPU 响应中断转入中断服务程序读取控制器状态就绪则执行数据传送否则做错误处理完成一次字的读写判断任务是否结束未结束则再次启动外设。优点CPU 与外设并行工作。缺点一次中断仅传送一个字频繁中断会带来开销降低 CPU 利用率。3DMA 方式直接存储器存取依靠 DMA 控制器硬件在外设和内存之间建立直接数据通路数据传输阶段不需要 CPU 参与适合磁盘等高速设备成批数据传输。三个阶段预处理CPU 向设备发命令初始化 DMA 控制器。数据传送DMA 控制器申请总线控制权完成外设与主存之间批量数据传输。后处理传输完成DMA 向 CPU 发送中断CPU 执行中断服务程序完成善后工作。特点以数据块为单位传输数据传输阶段无需 CPU 干预预处理、后处理需要 CPU相比中断方式进一步提升 CPU 与 I/O 并行度。对比中断方式的数据传送由 CPU 中转完成DMA 直接在外设‑内存之间搬运数据。5.2 I/O 软件层次结构I/O 软件采用分层结构从上到下层次用户层 I/O 软件 → 设备独立性软件设备无关软件 → 设备驱动程序 → 中断处理程序 → 硬件。下层屏蔽硬件细节上层调用下层提供的服务向上层提供抽象接口。5.2.1 中断处理程序中断处理程序底层负责识别中断类型完成中断处理。 中断工作过程检测未响应的中断信号收回 CPU 使用权交给中断处理程序。保存被中断进程 CPU 现场环境。转入对应中断服务程序执行处理。中断处理完成恢复被中断进程 CPU 环境退出中断。硬件先完成一部分现场保存再交给中断服务程序处理。5.2.2 设备驱动程序每一类设备对应一套驱动程序。 功能将上层抽象 I/O 请求转换为设备硬件可识别的操作指令屏蔽硬件差异。 例将逻辑簇号转换为磁盘物理地址。工作流程接收上层下发 I/O 请求检查 I/O 请求合法性读取设备状态设备就绪则向设备控制器寄存器写入参数、数据启动 I/O 设备完成硬件操作。5.2.3 设备独立性软件设备无关软件驱动程序不直接接收用户请求由设备独立性软件接收。 引入逻辑设备、物理设备概念用户使用逻辑设备名访问设备软件完成逻辑设备名到物理设备名映射。主要功能缓冲区管理缓解 CPU 与 I/O 速度差异设备分配与回收分配设备、控制器、通道虚拟设备依托 Spooling 技术实现独占设备虚拟共享为驱动程序提供统一接口更换硬件不需要修改上层 I/O 软件。5.2.4 用户层 I/O 软件面向用户的交互接口。系统调用 vs 库函数系统调用运行于内核态调用操作系统内核服务面向硬件。库函数运行于用户态封装系统调用面向编程开发方便程序员使用。5.2.5 设备接口分类字符设备接口流设备接口以字符为单位交换数据按流访问先进先出大多采用中断驱动。块设备接口以数据块为单位交换支持寻址、随机读写磁盘、SSD 属于块设备。 功能将磁盘二维地址柱面、盘面、扇区映射为一维逻辑块号把上层read/write抽象命令转为底层硬件操作。核心区别是否支持随机访问。5.2.6 阻塞 I/O 与非阻塞 I/O阻塞 I/O进程发起 I/O 系统调用之后进程从运行队列移入阻塞队列I/O 完成后进入就绪队列调度回 CPU 之后获取返回结果。非阻塞 I/O发起 I/O 调用如果内核缓冲区没有就绪数据直接返回错误进程不会阻塞。优点进程不被挂起。缺点需要轮询内核状态消耗 CPU 资源。5.2.7 缓冲区管理缓冲是数据的中转站。硬件缓冲寄存器硬件实现软件缓冲操作系统在内存开辟存储区域。单缓冲进程发出 I/O 请求分配一个内存缓冲区。 块设备输入磁盘→缓冲区→用户区。 设磁盘输入缓冲区时间 T缓冲区拷贝到用户区 MCPU 处理 C除第一块、最后一块平均处理时间$$\max(C,T)$$。 单缓冲同一时刻只能单向传输输入输出不能同时进行。双缓冲分配两个缓冲区交替使用。分别设置发送、接收缓冲区可以同时收发。 提升并行度但如果设备速度差距过大改善有限。循环缓冲多个大小相等缓冲区连成循环队列属于专用缓冲为特定输入输出设置。 缺点内存利用率低大量开辟会浪费内存。缓冲池缓冲池是操作系统为解决单/双缓冲、循环缓冲的缺陷在内存中统一开辟的一组公用、可复用的缓冲区集合是多进程共享的通用缓冲机制不再局限于单一输入或输出任务。其核心工作原理为通过三类队列管理空闲、已输入、待输出缓冲区搭配四类专属工作缓冲区实现缓冲区的动态分配、复用与回收全程衔接外设、内存与进程数据交互避免缓冲区闲置浪费适配多进程并发I/O场景。核心运行规则所有缓冲区初始均挂载在空白缓冲队列仅被进程调用时从对应队列摘下作为工作缓冲区使用任务完成后缓冲区归队复用永久循环利用无需重复开辟内存。输入工作完整流程外设→缓冲池→进程① 收容输入当外设产生输入数据时系统从空白缓冲队列队首摘取一个空闲缓冲区作为「收容输入工作缓冲区」接收外设传输的原始数据缓冲区填满后将其挂载至输入队列末尾 ② 提取输入用户/计算进程需要读取数据时从输入队列队首摘取装满数据的缓冲区作为「提取输入工作缓冲区」将缓冲区数据拷贝至进程用户内存区数据读取完毕后清空该缓冲区将其归还至空白缓冲队列等待复用。输出工作完整流程进程→缓冲池→外设① 收容输出当进程需要向外设输出数据时系统从空白缓冲队列队首摘取空闲缓冲区作为「收容输出工作缓冲区」接收进程用户内存区的待输出数据缓冲区填满后挂载至输出队列末尾 ② 提取输出外设空闲时系统从输出队列队首摘取装满数据的缓冲区作为「提取输出工作缓冲区」将缓冲区数据传输至外设传输完成后缓冲区清空归还至空白缓冲队列。5.2.8 设备分配与回收通道独立于 CPU 的 I/O 专用处理器实现内存与外设直接数据交换。 设备分配任务按照策略分配设备、控制器、通道保障通信。设备分配核心数据结构设备控制表 DCT系统为每一个物理设备配置一张 字段设备类型、设备标识符物理设备名、设备忙 / 空闲状态标志、指向控制器表的指针、重复执行次数、设备请求队列队首指针等待该设备的进程 PCB 链表。系统设备表 SDT整个系统仅有一张记录系统全部 I/O 设备信息每个设备占一个表项。5.2.9 Spooling 假脱机技术脱机 I/O使用外围控制机完成低速 I/O 设备与高速磁盘之间的数据传输。Spooling假脱机联机用内存中的 I/O 进程模拟外围控制机核心本质为空间换时间。系统在高速磁盘上开辟输入井、输出井两块专属存储空间利用高速磁盘空间缓存低速外设的IO数据以此抵消CPU与低速外设的速度差。无Spooling时CPU必须低速等待外设完成IO传输CPU与外设串行工作大量时间浪费在忙等 有Spooling时CPU只需高速完成内存与磁盘井的数据交互无需等待慢速外设后续外设与磁盘的数据传输由后台进程异步完成。输入低速外设 → 内存输入缓冲区 → 高速磁盘输入井CPU 需要数据直接读磁盘。输出CPU 数据 → 内存输出缓冲区 →高速磁盘输出井再由磁盘后台同步输出到低速外设。外围 I/O 操作和 CPU 处理可以并行用磁盘存储空间的开销换取CPU大量空闲时间大幅提升系统并发与整体效率。Spooling 特点缓解 CPU 与低速 I/O 设备速度不匹配将独占设备改造为虚拟共享设备一台物理设备虚拟为多台逻辑设备。5.3 外存管理磁盘属于块设备以块为单位访问主存以字节 / 字访问。5.3.1 磁盘物理结构磁盘三要素柱面、盘面、扇区。 磁盘总容量 盘面数 × 每个盘面柱面数 × 每个磁道扇区数 × 每个扇区字节数。扇区错位编号磁头读完一个扇区CPU 处理需要时间磁盘持续旋转错位编号可以减少旋转延迟。磁盘格式化、分区低级格式化物理格式化磁盘出厂默认完成属于硬件级格式化。对整块物理磁盘划分磁道、柱面、扇区标记坏扇区、初始化磁盘硬件底层参数建立磁盘物理存储架构。磁盘分区把一块物理磁盘划分为多个逻辑独立分区可以指定活动分区用于系统引导不同分区可以使用不同文件系统。分区仅划分磁盘空间边界不创建文件系统、不格式化扇区。高级格式化逻辑格式化针对单个磁盘分区的软件级格式化日常电脑格式化均为该操作。核心作用是为分区创建文件系统初始化根目录、位示图、空闲分区表等文件管理数据结构让操作系统能够识别、读写该分区。特点仅清空分区文件管理信息不重新划分磁盘物理扇区速度快、无硬件损伤。新买的空白硬盘厂商出厂做低级格式化打好磁盘物理基础我们装机时把硬盘分成C盘、D盘是磁盘分区重装系统、右键格式化D盘是对单个分区做高级格式化。区分低级格式化针对整块磁盘高级格式化针对分区。引导块每个分区都包含引导块存放操作系统引导代码。坏块损坏无法正常读写的扇区只能屏蔽不能修复。5.3.2 磁盘访问时间磁盘读写总时间 寻道时间 旋转延迟时间 数据传输时间。5.3.3 磁盘调度算法FCFS 先来先服务按照请求到达顺序访问。公平不会饥饿寻道开销大。SSTF 最短寻道时间优先每次选择距离当前磁头最近的磁道。会产生进程饥饿。SCAN 电梯算法磁头沿一个方向移动沿途处理请求到达端点反向。C‑SCAN 循环扫描算法磁头单向服务到达端点直接跳转到另一端起点继续单向处理请求。LOOK、C‑LOOK 算法SCAN、C‑SCAN 改进版本磁头只移动到最远的请求位置就折返不需要走到磁盘物理末端磁道。5.3.4 SSD 固态硬盘SSD 由 NAND 闪存组成。NAND 闪存特性不支持原地覆盖写入要改写已有页必须先执行块擦除操作。 闪存块擦写次数存在上限。磨损均衡平衡各个闪存块擦写次数延长 SSD 寿命。动态磨损均衡记录每个块擦写次数分配空闲擦写次数最少的块进行写入。静态磨损均衡把长期不修改的冷数据迁移到擦写次数高的块新数据写入擦写次数少的空闲块均衡整体磨损。
返回列表