第一章:操作系统这位大管家(概述)
管家是干嘛的?(定义与作用)
计算机系统就像一座复杂的智能工厂,硬件(CPU、内存、硬盘)是厂房和机器,软件(Word、游戏)是要完成的生产任务。
操作系统就是这座工厂的CEO大管家。它不亲自拧螺丝,但负责调配所有资源:谁来用机器(CPU)、原料放哪(内存)、产品存哪(硬盘)、怎么跟外界交互(键盘鼠标)。目的就是让工厂高效运转,让干活的(应用程序)能轻松工作。
管家除了管理资源,还为你(用户)提供友好的操作界面(比如Windows的桌面),并为程序员提供开发平台。
管家的四大性格(特征)
-
并发性 :大管家可以同时推进多项任务。就像厨师长一边炖着汤,一边切着菜,宏观上 几件事在同时进行。但如果他只有一口锅(单核CPU),那么任何一个时刻,他要么在看汤,要么在切菜,微观上是交替进行的。
-
共享性:工厂里的资源不是某个工人独占的。打印机大家都能用,数据大家都能查,但得按规矩来,这就是共享。
-
虚拟性:这是管家最厉害的"障眼法"。
- 把物理上的一个变成逻辑上的多个:只有一颗CPU,但管家通过快速切换,让你感觉同时听歌、聊天、写文档,好像好几个CPU在为你服务。
- 把物理上的多个变成逻辑上的一个:多块硬盘可以被映射成一个大的虚拟磁盘,你不需要关心文件到底存在哪块盘上。
-
不确定性:工厂里情况千变万化,任务是"走走停停"的。你无法精确预测下一秒CPU会处理哪个任务,但管家能保证一切都可控。
管家的五项全能(功能)
- 进程管理(管时间):管理CPU的时间,把它切成一个个小片,合理分配给各个任务。谁先用,用多久,都由它定。
- 文件管理(管仓库):管理硬盘上的文件,负责存、取、组织目录,保证你的文件不丢、不乱。
- 存储管理(管空间):管理内存条的空间,给运行的程序分配"工位",用完了再回收。
- 设备管理(管外联):管理所有的输入/输出设备,比如打印机、键盘、鼠标等。
- 作业管理(管交互):提供任务管理器、语音助手这样的人机交互界面。
管家也分门派(分类)
- 批处理系统:老式会计。收一堆任务,按顺序自动处理,不跟你互动。
- 分时系统:客服中心。一台主机连多个终端,轮流为每个人服务一小段时间,让人感觉是自己的专属电脑。
- 实时系统 :自动驾驶。对外来信息反应必须快、准、稳,可靠性第一,比如火箭控制。
- 网络操作系统 :连锁店管理。模式有:
- 集中模式:只有一个总店,所有数据和处理都在那。
- 客户端/服务器模式:有总店(服务器)和分店(客户端),分店可以向总店要资源。
- 对等模式:大家都是分店,可以互相分享资源,没有绝对的中心。
- 分布式操作系统:云计算网络。多台电脑组成一个整体协同工作,你感觉不到它们在地理上是分开的。
- 嵌入式操作系统 :智能家电的"私人大管家"。特点是 "小、定、快、稳、移" :
- 微型化:省吃俭用,代码量和功耗极低。
- 可定制:能灵活裁剪功能。
- 实时性:响应要快。
- 可靠性:关键场合不能死机。
- 易移植性:通过硬件抽象层(HAL)和板级支撑包(BSP)等技术,能轻松移植到不同硬件上。
- 初始化过程 (自上而下):片级 (CPU芯片)→ 板级 (主板其他硬件)→ 系统级(操作系统内核),就像盖房子,先从地基开始。
第二章:工厂的"任务管理大师"(进程管理)
任务三要素(进程组成)
一个任务(进程)就像一个生产工单,包含:
- 进程控制块(PCB) :员工工牌,是它的唯一标识,记录了任务的全部信息。
- 程序 :工人手里的操作手册,描述要做什么。
- 数据 :加工需要的原材料。
任务的"三生三世"(进程状态)
一个任务主要有三种状态,看图理解:
- 就绪态:工人(任务)万事俱备,只欠CPU这个大机器。
- 运行态:工人正用着CPU干活。
- 阻塞态 :工人干活时发现缺料了(等待I/O),就去睡觉,只能从他睡觉的原因醒来后,回到就绪态重新排队。
💡 真题演练 :进程从运行态变就绪态,就像题1 里说的,最常见的就是主动让出CPU,比如时间片到了。
任务的"默契与礼让"(同步与互斥)
- 互斥 :"用完再还" 。资源像公共厕所的坑位 ,一次只能进一个人,进去就得锁门(加锁),出来才能给别人用。这个资源就是 "临界资源" ,操作它的那段代码就叫 "临界区"。
- 同步 :"快慢协调" 。像自行车和汽车一起出游,速度快的不时要停下来等一下 速度慢的,保持步调一致。
P、V操作:任务间的"信号旗"
信号量就是"旗语",用来通信。
-
互斥信号量 :初值为1,就像厕所门把手上"有/无人"的牌子。
-
同步信号量 :初值通常是共享资源的数量,比如仓库的空位。
-
P操作(申请) :S=S-1。如果S>=0,就进去。如果S<0,说明没地儿了,就到门口排队阻塞。
-
V操作(释放) :S=S+1。如果S>0,自己走人。如果S<=0,说明还有人在排队,就唤醒一个过来。
经典案例:生产者-消费者(PPT图)。生产者是送货员,消费者是取货员。用互斥信号量S0保证人不能同时进仓库;同步信号量S1代表空位,S2代表商品数。
任务的"时间轴"(前趋图)
就像一个带箭头的流程图。可以清楚地看到,A、B、C三个任务可以并行干 ,但它们都干完是D任务开始的前提。
任务分几等?(调度级别)
- 高级调度(长调度/作业调度):决定让哪个后备作业进入就绪队列,成为"准员工"。
- 中级调度(中程调度/对换调度):把暂时用不上的进程换出内存,需要时再调回来,腾出空间。
- 低级调度(短程调度/进程调度):最活跃,决定哪个就绪的"准员工"马上用CPU。
排班的艺术(调度算法)
- 先来先服务FCFS :食堂打饭,先到先得。宏观调度常用。
- 时间片轮转 :轮流坐庄。每人限时用CPU,用完就下来,很公平。微观调度常用。
- 优先级调度:给VIP任务发金卡,可以插队。
- 多级反馈调度:综合体。新任务先给最高优先级,但时间片最短。如果干不完,就降到次高优先级,时间片也变长。这样就兼顾了快任务和慢任务。
任务的"死胡同"(死锁)
-
死锁:互相抓着一个对方要的宝物不放手,谁也动弹不得。
-
四大必要条件(缺一不可):
- 互斥:宝物只能一个人独占。
- 持有并等待:死抓着宝物不放,还想要别人的。
- 不可剥夺:别人抢不走我手里的宝物。
- 环路等待:A等B,B等C,C等A,形成闭环。
-
如何应对:
- 预防:直接破坏四大条件之一,比如让资源可共享(破坏互斥),但通常很难。
- 避免 :银行家算法。像银行放贷,借前评估风险,只给还得起的方案,确保系统始终安全。
- 检测与解除:死锁发生了就发现它,然后强制收回资源或掐掉某个进程来解开。
- 资源计算 :公式
死锁最大资源数 = n*(R-1)。比如3个进程都需要5个同种资源,假设每个进程都拿到了4个,此时一共分配12个就会死锁(都差一个),所以不发生死锁的最小资源数是12+1=13。
任务的"分身术"(线程)
-
进程 vs. 线程 : 进程是工厂的一个车间 ,是资源分配的基本单位,有自己的地盘。线程是车间里的工人,是CPU调度的基本单位,它们共享车间的所有工具和材料(公共数据、文件),但每个人有自己的工具箱(栈指针等)。
引入线程的好处:在车间里加个工人干活,比新建一个车间要快得多、开销小得多,并发度也更高。
管家的"紧急预案"(中断)
电脑遇到急事,会暂停手头工作去处理。PPT上分这几类:
- 程序性中断:程序自己出错。如算术溢出、访问了不该访问的内存。
- 外中断:外部事件。如按下了键盘的Ctrl+C、时钟信号。
- 输入输出中断(I/O中断):外设操作完成或出错。如打印机缺纸。
- 硬件故障中断:机器出毛病了。如电源故障、内存校验错。
- 访管中断(系统调用) :程序主动请求操作系统服务,这是从用户态进入内核态的途径。
第三章:工厂的"空间规划师"(存储管理)
分区管理:整块出租
- 固定分区 :把内存这个大仓库,用墙隔成固定大小的隔间。大货放小间会浪费内部碎片。
- 可变分区 :动态隔间,刚好放货。但搬走货物后会留下很多小空隙,产生外部碎片。
- 可重定位分区:把所有货物推到一起,把小空隙拼成大空间,解决外部碎片。
分页管理:用活页本记笔记
把内存和进程都切成一样大的块(内存的物理块,进程的逻辑页)。就像活页笔记,所有笔记页(逻辑页)都是散装的,可以放进任意空白页(物理块)里。需要一个页表来记录哪页笔记对应哪张物理页。
逻辑地址 [页号P,页内偏移量W] 转换成物理地址 [物理块号F,W]。优点 :很灵活,碎片少。缺点:访问一次数据要查两次内存(慢表),可能产生抖动。
页面置换:书架满了怎么办
内存快满了,需要换掉一页。
-
最优算法(OPT):马后炮。换掉未来最久才用的书,理想模型,用于比较。
-
先进先出(FIFO) :换掉最早放上书架的书。可能把常用书换走(抖动)。
-
最近最少使用(LRU):根据局部性原理,换掉最近最久没碰过书。效率高,是主流。
-
快表:把常用的页表项缓存在Cache里,查一次快表和一次内存就行,能加速地址转换。那存在慢速内存里的页表就叫"慢表"。
分段与段页式
- 分段 :按逻辑整体分,比如代码段、数据段,每个段大小不一。逻辑地址是
[段号, 段内地址],段表要记录段长和基址,以便检查地址是否越界。 - 段页式:先分段,段内再分页。结合了分段逻辑性好和分页碎片少的优点,但管理起来相当复杂。
第四章:工厂的"设备总务处"(设备管理)
设备的登记造册(分类)
- 按数据组织 :按数据块传输的叫块设备 (如磁盘),按字符传输的叫字符设备(如键盘)。
- 按资源分配 :一次只能一个进程用的叫独占设备 (如打印机),大家一起用的叫共享设备 (如磁盘),通过技术把独占变共享的叫虚拟设备。
假脱机技术(SPOOLing):共享打印机的魔术
你在Word里点打印,感觉瞬间打完了,其实是系统把数据快速存到磁盘的输出井里,然后排队指挥打印机慢慢印。这就把一台物理的独占打印机,虚拟成多台逻辑打印机,实现了共享。
五种工作方式,效率越来越高
- 程序控制方式(查询方式):CPU反复问打印机"好了没?好了没?",啥也干不了,全程**"死等"**。
- 程序中断方式 :CPU下达打印命令后就忙别的了。打印机打完发个中断信号通知CPU回来收尸。效率高了。
- DMA方式:专门的数据搬运工DMA控制器,直接在内存和高速外设间传数据。CPU只要告诉它搬哪、搬多少,就能撒手不管了,最后接个中断就行。
- 通道方式 :更聪明的专属I/O处理器。能执行通道程序,管理一大片外设,CPU彻底解放。
- 字节多路通道:管理慢速设备,交叉传输。
- 数组选择通道:管理高速设备,一次服务一个。
- 数组多路通道:上面两者的结合。
- I/O处理机:一台完整的专用电脑,几乎替主机包揽了所有外围设备的I/O。
第五章:工厂的"档案管理员"(文件管理)
空间如何管理(类似电影院排座)
- 空闲区表 :用表格记下连续的"空闲区",比如1-5排是空的,8-10排是空的。适合连续分配。
- 位示图:画一张巨大的座位图,空座用0,占座用1。想找空位就扫图,简单高效。
- 空闲块链:每个空座上都贴个条,写着下一个空座在哪。
- 成组链接法:给座位分组,组长这里记录下一组组长在哪和这组空座数。
文件索引:找资料的方法
- 顺序存取:只能从第一页开始一页页翻。
- 随机存取:可以根据页码直接跳到想看的那页。