ARTICLE DETAIL

资讯详情

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

408操作系统第一章:用户态/内核态、中断异常与系统调用全解

408操作系统第一章:用户态/内核态、中断异常与系统调用全解 1. 第一章在408里的真实分量别被概述两个字骗了每年九、十月总有一批同学私信问我同一个问题操作系统第一章是不是可以直接跳过他们的理由几乎一模一样——概述嘛翻翻就行又不会出大题。这个判断对了一半也错了一半。对的部分是第一章确实很少出综合应用题几乎清一色是选择题错的部分是它的概念密度高得离谱一个不留神两分就没了而两分在408里是什么概念考过的人都清楚。我自己的复习经历是第一遍看第一章的时候飞快四十分钟翻完还在笔记本上写了一行简单。结果做第一套真题时傻眼了用户态到内核态的转换途径、中断和异常的区别、系统调用发生在哪个态这几道题错得干干净净。那一刻我才意识到第一章不是让你背概念而是给你后面所有章节搭建认知框架。进程调度为什么要陷入内核IO操作为什么要关中断这些问题的答案全埋在第一章里。这一章是操作系统整个知识体系的地基地基没打牢后面楼盖得越高越危险。从考点分布看第一章的选择题集中在四块操作系统的概念与特征、发展历程、运行机制尤其是中断与系统调用、体系结构与引导。分值通常在三到五分之间浮动偶尔会跟第二章的进程状态转换结合出题。所以正确的定位是——投入产出比很高花两三个小时吃透换来的是稳定的几分以及后面章节理解成本的直线下降。1.1 为什么说它是框架章而不是记忆章很多人把第一章当成名词解释来背这是最大的误区。比如并发和并行如果只背并发是宏观同时微观交替并行是真正同时选择题稍微换个说法就容易翻车。但如果你理解了单核CPU在同一时刻只能执行一条指令这个物理限制那么并发是多个程序在同一时间间隔内交替运行就变成了自然而然的结果根本不用死记。第一章所有的概念背后都有硬件约束在支撑。我建议的复习方式是每读一个概念先问一句为什么会是这样把物理限制想清楚概念就自己长在脑子里了。再比如共享分为互斥共享和同时共享。互斥共享的代表是打印机同时共享的代表是磁盘文件。为什么打印机不能同时共享因为它是一台物理设备同一时刻只能接收一份打印任务这是硬件层面的串行性决定的。磁盘文件之所以能同时共享是因为读操作可以并发操作系统对文件读写的控制粒度更细。把这些和硬件特性挂钩记起来就顺了也能应付各种变形的选择题。1.2 复习节奏与时间分配建议我的建议是第一章至少过三遍。第一遍通读建立整体印象不求记住所有细节第二遍精读每个概念都追问为什么把易混点单独抄到一张纸上第三遍在复习完第二章进程管理之后回头再看你会发现当初觉得抽象的系统调用中断突然变得具体了。这三遍加起来不要超过四小时但效果比囫囵吞枣看五遍强得多。具体到王道这本书第一章的框架很清晰基本遵循概念—发展—运行机制—结构—引导这条线。我的做法是每看完一节立刻合上书用自己的话把这一节复述一遍讲不出来的地方就是没真懂的地方。这个方法看起来很笨但对第一章这种概念密集的章节特别有效。因为选择题考的就是对概念边界的精确把握你能复述清楚说明你真的分清了是什么和不是什么。提示第一章最容易考的从来不是定义本身而是定义之间的边界。把并发vs并行中断vs异常用户态vs内核态大内核vs微内核这几组边界搞清楚这一章就稳了。2. 操作系统的定义一句话里藏着的三个高频考点抛开那些绕口的学术表述操作系统的定义可以压缩成一句话它是管理计算机硬件和软件资源的程序集合同时为用户和应用程序提供使用这些资源的接口。这句话看起来平平无奇但它包含了三个独立的考点模块——管理什么资源、怎么管特征、管完之后给谁用功能与接口。命题人就是围绕这三点反复出题。先把管理资源这一层说透。计算机系统的资源大致分四类处理机、存储器、文件和IO设备。操作系统对它们的管理分别对应处理机管理、存储器管理、文件管理、设备管理这四大管理又常被称为四大功能。注意有时候教材会把提供用户接口也列为功能之一所以你会看到四大功能和五大功能两种说法。这不算矛盾只是分类口径不同。考试时按题目给的口径来不要纠结哪个更标准。我特别想强调接口这个概念因为它是后面系统调用章节的引子。操作系统不是直接让用户去操作硬件而是通过接口做了一层封装。命令接口面向用户直接输入命令程序接口面向程序员也就是我们常说的系统调用。图形用户界面GUI其实也算命令接口的一种呈现形式。理解了这个层次关系你就明白为什么用户程序不能直接访问硬件——不是不能是不允许操作系统用接口把硬件保护起来了。2.1 四个特征里只有两个是地基操作系统有四大特征并发、共享、虚拟、异步。初学的人容易把它们并列记忆但实际上并发和共享才是最基本的两个特征虚拟和异步是建立在这两个之上的。为什么这么说先看并发。没有并发就没有多个程序同时推进这件事那么虚拟技术里的虚拟处理器时间片轮转也就无从谈起异步性程序走走停停、以不可预知的速度前进更是只有在并发环境下才会出现。再看共享。共享分互斥共享和同时共享没有并发也就没有多个程序竞争同一资源的问题互斥共享自然无从谈起。所以并发和共享互为存在条件是操作系统区别于其他软件的根本标志。虚拟技术值得单独说一下。虚拟分两类时分复用和空分复用。时分复用就是把时间切片分给不同用户典型代表是虚拟处理器空分复用是把空间分割典型代表是虚拟存储器。为什么单核的机器上你感觉在同时开好几个软件因为CPU切换速度极快人眼和操作根本察觉不到这就是时分复用的直观体现。理解了这一层虚拟就不再是抽象名词而是一个你能在任务管理器里看到的现象。异步性是最容易被忽视的一个。因为程序并发执行、资源竞争、走走停停所以每个程序的执行顺序和执行时间都是不确定的。异步性带来的直接后果是同样的程序同样的输入跑两次的耗时可能不同甚至中间的执行顺序都会变。这个特征是后面讲进程同步、互斥、死锁的根本原因第一章埋下种子第二章才开花。2.2 功能与接口别把命令接口和程序接口搞混功能这一块四大管理处理机、存储器、文件、设备比较好记真正容易混的是接口的分类。命令接口是给用户用的又分联机命令接口交互式用户敲一条命令系统执行一条比如在终端里输命令和脱机命令接口批处理命令用户把一批命令写成文件一次性提交。程序接口是给程序用的也就是系统调用只能通过程序代码里的调用指令来使用。这里有个非常经典的考点系统调用只能由程序发起用户不能直接在命令行里调用系统调用。命令行里输命令走的是命令接口底层可能触发系统调用但用户操作的对象是命令接口而不是系统调用本身。很多选择题就是利用这个模糊点设置干扰项比如用户可以通过命令直接调用系统调用这是错的。3. 从手工操作到实时系统每一代都在解决上一代的什么毛病操作系统的发展史不是一段平庸的流水账它本质上是一部发现问题—解决问题—暴露新问题的技术演化史。命题人喜欢考的不是年份而是每个阶段解决了什么、又留下了什么新问题。抓住这条主线这一节就活了。最早的计算机没有操作系统用户直接用机器语言或穿孔卡片操作这段时间叫手工操作阶段。它的最大问题是用户独占全机人机速度严重不匹配——人思考速度慢机器速度快机器大量时间在等人。这个矛盾催生了批处理思想把一批作业组织好让机器连续处理减少人的干预。3.1 单道批处理内存里只放一道程序CPU被迫等IO单道批处理阶段内存里只允许放一道程序程序运行过程中如果遇到IO请求CPU只能干等着IO完成才能继续执行。这个等待是纯粹的浪费因为IO速度比CPU慢好几个数量级。形象地说就像你煮饭的时候必须站在锅边看着米没熟之前什么都不能干时间全耗在等待上。这个阶段彻底解决了人机速度不匹配吗没有它只解决了人工切换作业的等待但没解决CPU等IO的等待。所以新的矛盾出现了CPU利用率太低。于是多道批处理应运而生。3.2 多道批处理资源利用率上去了人机交互却彻底没了多道批处理的核心思想是内存里同时放多道程序当一道程序因为IO而暂停时CPU立刻切换去执行另一道程序。这样一来CPU和IO设备可以并行工作资源利用率大幅提升。这是操作系统发展史上的关键一步现代操作系统的并发思想就源于此。但它带来了新问题用户提交作业后必须等到一批作业全部处理完才能拿到结果中间没有任何交互。也就是说你写程序、提交、等几个小时、看结果如果程序有错再来一轮。这种无人机交互的特性对于需要调试的程序员来说是灾难。而且因为作业批量执行用户对自己作业的运行进度完全没有把控。这个矛盾直接催生了分时系统。3.3 分时与实时一个追求交互体验一个追求时间确定性分时系统的思路是把CPU时间切成很短的片轮流分配给各个用户用户通过终端和系统交互。因为切换极快每个用户都感觉自己独占了一台机器。分时系统解决了人机交互问题也做到了多用户共享主机及时性得到了较大改善。它的核心指标是响应时间也就是从用户提交请求到系统给出响应的时间。实时系统则是另一条路。它不追求交互也不追求高的资源利用率只追求一件事在严格规定的时间内完成处理。实时系统分硬实时和软实时硬实时要求必须在绝对期限内完成比如工业控制、航空航天超时就是事故软实时允许偶尔轻微超时比如视频播放偶尔掉一帧用户察觉不到。判断一个系统是不是实时系统看的是它能否在规定时间内响应而不是它跑得快不快。一个跑得飞快的通用系统如果无法保证响应期限也不能叫实时系统。把这个演化主线串起来手工操作的问题是速度不匹配→单道批处理的问题是不够快→多道批处理的问题是不交互→分时系统解决了交互但实时性不够精确→实时系统专攻时间确定性。每一代都在填上一代的坑同时留下新的坑。这条逻辑链一记住发展史上的所有选择题基本都是送分题。4. 用户态与内核态中断、异常、系统调用的三角关系这一节是第一章真正的硬骨头也是选择题的重灾区。很多同学学完还是一团浆糊中断和异常到底谁包含谁系统调用算不算中断用户态到内核态靠什么触发我当年就是在这儿栽了跟头后来用一套自洽的框架理顺了这里完整分享给你。先建立最根本的物理前提CPU在任何一个时刻只能处于两种状态之一——用户态也叫目态或内核态也叫管态、核心态。内核态可以执行所有指令包括特权指令用户态只能执行非特权指令。什么是特权指令比如开关中断、设置时钟、清内存、修改程序状态字这些都是直接影响系统全局的指令不能让用户程序随便执行否则一个恶意程序就能把系统搅乱。那么用户程序想干大事比如读文件、申请内存怎么办它自己不能碰特权指令只能求助操作系统方式就是系统调用。系统调用发生在用户态——是用户程序主动发起的请求但系统调用的执行会在内核态完成。这里有个极容易错的点系统调用发生在用户态和在内核态执行并不矛盾发起动作在用户态处理过程在内核态。4.1 中断和异常从用户态进内核态的两条腿现在说触发状态切换的途径。用户态切到内核态只有一条路中断广义上包含异常。这句话要记死它意味着用户程序不能通过普通指令主动把自己切成内核态只能通过触发中断或异常来惊动操作系统。中断分两大类。第一类是外中断也叫中断由CPU外部的事件引起比如时钟中断时间片用完、IO中断设备完成了一次IO。外中断和当前执行的指令无关是别人喊你。第二类是内中断也叫异常由当前执行的指令本身引起和当前指令强相关。内中断又细分成三种陷阱trap、故障fault、终止abort。陷阱是程序员有意为之的典型就是系统调用故障是可以被修复的错误比如缺页处理完可以重新执行那条指令终止是不可恢复的严重错误比如硬件故障、除零只能终止程序。很多同学记混的地方在于系统调用到底是不是中断准确的答案是系统调用属于内中断异常里的陷阱广义上也算中断的一种因为它是用户态切换到内核态的途径之一。所以用户态到内核态的转换途径是中断或异常这个说法是完整的只有外中断才能切换状态是错的系统调用不属于中断也是错的。这几个变形都考过。4.2 系统调用的完整过程把系统调用的执行过程拆开看会更清楚。第一步用户程序把系统调用号和相关参数放进指定寄存器第二步执行陷入指令trap指令也叫访管指令这条指令会主动引发一个内中断第三步CPU检测到异常切换到内核态跳转到对应的中断处理程序第四步内核根据系统调用号执行相应的服务例程第五步返回用户态把结果交给用户程序。注意第二步里的陷入指令本身不是特权指令它在用户态就能执行。它做的事情就是故意制造一个异常把控制权交给内核。这个设计很巧妙用户程序没有权限直接进内核但它可以通过一个合法的指令请求内核帮忙。这就像你在小区门口按门铃你没有钥匙进不去但你可以按铃让里面的人来开门。我把这几组关系整理成一张表复习的时候扫一眼就够了概念触发来源与当前指令关系典型例子外中断CPU外部无关时钟中断、IO中断内中断异常CPU内部强相关系统调用、缺页、除零陷阱trap有意触发相关系统调用故障fault可修复错误相关缺页终止abort不可恢复错误相关硬件故障注意中断处理程序一定运行在内核态这是判断状态的一道铁律。任何需要内核介入的处理都在内核态完成。5. 内核到底在内什么体系结构的取舍逻辑学到这里你已经知道用户态和内核态的分工了。那内核里面具体装了哪些东西这个问题就是操作系统体系结构要回答的。很多同学背大内核微内核就是记不住特点其实是没抓住背后的取舍逻辑——所有的结构设计本质上都是在功能放在哪里和性能与可靠性的平衡之间做选择。先明确内核的基本功能。不管哪种结构内核通常都会包含这几样时钟管理、中断处理、原语一段不可被中断的、完成特定功能的程序。原语的典型代表是进程的创建和撤销这些操作一旦开始就必须一次做完中间不能被别的进程打断否则系统状态会乱。至于进程管理、存储器管理、设备管理这些大块头功能放在内核还是放到用户态就是区分大内核和微内核的关键。5.1 大内核与微内核拿功能和性能做交换大内核也叫宏内核、单内核把操作系统的主要功能模块全部塞进内核包括进程管理、存储管理、设备管理、文件管理等等。它的优点是各模块直接调用函数没有额外的通信开销性能极高。缺点也很明显内核极其庞大几百万行代码任何一个模块出bug都可能导致整个系统崩溃可靠性和可维护性差。微内核的想法正好相反。它只把最基本的功能——时钟、中断、原语——留在内核里其他功能全部移到用户态作为独立的服务进程运行。这样一来内核非常小巧稳定可靠一个服务进程崩了不至于拖垮整个系统。但代价是什么用户程序要使用某个服务得经历用户态→内核态→用户态服务进程→内核态→用户态多次反复的状态切换通信开销大性能明显不如大内核。所以这道题的逻辑链是大内核用性能换可靠性或者说牺牲可靠性换性能微内核用性能换可靠性。考试如果问你微内核为什么性能低答案就是状态切换和消息传递开销大问大内核的缺点答案就是内核庞大、可维护性和可靠性差。抓住取舍两个字这组对比就再也不会混。5.2 分层、模块化、外核三种偏小众的结构除了大内核和微内核第一章还会考到分层结构、模块化结构和外核结构。分层结构把操作系统按层次组织每层只能调用下一层的功能调试和验证非常方便但层层调用导致效率低而且现实中的分层很难做到严格。模块化结构把内核划分成多个可独立替换的模块模块间通过接口通信效率和可维护性兼顾但模块间的依赖性难以彻底消除。外核是相对冷门但考点明确的结构。传统操作系统的抽象是把硬件资源抽象成进程、虚拟内存这些概念外核则反其道而行直接给应用程序分配未抽象的物理资源比如给它一块磁盘扇区。应用程序自己决定怎么用这块资源灵活性和效率高但管理复杂。这几种结构我的记忆方法是按抽象程度排序大内核什么都抽象进内核微内核只保留最小抽象外核干脆不抽象。理解了每种的定位特点就是它的自然属性。6. 按下电源键之后操作系统引导的四步引导bootstrap这部分内容不多但每年都有固定的选择题属于那种不看就没分看了就稳拿的考点。很多同学觉得它细碎记不住其实只要把整个过程当成一条启动链顺着链子走就行。第一步CPU加电后从某个固定内存地址通常在ROM里读取第一条指令开始执行BIOS基本输入输出系统。这一步是硬件层面写死的不需要任何软件参与。第二步BIOS进行自检然后寻找启动设备硬盘、U盘等把启动设备的第一个扇区——也就是主引导记录MBR——读入内存。MBR里存着引导加载程序也叫启动管理器。第三步引导加载程序读取磁盘上的活动分区从这个分区里找到操作系统的引导记录把操作系统的内核程序加载到内存。第四步内核开始初始化硬件、建立数据结构、启动第一个进程然后交给用户使用。这条链子最关键的记忆点是MBR在磁盘的第一个扇区BIOS先把MBR读进来再由MBR里的引导程序去加载操作系统内核。考试如果问操作系统引导的第一步是什么答案是从ROM读取BIOS或者说执行自举程序不是直接加载内核。6.1 为什么引导过程要设计成这么绕有同学会问为什么不直接把操作系统内核放在一个固定位置让CPU加电后自己去找非要经过BIOS、MBR这一串原因在于灵活性。如果CPU加电后硬编码内核位置那么换个启动设备、装个双系统就完全没法实现。通过BIOS加引导程序这一层间接操作系统可以放在不同的磁盘、不同的分区甚至可以通过启动管理器让用户选择启动哪个系统。这种多一层间接换来灵活性的设计思想在操作系统里到处都是比如页表就是通过多级间接来实现虚拟地址到物理地址的映射。理解了这层共性记忆就更牢固。7. 虚拟机与第一章的易混概念清单虚拟机是第一章的收尾内容考点不多但很固定。虚拟机的本质是用软件模拟硬件让一台物理机器上能同时运行多个看起来独立的操作系统。它允许一个程序运行在比它实际更高的抽象层上——这句话有点绕翻译成人话就是你在Windows上装个软件就能运行一个虚拟的Linux这个Linux以为自己独占了一台完整的机器。管理虚拟机的软件叫虚拟机管理程序VMM也叫Hypervisor。它分两类。第一类VMM直接运行在硬件之上不依赖宿主操作系统虚拟机就在它上面跑性能和安全性更好常用于服务器。第二类VMM运行在宿主操作系统之上需要先有Windows或Linux这样的宿主系统它作为宿主上的一个程序存在灵活性好但性能略逊。7.1 一组容易混死的对照清单我把第一章最容易被设坑的几组概念整理成表考前扫一遍概念A概念B核心区别并发并行并发是宏观同时微观交替并行是真正同一时刻中断外异常内外中断与当前指令无关异常与当前指令强相关用户态内核态内核态能执行特权指令用户态不能大内核微内核大内核性能高可靠性低微内核反之单道批处理多道批处理单道内存只有一道程序CPU等IO多道可并发分时系统实时系统分时追求交互和响应时间实时追求时间确定性第一类VMM第二类VMM前者直接跑在硬件上后者跑在宿主系统上7.2 我踩过的几个真实坑第一个坑是关于中断是用户态到内核态的唯一途径这句话的。有一道题问以下哪种方式可以让用户程序进入内核态选项里混了个执行特权指令我第一反应是用户程序本来就不能执行特权指令但当时脑子一抽选错了。后来想清楚了用户程序根本不可能执行特权指令所以这个选项本身就是不可能的自然也就谈不上进入内核态。能触发状态切换的只有中断和异常。第二个坑是系统调用和库函数的关系。库函数是语言层面封装好的函数比如C语言的printf它在底层可能会调用系统调用但库函数调用本身不一定是系统调用。有些库函数是纯计算压根不进内核有些则包装了系统调用。选择题常拿这个做文章问库函数调用一定导致系统调用吗答案是不一定。第三个坑是把缺页归到外中断。缺页是当前指令访问的内存页不在内存里引起的和当前指令强相关它是内中断里的故障fault处理完可以重新执行那条指令。凡是和当前指令相关的都是异常不是外中断。这个判断标准一旦建立很多题一眼就能选出来。第一章的内容看起来碎但其实所有的点都能挂到用户态与内核态的分工这条主线上。你只要时刻问自己这个操作发生在哪个态、由谁触发、要不要切换状态大部分概念题都能顺出来。我复习这一章最大的体会是别急着背结论先把每个结论背后的为什么想明白想明白之后你会发现要背的东西其实很少真正需要的是理解边界。等你看完第二章进程管理再回头看第一章那种原来如此的感觉会特别明显那一刻你就知道这一章的功夫没白花。
返回列表