资讯详情

资讯详情

操作系统自己总结PDF:以资源管理为主线串起进程内存文件IO

简介这是一份面向西北工业大学801考研考生的操作系统核心知识点总结PDF内容按考试大纲要求编排适合备考后期对照真题查漏补缺。笔记覆盖操作系统概述、进程管理、内存管理、文件管理、设备管理与作业调度等考纲模块进程三态及PCB、FCFS/SJF/优先级调度、信号量与PV操作分页与分段、地址映射、虚拟内存及碎片问题文件逻辑/物理结构、存取方法与访问控制设备分类、I/O控制方式与SPOOLing技术作业生命周期及周转时间等性能指标。考点以要点形式归纳便于快速回顾。资源压缩包内共1个PDF文件大小19.05MB扫描版页面清晰、内容连贯可直接打印或置入平板标注重点。目前已有167人浏览学习。1. 操作系统自己总结.pdf把教材读薄、把面试题串起来的“个人操作手册”临近期末或面试前很多人电脑里都躺着一份“操作系统自己总结.pdf”——但说实话大部分人的版本只是把汤小丹那本《计算机操作系统》的目录抄了一遍复制了点概念合上之后照样不会做那种“多级队列调度计算题”也扛不住面试里追问“你画的这个状态图为什么没有挂起”。这份PDF真正该干的事只有一件把操作系统这根藤上的进程、内存、文件、IO、死锁五大块按“资源如何被管理”串成自己的话让复习从“翻书”变成“检索”。它不解决你读不读教材的问题它解决的是你合上教材之后能不能默写主线、能不能对着一个场景说出系统调用和调度策略的问题。这份总结适合三类人期末冲刺的在校生、准备校招或社招面试的开发者、以及日常要排查Linux性能问题却总在碎片知识里打转的运维。2. 先立主线把“资源管理”当骨架别按教材章节抄为什么大多数总结没价值因为教材是按“概念到原理再到算法”的线性顺序写的而人的记忆是网状结构。操作系统这门课说到底就是一台计算机里 CPU、内存、存储、IO 设备这四类资源如何被抽象、分配、调度、回收的过程。我一般会把“资源管理”四个字作为整个总结的目录根节点下面挂四大资源再往下挂操作系统为实现管理而引入的概念进程、地址空间、文件描述符。这样复习时你的路径是“内存不够了怎么办 → 虚拟内存 → 页表 → 缺页中断 → 页面置换”而不是“翻到第三章第二节”。2.1 为什么主线选“资源管理”而不是“进程、内存、文件”平铺直接按五大块平铺有个问题各章之间的因果断了。比如文件系统里的页缓存为什么值得专门写一段因为读文件时进程发出 read 系统调用经过 VFS、具体文件系统、页缓存最后落到磁盘 IO 调度器——这条链路横跨文件、内存、IO 三章。如果总结按平铺目录写你会在每一章都重复一遍“页缓存”却始终建立不起整体感。以资源为主线后我会在关键位置写一个“跨章节引用”在文件系统章写“读文件的数据通路”并顺带标注“详见 IO 章 DMA”“详见内存章页缓存”让 PDF 自己长出超链接式的知识勾连。动手搭这份 PDF 时我建议按下面四步走别急着打开编辑器打字用思维导图把教材目录拆散按“CPU、内存、存储、IO设备”四个桶重新分拣所有知识点。对每个桶提炼出“核心抽象、分配单位、主要策略、常见痛点”四项这就是后面每一章的模板。把跨桶的知识点页缓存、DMA、文件描述符单独记为“枢纽节点”在正文里显式交叉引用。最后再给每个桶配一幅状态机图图放章节开头文字解释放图后。这四步做完目录树就立住了。目录树决定后续所有笔记的落位改起来最贵所以先花一晚上把结构想清楚比抄一星期笔记值。2.2 用一张“四资源管理视图”表格把总纲钉住我会在 PDF 的第 1 页放一张固定表格之后每往一个资源分支写一节就回来更新这一行的状态。具体表格如下资源核心抽象分配单位主要策略常见痛点CPU进程 / 线程时间片调度算法先来先服务、短作业优先、多级反馈队列饥饿、上下文切换开销内存虚拟地址空间页 / 段请求调页、页面置换LRU、时钟抖动、页表开销存储文件与目录、inode块空闲空间管理、日志文件系统掉电一致性、碎片IO 设备文件描述符、设备文件IO 请求中断、DMA、IO 调度阻塞与忙等、缓冲这张表的价值在于它把六章教材压成几个“槽位”。复习进程的时候你看到 CPU 行得能说出典型调度算法看到内存行得能画出页表结构。表不是摆着看的是给你做主动回忆用的——遮住策略列自己默写一行写不出来就回去翻对应章节。这个动作比把正文读十遍都有效。我还会在表格下方加三行手写批注提醒自己哪些地方容易考第一CPU 的可抢占性让它不会成为死锁资源第二文件系统的 inode 是存储资源的核心抽象和内存的页表一样需要单独画图第三IO 设备的“文件描述符”把设备和文件统一了所以 IO 和文件系统在“打开、读写、关闭”这条路径上高度重叠。这三条批注是整份 PDF 的“钩子”复习时扫一眼表格就能把它们带出来。2.3 每个资源分支配一张“状态机图”比抄十页笔记管用PDF 是静态的但操作系统的很多概念是状态迁移。我会为进程、虚拟内存、IO 请求各画一张状态机图。这里不需要 Visiodraw.io 或 Excalidraw 就够关键在于图里必须包含“阻塞 → 就绪”这类容易丢的边。以进程三态图为例我会画运行占用 CPU 执行指令就绪万事俱备只差 CPU阻塞等待某事件IO 完成、锁释放、信号量。边分别是运行 → 就绪时间片到或被抢占、运行 → 阻塞主动等待事件、阻塞 → 就绪事件到达、就绪 → 运行被调度。除此之外我会用虚线额外标出“挂起”状态当内存不够时整个进程被换出到外存从就绪或阻塞变为挂起就绪、挂起阻塞。这是很多期末试卷和面试官最爱挖的细节问“等待事件的过程中进程能不能被换出内存”答案是可以这就是挂起。把这张图画完之后基本上就能回答“进程和线程的区别除了共享地址空间还差什么”这类连环问调度单位、切换开销、通信方式、同步需求都不一样。图的好处是复习时一眼扫过马上知道自己哪里记不清不用从头读正文。每次考前我只看这些图和那张四资源表能直接说出概念才算真正过了一遍。3. 进程与内存把知识点写成能从系统调用推演到缺页中断的事故链这一章要处理整份 PDF 里最厚的两大部分。我的做法是每个部分只写一条主线进程部分走“创建 → 调度 → 同步 → 死锁”内存部分走“逻辑地址 → 页表 → 缺页中断 → 置换”。主线上的每一个节点都配一个可复现的命令或代码片段让总结在理论之外还能当操作手册用。3.1 进程章节的骨架PCB、调度队列、同步原语、死锁必要条件进程是一段运行中的程序这句话背下来没用要拆开看。我在 PDF 里会先定义 PCB进程控制块说清楚它是内核里保存进程全部信息的数据结构包括 PID、状态、程序计数器、寄存器现场、内存指针、打开文件表、调度信息。所有“进程管理”动作其实都是对该进程的 PCB 做修改。然后用一个最小代码块展示 fork 的过程#include unistd.h #include stdio.h int main() { pid_t pid fork(); // 调用一次返回两次 if (pid 0) { perror(fork failed); // 进程数达上限或内存不足 } else if (pid 0) { printf(child, my pid is %d\n, getpid()); // 子进程从这里继续 } else { printf(parent, child pid is %d\n, pid); // 父进程拿到子进程 PID } return 0; }这段代码的逻辑说明fork 是 Unix 系创建进程的唯一系统调用调用一次后内核复制当前进程的 PCB 和地址空间之后两个进程各自从 fork 返回处继续执行。返回值是区分父子进程的关键父进程拿到子进程 PID子进程拿到 0。这段代码在总结里不是用来教 C 语言的而是为了让你记住两个考点进程创建的代价是复制地址空间写时复制优化除外以及 fork 由内核完成调用者只看到返回值。调度的部分我一般整理成一组决策问题什么时候触发调度进程退出、阻塞、时间片耗尽、中断返回调度器选择哪一个就绪进程策略切换要做哪些事保存现场、恢复现场、更新 PCB 状态把这三个问题串起来调度算法的名字就自然记住了。多级反馈队列的要点是“优先数越高时间片越短动态调整”讲到 Linux 时再补充一句 CFS 用虚拟运行时间实现公平别把教材的通用模型直接扣到某个具体系统头上。同步与死锁建议写在同一小节里因为它们的根源相同多进程访问共享资源。信号量、互斥锁、管程是三种常见实现死锁的四个必要条件是互斥、持有并等待、不可抢占、循环等待。我在 PDF 里会给每个必要条件配一个反例如果资源可抢占死锁可能不会发生——比如 CPU 就是可抢占的所以 CPU 资源不会形成传统意义下的死锁。3.2 内存部分写成一条事故链缺页异常从哪来、到哪去内存管理最怕的是“背了页表结构但不会推演”。我用的方式是事故链叙事程序访问一个逻辑地址 → MMU 查页表 → 页表项有效位为 0 → 触发缺页异常 → 内核检查地址合法性 → 合法则从磁盘调入页面并更新页表 → 重新执行被中断的指令。这六个环节每一个都可能出问题PDF 里我会把“可能出问题”写成批注逻辑地址越界进程访问了不属于它的地址缺页异常处理时发现地址超出进程空间直接报段错误。页表项有效位为 0 但页在内存比如刚被换出的页面又被访问这就是抖动的前兆。换入时内存满了需要先换出一个牺牲页若是脏页还要写回磁盘。重新执行指令因为缺页前指令没有执行完CPU 必须恢复现场从原指令重来。为每一个环节写“出问题”的分支记忆会牢得多。比这更硬核的是把页表层级画出来。这里用一小段伪代码表示地址翻译// 两级页表的地址翻译x86 典型结构 虚拟地址 目录索引(10位) 页表索引(10位) 页内偏移(12位) 1. 读 CR3 寄存器拿到页目录基址 2. 用目录索引查页目录项得到页表基址 3. 用页表索引查页表项得到物理页框号 4. 物理地址 页框号 12 页内偏移 5. 若第 2 步或第 3 步的页表项有效位为 0则触发缺页异常这段伪代码的逻辑说明不要把“页表”想象成一张大表现代系统是多级页表加上 TLB快表。伪代码的价值在于让你看见每一步访问的是“哪张表”和“哪个表项”。如果面试问“为什么需要多级页表”答案就是单级页表要为进程的整个地址空间预留页表项4GB 空间需要一百万个页表项太浪费多级页表只按需分配叶节点未分配区域在上级页表项里置空省下的内存非常可观。缺页中断之后的页面置换算法也放在这一章但我一般只重点写两个LRU最近最久未使用实现代价高实际用的是时钟算法Clock近似 LRU抖动thrashing的根源是局部性差或物理内存太小工作集模型是应对抖动的经典思路。写到这里我会顺手记一条 Linux 查看命令free -h 看物理内存和 swap 的使用率如果 si/so 持续跳动说明系统正在频繁换页这就把“抖动”从概念变成了可观测现象。4. 文件与 IO最容易在总结里被低估、面试却全问的两块很多人的 PDF 把文件系统和 IO 写得很薄因为教材里这两章偏描述性。但实际工作中排查磁盘 IO 高、文件删不掉、服务报 too many open files 时这两块最常被用到。我在总结里倾向于把文件系统抽象成“三层结构”系统调用层、VFS 层、具体文件系统层然后从 open 到 read 走一遍完整链路。4.1 文件系统总结的粒度从 inode 到目录项再到挂载文件系统的核心不是“文件内容”而是“文件元数据”。我会在 PDF 里澄清这几个术语inode索引节点保存文件的元数据——权限、所有者、大小、时间戳、数据块指针。不含文件名。目录项dentry把文件名映射到 inode 编号。目录本质上是一个特殊文件内容是“文件名 inode 号”的列表。超级块superblock记录整个文件系统的整体信息——块大小、总块数、空闲块位图、inode 表位置。这三者的关系可以这样理解打开路径 /tmp/data.log 时内核从根目录开始用 dentry 找到 tmp 的 inode进入 tmp 的目录内容再找到 data.log 的 inode最后根据该 inode 的数据块索引把文件内容读进页缓存。整趟“路径解析”是 IO 密集型的所以现代系统都有 dentry cache 和 inode cache——这也是为什么大量小文件操作对内存那么敏感。我在总结里会给一个“看待文件系统”的命令场景用 stat 查看 inode 信息# 查看一个文件的 inode 元数据 $ stat main.c File: main.c Size: 1024 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 2885151 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user) Access: 2024-05-01 10:00:00.000000000 0800 Modify: 2024-05-01 09:00:00.000000000 0800 Change: 2024-05-01 09:00:00.000000000 0800 Birth: 2024-04-30 18:00:00.000000000 0800命令的逻辑说明stat 直接读 inode 表输出里的 Inode 号就是文件在文件系统中的身份标识Blocks 显示占用的磁盘块数Links 是硬链接计数。理解 inode 之后很多“删不掉文件”“移动目录卡死”的现象就不再玄学删除文件实际上是删除目录项并递减 inode 的 Links 数直到 Links 归零才真正回收 inode 和数据块——如果某个进程还持有该文件的文件描述符空间依旧不会释放。挂载这一块我一般用一张表格整理“查看、挂载、卸载”的操作操作命令说明查看当前挂载df -hT显示文件系统类型和使用率查看内核记录的挂载关系mount -l列出所有挂载点挂载 USB 或 ISOmount /dev/sdb1 /mnt -t vfat指定类型挂载卸载umount /mnt若设备忙会报 target is busy查看具体文件所在文件系统findmnt /path比 df 更精细这张表的价值在排查当磁盘满、inode 满df -i、文件系统只读时先分清是哪个挂载点的问题再决定扩容、清理还是查 lsof。总结时别只抄命令要抄“什么时候用”比如写日志的应用突然报 No space left on devicedf -h 看块没满df -i 看 inode 满了这种经验比背命令更有用。4.2 IO 章节用“中断、DMA、缓冲”把层次讲清而不是抄流程图IO 部分最容易写得像教科书插图。我会从 CPU 的角度梳理IO 设备怎么通知 CPU、数据怎么搬运、应用怎么等待。三层递进关系程序查询pollingCPU 死循环检查设备状态。简单但浪费 CPU。中断驱动设备完成 IO 后发中断CPU 暂停当前工作去处理。适合低速设备但每个字节都中断开销大。DMA设备控制器直接和内存交换数据完成后只发一次中断。适合块设备是磁盘、网卡的主流。这三层不是“三种做法”而是“CPU 越来越不想等”的演进。在 PDF 里我会配一个对比表方式数据搬运者CPU 介入次数适用场景程序查询CPU每次传输持续占用简单控制器、早期系统中断CPU每字节或每块一次串口、键盘等低速设备DMADMA 控制器每次传输结束一次磁盘、网卡、显卡至于“阻塞 / 非阻塞、同步 / 异步”这两组词我的总结方式是给四个组合各配一句人话阻塞 同步read 系统调用没数据就睡过去数据到了被唤醒。最常见。非阻塞 同步read 没数据就立刻返回 EAGAIN应用轮询。典型如 epoll 用非阻塞 fd 配合事件循环。异步 通知aio_read 或 io_uring发出后继续干别的完成时回调。高性能 IO 的关键。这个总结是 IO 层最容易在面试里被追问的部分。我会在 PDF 里特别加上一句提示非阻塞是指调用不等待不是数据到达不需要时间异步是指调用后由内核或硬件主动告知结果。这句话能避掉八成对这两个词的混淆。5. 避坑自己总结操作系统时的六个翻车点总结这活儿看着简单实际上一个晚上就能写出几十页但值不值钱要看能不能躲开下面这些坑。5.1 坑一按教材目录抄合上 PDF 大脑一片空白现象总结写完复习时像看新书什么都很熟悉什么题都不会做。原因目录是教材作者设计的知识编排顺序不是你的记忆组织方式。解决每写完一节遮住正文用一句话说出这节的“问题是什么、解法是什么、代价是什么”。比如“逻辑地址到物理地址页表映射代价是页表占用内存和查表开销解法是多级页表加 TLB”。如果说不出来说明这节还不是你的需要重写。5.2 坑二只写“是什么”不写“为什么、什么时候用”现象写“LRU 是最近最久未使用”但题目让它实现 LRU 或判断时钟算法是否等价于 LRU 时卡壳。原因把算法名字和算法机制混为一谈。解决每个算法都补三个要素——时间空间代价、适用场景、典型变种。LRU 的代价是维护访问时间序链表加哈希实际用近似 LRU时钟算法场景是局部性明确的页面或缓存淘汰。补齐这些考试和面试都不怕追问。5.3 坑三纯理论不碰 Linux命令和概念两层皮现象能默写 fork 是什么但在 Linux 里查进程、看调度策略、找内存占用时手足无措。原因只把总结当背诵材料没当操作手册。解决给每个概念配一条可执行命令。进程状态配 ps -eo pid,stat,comm内存配 free -h 和 cat /proc/meminfo文件系统配 df -hT 和 stat。命令不用多每节一条但必须亲手跑过并把输出或关键字段截进 PDF。5.4 坑四把调度算法和实际调度器混为一谈现象拿着“多级反馈队列”去套 Linux 的 CFS发现对不上。原因教材讲的是通用原理Linux 的 CFS 用红黑树按虚拟运行时间调度它的前身是 O(1) 调度器。解决总结时明确加一个“现实与教材差异”小节Linux 有实时优先级SCHED_FIFO/RR和普通优先级 CFSWindows 用基于优先级的抢占调度但概念模型仍可参考通用框架。别在面试里说“Linux 用多级反馈队列”容易被追问穿。5.5 坑五死锁背“四个必要条件”不会用资源分配图画环现象判断“两个进程各持有一把锁并互相等待”是不是死锁时犹豫写代码时没意识到 AB-BA 锁问题。原因只背定义不动手画图。解决在总结里画一遍资源分配图能构成循环等待就是死锁再对应到代码线程 A 持有锁 1 等锁 2线程 B 持有锁 2 等锁 1就是活生生的死锁。用 pthread_mutex_lock 写一个这样的例子记录 strace 卡住的现象比任何理论都深刻。5.6 坑六总结完不验证以为写完就是会了现象觉得 PDF“写完了”但随机抽一个知识点无法脱稿讲明白。原因缺乏闭环。解决把总结 PDF 当“半成品”每周抽一天做“裸讲”对着章节标题不看正文把该章讲一遍。讲不出来时不是重抄而是只补“卡住的那张图或那条命令”。这能保持总结持续可用而不是变成一个漂亮但永远不翻的收藏品。6. 把总结 PDF 变成能反复刷的“一页纸”验证与进阶用法最后一步我想给出一个可执行的验证与迭代方案让这份“操作系统自己总结.pdf”真正发挥价值。我的习惯做法是每写完一章做三件事——提炼一张“一页纸”把核心状态机画成图把容易混淆的对比做成表格。一页纸不是摘要而是“如果只能看一页你会写什么”的极限压缩。比如进程章的一页纸可能是PCB 描述了进程的一切fork 复制 PCB状态机有运行、就绪、阻塞、挂起同步用信号量和锁死锁四条件调度权衡吞吐、延迟、公平。完成一章后我会尝试用三句话复述这一页纸做不到就说明输入还不够稠密。验证方法分三层。第一层是默写就是前文说的遮住正文说一句话。第二层是做题找一份期末试卷或考研真题限时做完再对照总结看遗漏。第三层是讲给别人听找一个同样在复习操作系统的人把调度算法的权衡讲五分钟。讲完你会发现自己以为懂的地方其实没有闭环。这三层做完基本可以判断这份总结是否真正内化。进阶用法是把一页纸和对比表导入 Anki做成间隔重复的卡片正面是“进程三态图中的挂起怎么画”背面是“从就绪或阻塞挂起均因内存换出恢复时先换入内存再回就绪或阻塞”。这会把你手里的静态 PDF 变成主动回忆的训练集。我一般会在复习阶段每周做三十张卡片考前面试前只刷卡片不再从头翻 PDF。最后说一条我自己的血泪经验。最早做操作系统总结时我追求“全”抄了各种教材和博客PDF 洋洋洒洒近一百页结果期末成绩并不理想因为全程没有主动回忆只是把文档存进了硬盘。后来我把那份 PDF 推倒重来改成“主线加状态机图加一页纸加坑位”的模式才真正把知识点记牢。希望这份思路对你也有帮助愿你能写出一份让自己信服、可以反复刷出自己的操作系统总结。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →