很多第一次复习操作系统的人,都会在第一章“操作系统概念”上栽跟头。原因很简单:这一章全是定义和分类,看起来比进程管理、内存管理简单太多,于是翻书的时候一目十行,做题的时候就开始怀疑人生——“操作系统负责什么来着?并发和并行到底啥区别?系统调用和普通函数调用不一样在哪?”我自己在跟王道课程复习操作系统的时候,也走过这段弯路。后来我把第一章重新啃了一遍,整理了一份能塞进一张A4纸的思维导图,之后每一轮复习都以它为主线,效果很明显。这篇就把“操作系统概念”这一章的完整学习笔记和思维导图思路分享出来,给正在备考408或者自命题学校的同学做个参考。
1. 备考第一步:先搞清楚“概念”这一章到底在考什么
1.1 这一章的知识点在整张试卷里的位置
别小看第一章,虽然它在考试中很少直接出大题,但选择题里它几乎每年都会出现。更关键的是,第一章是所有后续章节的地基。你后面学进程管理、内存管理、文件管理,追根溯源都在回答同一个问题:操作系统到底在干什么?如果第一章的框架没立起来,后面学得越深越容易乱。
以王道那本《操作系统考研复习指导》为例,第一章“操作系统概念”往下拆,主要就是五块内容:
- 操作系统的概念、功能与目标:搞清楚操作系统“是什么”以及“凭什么存在”。
- 操作系统的特征:并发、共享、虚拟、异步这四大特征,每一年的选择题都喜欢在这里埋坑。
- 操作系统的发展历程:从手工操作到批处理,再到分时、实时,重点在于每个阶段解决了什么问题、带来了什么新问题。
- 操作系统的运行环境:用户态与核心态的切换、中断与异常、系统调用,这是理解和后面章节的硬核基础。
- 操作系统的体系结构与引导:大内核和微内核各自的取舍,以及一台计算机从按下电源键到进入桌面的完整过程。
站在应试角度,这一章的考点非常“散”,形态上像文科,但内核又极度强调理解。所以我的建议是:第一轮复习不要试图背,先把逻辑理顺。
1.2 我第一轮复习时踩过的坑
我自己第一轮复习这个章节时,犯过两个典型错误,估计不少人也会遇到。
第一个错误是把“操作系统是软件”这句话看得太轻。操作系统确实是软件,但它是“最基本的系统软件”,这句话在很多判断题里是挖坑点。平时我们用的Word、浏览器属于应用软件,而操作系统负责管理计算机系统的软硬件资源,为应用软件提供运行环境。别的软件可以缺,操作系统必须得有,这是定位问题。
第二个错误是拿到手就开始背四大特征的定义,结果背来背去还是分不清“并发”和“并行”。后来我发现,这个知识点必须结合操作系统具体的实现机制去理解,光背书上的定义,换个说法问你照样不会。
所以这一章的学习,我不建议逐字逐句背课本,而是建议先把整体框架“画”出来,再往里面填细节。这个“画框架”的过程,就是做思维导图。
2. 操作系统的概念与功能:一条主线串起所有内容
2.1 从两个身份重新理解“操作系统是什么”
书上的经典定义是这样的:操作系统是控制和管理整个计算机系统的硬件与软件资源,合理地组织调度计算机的工作和资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。一句话太长,拆开看,操作系统有“两个身份”。
第一个身份是资源管理者。计算机系统里的资源可以分为四类:处理机、存储器、文件(信息)、设备。操作系统对每一类资源都有专门的一套管理机制:
- 处理机管理:进程控制、进程同步、进程通信、死锁处理、处理机调度,核心是怎么让CPU不被浪费。
- 存储器管理:内存分配与回收、地址映射、内存保护与共享、内存扩充,核心是怎么让有限的内存装下更多进程。
- 文件管理:文件存储空间管理、目录管理、文件读写管理与保护,核心是怎么把数据持久化地组织好。
- 设备管理:缓冲管理、设备分配、设备处理、虚拟设备,核心是怎么让慢速I/O设备和高速CPU配合好。
第二个身份是服务和用户接口提供者。用户(包括人和应用程序)不会直接操作硬件,通过操作系统提供的接口来使用计算机。接口主要有几类:
- 命令接口:联机命令接口,也就是交互式终端里敲的命令;脱机命令接口,比如批量处理的作业控制语言。
- 程序接口:由系统调用组成,应用程序通过它请求操作系统内核服务。
- 图形用户界面(GUI):严格来说,GUI不算操作系统内核的一部分,它更多是运行在用户态的程序,这一点王道教材里特别提醒过,选择题容易拿它和命令接口混淆。
我自己的记忆方式是:把操作系统想成一个公司的总经理,一方面要管好各部门(资源管理),另一方面要接客户电话、处理客户需求(服务用户)。这个类比虽然朴素,但特别管用,因为后面所有章节都在跟“总经理的某个部门”打交道。
2.2 四个目标:方便、有效、可扩充、开放
操作系统设计时有四个目标:方便性、有效性、可扩充性、开放性。
方便性很好理解,没有操作系统,你面对的就是一堆裸机,操作门槛高到离谱。有效性包含两层意思,一是提高系统资源利用率,二是提高系统吞吐量。注意,有效性和方便性之间是有矛盾的:从系统角度我们希望资源利用得越充分越好,从用户角度我们希望操作越方便越好,操作系统就是在两者之间做平衡。
可扩充性对应的是操作系统要能适应硬件和应用软件的迭代。开放性说的是系统要遵循标准,不同厂家的硬件和软件能组合在一起工作。这四个目标里,“有效性”是选择题出镜率最高的,特别是“吞吐量”这个概念,不要和“响应时间”混了。
2.3 四大特征:并发、共享、虚拟、异步
这四兄弟是整个第一章的灵魂,值得单独展开说。
并发:两个或多个事件在同一时间间隔内发生。注意“时间间隔”三个字,它强调的是宏观上一起发生,微观上可能交替执行。单核CPU上,多个进程“同时”推进靠的是时间片轮转,一个瞬间只有一个进程真正在跑,这叫并发。多核CPU才可能真正做到同一时刻多个进程同时执行,这叫并行。并发不等于并行,这个点考了无数次。
共享:系统中的资源可以供多个并发执行的进程共同使用。共享有两种方式:互斥共享和同时访问。互斥共享指的是某个资源在同一时间段只允许一个进程访问,比如打印机;同时访问指的是多个进程可以“同时”访问某个资源,比如磁盘,但注意微观上其实还是轮流操作。共享和并发是互为存在条件的,这是单选题经典考点:没有并发,就谈不上共享;没有共享,并发也没有意义。
虚拟:一个物理实体变成若干个逻辑上的对应物。抽象点说,空分复用和时分复用。空分复用就是虚拟内存,把物理内存的一部分“借”给进程,让每个进程都以为自己拥有一整块连续内存;时分复用就是虚拟处理器,一个CPU通过快速切换让多个进程都以为自己独占CPU。这里最容易错的理解是:虚拟不是“假”,而是“逻辑上的真”。进程确实觉得自己有独占资源,操作系统在幕后完成实际的物理分配。
异步:进程以不可预知的速度向前推进。因为进程要竞争CPU、I/O等资源,本来应该一次执行完的进程,可能走走停停。异步不是混乱,而是操作系统在并发环境下必须接受的一种常态。只要资源分配合理,最终结果仍然是确定的,这就是一个可以接受的异步性。
我当时记这四个特征,用了这样一句话串起来:并发让多个任务一起推进,共享让这些任务共同使用资源,虚拟让每个任务觉得资源是够用的,异步让推进的速度变得不可预测。一句话把四大特征的内在逻辑全部打通。
3. 发展历程:理解每个阶段“解决了什么,又带来了什么”
3.1 从手工操作到操作系统正式诞生
操作系统的诞生是一个“问题驱动”的过程,每个阶段都是为了解决上一个阶段的痛点。
最早是手工操作阶段。程序员把程序写在纸带上,然后到机房里把纸带喂给计算机,等程序跑完,拿走结果,下一个人才能用。这个阶段最大的问题是人机速度矛盾:CPU运行速度极快,而人操作机器的速度极慢,导致CPU大量时间在空等。而且用户独占全机,资源利用率极低。
后来有了单道批处理阶段。人们设计了监督程序,把一批作业通过输入设备(最早是磁带)提前输入到机器里,监督程序自动一个接一个地执行。这就缓解了人机速度矛盾,CPU不用等一个人手工操作了。但问题是内存中始终只有一道程序,程序在执行过程中一旦发起I/O操作,CPU就只能干等。用一句话概括:单道批处理解决了“人慢”的问题,但没有解决“I/O慢”的问题。
真正让操作系统“诞生”的是多道批处理阶段。核心思想是:内存中同时放入多道相互独立的程序,当一道程序等待I/O时,CPU立刻切换去执行另一道程序。这种技术叫多道程序设计技术。它让CPU利用率大幅提升,系统吞吐量也随之增加。代价是系统失去交互性,用户没办法在程序运行过程中干预,而且作业的平均周转时间变长。
3.2 分时与实时:从“跑得快”到“响应快”
多道批处理最大的槽点是没交互,用户提交作业后可能要等好几个小时甚至第二天才能拿结果。于是出现了分时操作系统。它的核心设计是时间片轮转:把CPU时间切成很短的时间片,轮流分配给各个终端用户的作业。每个用户都能及时得到响应,感觉好像自己独占了一台计算机。分时系统的特征我记成四个词:多路性、独立性、及时性、交互性。
紧接着就是实时操作系统。它更强调及时性和可靠性,主要用在工业控制、导弹发射、证券交易这类对时间要求严格的场景。实时系统又分硬实时(必须在截止时间前完成,比如飞行器控制)和软实时(偶尔超时也能接受,比如视频点播)。分时和实时的区别经常考:分时要的是“及时响应”,实时要的是“在截止时间前完成指定动作”,不在时间上绝对较劲。
3.3 其他几类操作系统的存在感
网络操作系统、分布式操作系统、嵌入式操作系统在王道教材里也出现过,但考试占比不高。核心记住几个特点就行:
- 网络操作系统:把网络中各种计算机资源统一管理和使用,核心是网络通信和资源共享。
- 分布式操作系统:多台计算机协同完成同一任务,对用户来说像一台机器。
- 嵌入式操作系统:运行在嵌入式设备上,要求小型化、实时性强、可靠性高,比如常见的RTOS(实时嵌入式操作系统)。
我自己复习发展历程时,只画了一条时间线,每个节点标注三个关键词:“痛点→方案→新问题”。比如多道批处理的三个关键词就是“I/O浪费→多道驻留→失去交互”。这样复习的时候脑子里就像放电影一样,每个阶段的来龙去脉都清楚。
4. 运行环境:用户态/核心态、中断与系统调用的“三角关系”
4.1 用户态和核心态:为什么必须区分
为了保证系统安全,操作系统把指令分成了特权指令和非特权指令。特权指令只能由操作系统内核执行,比如内存清零、设置时钟、进程切换等;非特权指令是普通用户程序可以执行的,比如算术运算、取数存数等。
为了让特权指令不会随便被执行,CPU设置了两种工作状态:用户态(目态)和核心态(管态)。程序状态字寄存器(PSW)里专门有一位用来标识当前状态。用户程序运行在用户态,操作系统内核运行在核心态。用户态下执行特权指令会被禁止。
这里有一个特别经典的判断题方向:用户态到核心态的切换,唯一途径是中断/异常/陷入。这是硬性规则,没有第二条路。而核心态回到用户态,是通过中断返回时修改PSW实现的。也就是说,操作系统执行完内核代码后,通过“返回”操作让CPU重新进入用户态。
4.2 中断的分类与处理流程
中断是操作系统“响应外部事件”的机制,也是用户态进入核心态的唯一入口。按触发来源,中断分成两大类:
内中断(异常):来自CPU内部,与当前执行的指令相关,细分为三种:
- 陷阱(陷入):主动的、有意的,比如系统调用指令(trap指令、陷入指令)就是故意触发内中断,让CPU进入核心态去执行服务。
- 故障(Fault):可修复的错误,比如缺页异常,处理完当前指令后可以恢复执行。
- 终止(Abort):不可修复的致命错误,程序直接停止。
外中断:来自CPU外部,与当前指令无关,比如I/O设备完成中断、时钟中断、电源故障等。外中断还分可屏蔽中断(比如打印机完成信号)和不可屏蔽中断(比如电源掉电)。
记住这个分类,有两条判断规律:
- 系统调用属于内中断中的“陷入”,不是外中断,每年都有人栽在这里。
- 中断处理过程中,保存断点(PC和PSW)的工作是硬件自动完成的,不需要操作系统额外安排,而保存现场(通用寄存器的内容)是由操作系统处理的。
中断处理的完整流程,我总结成一个七步歌:关中断→保存断点→引出中断服务程序→保存现场→执行中断处理→恢复现场→开中断并返回。这七步所有中断都通用,后面学进程切换时也会用到,提前记牢比较好。
4.3 系统调用:应用程序与内核打交道的“官方通道”
系统调用是操作系统提供给应用程序的程序接口,也是操作系统内核对应用程序开放的“服务台”。应用程序在用户态通过系统调用请求内核代劳某些特权操作。按照功能,系统调用可以分成五类:设备管理(设备请求、释放)、文件管理(读、写、创建、删除)、进程控制(创建、撤销)、进程通信(消息传递)、内存管理(内存映射等)。
这里有一个高频考点:系统调用和普通函数调用的区别。普通函数调用只是程序内部的跳转,不涉及CPU状态的切换;系统调用则必须通过陷入指令触发中断,让CPU从用户态切换到核心态,执行完内核代码后再返回用户态。也就是说,每一次系统调用都伴随着用户态和核心态的切换,这也是系统调用比普通函数调用开销大的原因。
还有一个隐藏考点:库函数和系统调用不是一一对应关系。很多库函数封装了系统调用,比如printf底层要调用write系统调用;但有些库函数完全不需要系统调用,比如strlen函数,它就是用户态内存操作。所以不能看到“库函数”三个字就觉得它一定走系统调用。
我在学习这一节时,把整个系统调用的执行链路默写了三遍:用户程序→陷入指令→CPU切换到核心态→中断处理→找系统调用号→执行内核服务→返回用户态。后面学文件系统和进程通信时,很多问题都会回到这条链路上来。
5. 体系结构与引导:大内核、微内核以及开机时发生了什么
5.1 大内核和微内核的取舍逻辑
操作系统的体系结构,核心问题只有一个:哪些功能放在核心态,哪些功能放在用户态?
大内核(宏内核):把进程管理、内存管理、文件管理、设备管理等主要功能模块都放进内核,统一跑在核心态。好处是模块之间可以直接调用,性能好;坏处是内核代码庞大、层次混乱、改动一个地方可能影响全局,维护成本高。Linux早期就是大内核结构。
微内核:只把最基本的机制放进内核,比如中断处理、进程通信、CPU调度等,其他功能(文件系统、设备驱动)搬到用户态,以普通进程的形式运行。好处是内核小、结构清晰、可靠性高、便于扩展;坏处是用户态和核心态之间需要频繁消息传递,状态切换开销大,性能比大内核低。Windows NT的内核是典型的微内核设计。
考研考到这里,最常见的题型是给你一个操作系统的特点,让你判断它是大内核还是微内核。要拿分,只要记牢几个关键词就行:大内核=“性能好、代码庞大、复杂度高”;微内核=“结构清晰、扩展性好、性能差、切换开销大”。
5.2 操作系统的引导:从按下电源键到看见桌面
操作系统引导(Boot)就是计算机启动操作系统的过程。这一部分在王道第一章里单独成节,也是一道应用型选择题的常客。
完整的引导流程可以压缩成五步:
- CPU加电,执行固化的启动程序(BIOS/UEFI),进行硬件自检(POST),初始化基本硬件。
- 根据配置的启动顺序,找到启动介质(比如硬盘)。
- 从启动介质的主引导记录(MBR)或EFI启动管理器中读出引导程序(比如GRUB)。
- 引导程序把操作系统内核从磁盘加载到内存,并进行内核初始化。
- 内核创建第一个用户进程(现代Linux上是systemd),最终进入用户界面。
如果在不同学校的试卷里看到“多核CPU启动时先让一个核执行”之类的描述,别慌,本质也是引导流程的一部分。书上通常把它描述成“引导程序把操作系统内核装入内存”,考试一般不会考得太偏,重点是MBR、引导程序、内核加载这三个关键节点。
5.3 虚拟机相关内容怎么处理
王道第一章最后一小节是虚拟机(Virtual Machine)和容器。考研对这部分要求不高,但它是选择题潜在出题点,重点记两类虚拟机:
- 第一类虚拟机管理程序(Type 1):直接运行在硬件之上,没有宿主操作系统,例如VMware ESXi、Xen。它本身就扮演了操作系统的角色。
- 第二类虚拟机管理程序(Type 2):作为应用程序运行在宿主操作系统之上,再由它创建虚拟机,例如VirtualBox、VMware Workstation。
容器和虚拟机的区别,关键是容器共享宿主机内核,不需要模拟整个硬件,因此更轻量,比如Docker。把这条线理清楚,选择题基本就能应付。
6. 思维导图:我是怎么把第一章压到一张A4纸上的
6.1 导图的分支逻辑
很多同学做思维导图容易陷入“抄目录”的误区,把标题抄一遍就完事,那样没意义。我做的第一章思维导图,根节点是“操作系统是什么”,下面长出了七个分支,每个分支都是考试会直接用到的内容:
- 分支1:定位(软件、最基本的系统软件、资源管理者和服务提供者)
- 分支2:功能与目标(四类资源管理 + 四个目标)
- 分支3:特征(并发、共享、虚拟、异步)
- 分支4:发展史(手工→单道→多道→分时→实时,每条线标“痛点/方案”)
- 分支5:运行环境(用户态/核心态、中断分类、系统调用链路)
- 分支6:体系结构(大内核/微内核)
- 分支7:引导与虚拟机(五步引导流程、两类虚拟机)
每个分支尽量只写关键词和箭头,用自己的话组织,而不是抄原句。画完之后,你试着把这张图默写出来。如果哪个分支写不出来,说明那一块知识还有漏洞,马上回看书补上。
6.2 几个特别有用的记忆口诀
复习过程中我整理了几个顺口的口诀,分享出来。
四大特征:“共共享虚异”(并发、共享、虚拟、异步),读起来有点奇怪,但越奇怪越不容易忘。
中断分类:“陷入是主动,故障是可修,终止是没救”。系统调用属于“陷入”,这一条单独记。
大内核和微内核:“大而全、跑得快、乱糟糟;小而美、传消息、开销大”。
引导流程:“加电自检,找启动盘,读引导程序,装内核,起第一个进程”。
6.3 用选择题自测,把“背过”变成“会做”
思维导图做好之后,光看不练还是不行。我在完成第一章的思维导图后,把王道配套习题的选择题刷了一遍,重点关注这几类题:
- 给出一个场景,判断体现的是哪个特征。
- 给出一个现象,判断用户态还是核心态发生的事。
- 给出一个描述,判断是大内核还是微内核。
- 给出一个指令,判断是不是特权指令。
刷题的意义不在于记住题目答案,而在于检验自己能不能把导图里的知识点迁移到具体场景中。比如“一个进程在等待打印机时主动让出CPU”这道题,考的其实是“并发”和“共享”的综合理解,而不是单一知识点。如果你能用导图把题目涉及的知识点定位出来,说明第一遍复习是真的过关了。
我个人在这章花费的时间大概是三天,第一天看书加听课,第二天画思维导图并对照知识点逐个过,第三天刷题加错题整理。把这一章真正吃透之后,后面进程管理、内存管理里的很多机制,比如进程切换、页表、系统调用,基本上都是一听到就能联想到第一章讲过的底层逻辑。这份“地基”打得越扎实,后面的复习节奏就越快。