ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

操作系统I/O系统期末复习:核心概念与磁盘调度全解析

操作系统I/O系统期末复习:核心概念与磁盘调度全解析 操作系统期末复习能让人在考场上直接裂开的通常不是进程管理也不是内存管理反而是第五章的输入/输出。这一章的信息密度高概念又多又碎程序直接控制、中断、DMA、通道再加上缓冲、SPOOLing、磁盘调度很多同学复习的时候觉得“全看懂了”一合上书脑子里只剩“好像有个电梯算法”。我当年给学弟学妹划重点时习惯把这章拆成一条主线和三个考场大户主线是数据从设备到内存再到用户空间的完整路径三个考场大户分别是I/O控制方式、磁盘调度、缓冲与设备独立性处理。把这几个点抓住第五章其实是全卷最容易拿分的一章因为它套路非常固定。下面我按期末复习的实际顺序把第五章给你过一遍。1. 第5章整体框架先抓住I/O这条主线1.1 I/O子系统解决的最根本问题在讲所有细节之前先想明白操作系统为什么要单独拿一整章讲输入/输出。CPU和内存的速度是纳秒级键盘、鼠标、磁盘、打印机这些外设的速度从毫秒到秒都有两者根本不在一个量级。如果让CPU直接等打印机打完一行字再去做别的事CPU基本就是在“摸鱼”。I/O子系统要解决的核心问题就三个速度不匹配、设备和CPU之间并行、数据格式和组织方式不一致。期末卷面上几乎每一道I/O题无论包装成什么样最后都能落回这三个问题。1.2 一条主线从应用请求到硬件动作具体复习时请记住一条可以画在草稿纸上的主线用户程序发起read()/write()系统调用 → 经过虚拟文件系统/设备文件 → 进入设备无关层 → 调用设备驱动 → 驱动向设备控制器的寄存器发命令 → 控制器驱动物理设备动作 → 数据传到控制器缓冲区或内存 → 最终把结果返回给用户进程。这条链考试不会直接考你画图但所有的选择题和判断题都藏在里面。比如考“哪个软件层负责把用户逻辑设备名映射为物理设备名”答案就是设备无关层考“驱动程序到底和谁打交道”答案不是物理设备直接驱动而是设备控制器。不把主线画下来你很容易被这种细节问懵。1.3 设备控制器与两种编址方式还有一个容易被忽略的基础知识点设备不是直接连在CPU总线上的中间必须经过设备控制器。设备控制器内部至少有数据寄存器、状态寄存器、控制寄存器三类寄存器。CPU操作设备本质上就是读写这些寄存器。这里有个高频对比考点独立编址端口I/O和内存映射I/O。端口I/O用专门的in/out指令访问I/O端口不占用内存地址空间但读写指令种类少内存映射I/O把设备寄存器映射到内存地址空间可以用普通内存指令操作但对内存地址空间的占用比较大。两种方案各有利弊考试喜欢考“哪些是设备控制器的寄存器”以及“内存映射I/O的优点是什么”标准答案就是“CPU无需专门的I/O指令访问设备寄存器像访问内存一样方便”。2. I/O控制方式高频考点命中的地方2.1 程序直接控制轮询——最笨但最好理解程序直接控制方式也叫查询方式。它的流程可以概括为CPU不断读取设备状态寄存器发现设备未就绪就一直循环等待设备就绪后CPU执行一次数据传输然后再继续等待下一个数据。这种方式最大的问题是CPU必须抱着设备不放哪怕CPU在等的时候什么都没干也是被占用的。考试里会让你判断这种方式下CPU和设备是否并行答案是不并行CPU一直在忙等。实际工程里很少直接用这种傻等方式但它是理解后面中断驱动、DMA的起点一定要先把它吃透。2.2 中断驱动I/O——让CPU从等待中解放既然查询方式太费CPU改进思路自然就是CPU发出I/O命令后不在这傻等而是转去执行其他进程当设备准备好数据或完成操作时通过中断控制器向CPU发送中断信号CPU在适当的时候执行中断处理程序完成这次数据传输。这样CPU在I/O等待期间可以做别的事情和设备并行度提高了。但要注意中断驱动I/O本质上每传输一个字节或一个字就要来一次中断数据量一大CPU光处理中断就忙不过来。这也是后面DMA出现的直接原因。考试经常给你一个场景打印机每次只能接收一个字符数据量又大问采用中断方式时CPU需要处理多少次中断答案就是和字符数量相等。2.3 DMA方式——大块数据搬运的正确解法DMADirect Memory Access直接存储器访问解决了中断驱动“一次一个数据”的问题。它在系统中增加了一个专门的硬件DMA控制器由它负责在外设与内存之间直接成块搬运数据。CPU只需要在开始的时候设置好源地址、目标地址、传送字节数然后让出总线控制权DMA控制器通过周期挪用、停止CPU访问内存或交替访问的方式完成数据传输传输完成后才向CPU发送一次中断通知。注意这个“一次”是最常考的对比点中断驱动是每个数据中断一次DMA是一整块数据传送完毕才中断一次。在实际的个人电脑上硬盘、显卡、网卡等高速设备几乎都离不开DMA。2.4 通道控制方式大型机里的“小CPU”通道方式可以看作DMA的进一步升级。通道本身就是一台功能单纯的小处理器能执行通道程序控制多台设备。CPU什么时候介入只在启动通道、向通道发一条“去执行某段通道程序”的指令时介入之后由通道自己取指令、控制设备、搬运数据完成后再向CPU发中断。考试里通道方式的特征是“独立于CPU能并行工作”通常不需要你画流程但需要你能说出它与DMA的区别DMA需要CPU设置传送控制信息通道则能独立运行通道程序控制能力更强、管理设备也更多。这东西在嵌入式、大机场景更常见期末试卷一般考概念层次。2.5 不同方式对比表特性程序直接控制中断驱动DMA通道数据传送单位字/字节字/字节数据块一组数据块中断次数无每个数据一次每块一次每组一次CPU干预程度全程忙等每次传输都干预传输开始和结束干预启动和结束后干预适用场景简单慢速设备慢速/中速设备高速块设备大型机多设备这张表我建议你考前自己默写一遍。不要只背结论要理解为什么CPU干预越少数据量越大系统并行度越高。选择题里给你一个场景让你选应该采用哪种控制方式就是按这个逻辑判断。3. 中断、DMA、缓冲的实现细节别只背概念3.1 一次完整中断处理流程中断是I/O章节里最核心的机制之一。期末简答题最常考的版本是请求中断 → 中断响应 → 保护现场程序断点、CPU寄存器、程序状态字→ 识别中断源找到中断处理程序入口 → 执行中断处理程序 → 恢复现场 → 返回原程序继续执行。完整写答案时少写任何一个环节都会被扣分。有几个细节要多说一句第一保护现场一定要用压栈方式防止中断处理过程中的数据破坏第二中断处理完必须要恢复现场不是直接跳到原程序任意位置而是回到被中断的指令之后的那个指令第三中断处理过程中通常要屏蔽更高级别的中断这就涉及到中断屏蔽和优先级的问题。考试如果把“中断处理流程”当成简答题出普遍分为6步卷面也要写步骤号。3.2 中断、异常和系统调用的区别这个点经常被塞在选择题里。中断一般指外部设备或时钟等硬件产生的外部中断比如打印完成、网卡收包异常是CPU执行指令时内部产生的、与当前指令同步的突发事件比如除零、缺页、非法指令系统调用则是用户程序主动通过trap指令陷入内核请求操作系统服务比如read()、write()。三者都会让CPU从用户态切到内核态处理完成后回到用户态但触发源完全不同。复习时可以记一句话被打断的是中断自己出岔子的是异常主动叫门的是系统调用。这样就不容易混。3.3 DMA与CPU访存的三种配合方式DMA不只是“少中断”这么简单。DMA控制器在传送数据时要占用总线那CPU这时候怎么办教材里通常给出三种方式停止CPU访问内存、周期挪用、DMA与CPU交替访问。停止CPU访存效率最低但控制简单周期挪用最常用它让DMA在每个总线周期结束时插入自己的传送周期CPU只需要暂停一小会儿交替访问则是把CPU和DMA的时间片切得很细。考试问“DMA控制器如何与CPU协调工作”你把三种方式列出来就可以了。还有一个坑是DMA在传送过程中虽然不需要CPU干涉但DMA控制器本身需要占用总线所以CPU并不是完全无感那些不涉及访存的指令还能继续执行。3.4 缓冲技术解决速度不匹配的关键手段缓冲区是用来“削峰填谷”的。单缓冲是最简单的方案但数据在缓冲区里还没被用户取走时设备不能马上往里面放下一批数据平均处理时间并不会因为多了一个缓冲而大幅下降双缓冲允许设备与用户交替使用两个缓冲区一个在收数据、一个在处理数据能明显提高并行度循环缓冲适合双方数据流比较连续的场景缓冲池则更高级系统维护一组缓冲区按缓冲区的内容和用途分类需要时分配、用完后回收。我最想提醒的是宁可多花五分钟画一张单缓冲/双缓冲的时序图也不要只背文字定义。画图你就能理解为什么双缓冲可以同时“边生产边消费”这也是简答题里的重要得分点。4. 设备分配与软件层次考试喜欢抠概念4.1 I/O软件的四层结构从系统实现角度看I/O软件可以分成四层。用户层软件提供用户与I/O交互的接口比如库函数fread设备无关层负责设备命名、保护、分配、缓冲它不关心具体设备长什么样设备驱动层负责把上层请求翻译成设备控制器能理解的命令中断处理程序负责处理设备完成时发出的中断。考试中经常让判断“驱动程序在哪一层”“设备无关层能做什么”。我的复习建议是把每一层举一个具体例子例如键盘输入时用户层情景是scanf调用库设备无关层负责把逻辑设备名“键盘”映射为具体设备硬件信息驱动层向键盘控制器写命令中断处理层接收键盘中断并读取扫描码。你把这个例子能完整复述这四层就忘不掉。4.2 设备独立性逻辑设备名和物理设备名设备独立性又叫做设备无关性。核心思想是用户在程序里只使用逻辑设备名由操作系统在设备无关层通过逻辑设备表LUT映射到物理设备。这样带来的好处有三个用户程序与物理设备解耦更换硬件后程序不需要大改操作系统可以根据当前设备忙闲情况把一个逻辑请求分配给不同的物理设备还可以提供虚拟设备比如用打印缓冲池把一台打印机抽象成多个“虚拟打印机”这就是后面会看到的SPOOLing。考试喜欢让你区分“逻辑设备表”和“物理设备表”逻辑设备表项里记录的是逻辑设备名、物理设备名和设备驱动入口做题时注意看清问的是哪张表。4.3 设备分配的数据结构与算法操作系统要管理设备必须先建底层数据表。常见的设备分配数据结构包括设备表、控制器表、通道表、系统设备表SDT。分配过程一般是先分配设备再分配控制器最后分配通道如果其中某个资源被其他进程占用进程会进入该资源的等待队列。这里要结合前几章的死锁知识如果进程占着一台打印机还要等另一台就可能产生循环等待所以设备分配算法也要考虑安全性和防死锁。期末可能考“设备分配过程中为什么可能死锁”你要能从“独占资源”“进程已分得资源不释放”这个角度去回答。4.4 独占、共享、虚拟设备的分类最后再梳理一个分类。独占设备一段时间只允许一个进程使用比如打印机共享设备允许多个进程同时使用比如磁盘虚拟设备通过SPOOLing等技术把独占设备改造成可共享的逻辑设备。SPOOLing的完整流程是输入时把作业数据先放到输入井输出时先放到输出井由后台进程负责和慢速设备打交道。这样多个用户看起来都独占了一台设备实际上是复用了同一台物理设备。考试特别喜欢把“虚拟设备”“SPOOLing”“独占变共享”放在同一个选择题里考你在卷面上把这三者串成一条线基本上就不会错。5. 磁盘与磁盘调度大题必练5.1 磁盘访问时间的三部分磁盘调度的计算题是很多学校期末的压轴题。访问一次磁盘的时间包括寻道时间、旋转延迟时间和传输时间。寻道时间是磁头从当前磁道移动到目标磁道的时间旋转延迟是盘片转到目标扇区所在位置的时间传输时间是实际读写出数据的时间。其中寻道时间通常最长所以磁盘调度算法主要优化寻道距离。需要记一个公式如果磁盘转速为r转/分钟那么平均旋转延迟大约为半圈时间即60/(2r)秒。比如转速7200rpm的盘平均旋转延迟约4.17ms。这个公式会在计算题里用到别只死记结论。5.2 五种磁盘调度算法考试要求学生掌握FCFS、SSTF、SCAN、C-SCAN部分教材还会加LOOK和C-LOOK。FCFS按到达顺序服务公平但寻道距离大SSTF优先选择离当前磁头最近的请求寻道距离小但可能造成长距离请求饥饿SCAN是电梯算法磁头沿一个方向移动途中服务请求到达端点或该方向最远请求后反向C-SCAN则只朝一个方向服务返回时不服务请求再继续下一轮这样等待时间更均匀。LOOK和C-LOOK判断“是否还需要继续往这个方向跑”时看的是当前方向上还有没有请求不是一定要到物理边界。很多地方把这个问题叫“电梯是否只到最远请求就回头”考试以你教材的约定为准。5.3 实例演算跟着走一遍我常用下面这个例子练手。假设磁盘有200个磁道编号0~199磁头当前在100号磁道移动方向为增大方向等待队列为23、110、65、43、77、150、180、30。以LOOK和C-LOOK版本为例即最远有请求就回头FCFS顺序23→110→65→43→77→150→180→30总移动量518。 SSTF顺序110→77→65→43→30→23→150→180总移动量254。 SCAN/LOOK顺序110→150→180→77→65→43→30→23总移动量237。 C-SCAN/C-LOOK顺序110→150→180→23→30→43→65→77总移动量291。其中SCAN和C-SCAN如果按“必须到物理边界再回头”的严格定义结果会不同但只要你在考卷上先注释“这里按LOOK/C-LOOK理解”一般老师都能看懂。考场上最重要的是先写清磁头移动顺序再写移动总量顺序错一个数后面全错。我见过太多学生结果对、顺序错照样被扣分。5.4 调度算法选择与实操体会实际系统中调度算法选择不会只考虑寻道距离还要考虑请求的到达率、IO等待时间的均匀性、防止饥饿等。现代SSD没有磁头寻道时间的优化并不适用于SSD但FCFS、队列、调度、保证延迟这些思想依然贯穿在设备层。考试如果问你“为什么磁盘调度算法不能完全消除摇头”你要回答它会减少寻道次数但无法改变物理上的寻道时间下限。另外特别提醒做计算题时题目若写“磁臂当前移动方向”你就必须按照方向判断若没写方向SCAN类算法的顺序就可能不唯一按教材默认方向处理即可。6. 期末避坑与答题技巧6.1 高频考点分布第五章在期末卷面里通常占比不低。选择题常考设备分类、内存映射I/O、中断与异常区别、四种I/O控制方式的特点、SPOOLing的概念。简答题常考中断处理流程、设备分配流程、为什么用缓冲、SPOOLing如何把独占变共享。计算题常考磁盘调度算法和平均旋转延迟。近些年有的学校还爱出开放性小题比如“如何优化慢速打印机导致CPU忙等问题”这时候就把缓冲、SPOOLing、通道方式往上写按I/O子系统三大目标去答题。复习时不要光记结论要能用自己的话说出每个技术解决什么问题。6.2 易错点清单根据我帮忙改卷和辅导的经验这次再把易错点集中列一遍中断驱动I/O每传一个数据就有一次中断不是传完一块才中断。DMA的中断次数整块完成才一次不要和中断驱动搞混。SCAN和C-SCAN的差别SCAN来回都服务C-SCAN只沿一个方向服务返回时纯移动。设备和控制器关系驱动程序和控制器打交道不是直接驱动物理设备。逻辑设备与物理设备用户用的是逻辑设备名操作系统负责映射。缓冲和缓存不是一个东西缓冲是生产者消费者之间的临时存区缓存是热点数据副本。输入井与输出井SPOOLing用到的是输入井和输出井不是在内存里随便开个数组。建议你每一条都自己编一个判断题去考同桌能把别人讲明白就说明你真掌握了。写下这些时我脑海里浮现出不少学生掉进这些坑的场景希望你不会再踩一次。6.3 三轮复习法建议最后说下复习节奏。第一轮把教材第五章的流程图、表格抄一遍重点抄中断处理、DMA、缓冲、磁盘调度这个过程是建立肌肉记忆第二轮不看教材自己默写四种I/O方式对比表、四层软件结构、磁盘调度例题写不出来的地方就是知识漏洞第三轮专门做错题和真题把所有和I/O相关的选择题、填空题、简答题归到一起集中刷。每次犯错的点都用红笔在题目旁边标注原因。这样坚持下来第五章就不会是拉分项反而是稳定拿分项。期末复习时间紧张我不建议一上来就刷几十道题先抓住主线再逐个击破计算与流程题性价比最高。6.4 一点个人经验虽然期末考的是理论但我在毕业设计和平时写代码时其实经常碰到这些概念。比如写一个串口通信程序如果不开缓冲区上位机稍一停顿就会丢数据多线程任务里频繁打印日志也会把CPU时间大量耗在I/O等待上这时候缓冲和批量写就显得非常重要。所以学到第五章你不仅要会应付卷子更应该在写代码时想想每一次read/write背后发生了什么。把I/O理解为“CPU、内存、设备之间的物流系统”复习起来就不会枯燥。最后给你一个实用小技巧考前半天拿一张白纸从“read()系统调用”出发把主线、中断流程、四种控制方式、设备分配、磁盘调度默写一遍写不出来就看一眼书再重新写。这个过程比做十道题都管用。
返回列表