软考架构师故事系列-操作系统

第一章:操作系统这位大管家(概述)

管家是干嘛的?(定义与作用)

计算机系统就像一座复杂的智能工厂,硬件(CPU、内存、硬盘)是厂房和机器,软件(Word、游戏)是要完成的生产任务。

操作系统就是这座工厂的CEO大管家。它不亲自拧螺丝,但负责调配所有资源:谁来用机器(CPU)、原料放哪(内存)、产品存哪(硬盘)、怎么跟外界交互(键盘鼠标)。目的就是让工厂高效运转,让干活的(应用程序)能轻松工作。

管家除了管理资源,还为你(用户)提供友好的操作界面(比如Windows的桌面),并为程序员提供开发平台。

管家的四大性格(特征)

  1. 并发性 :大管家可以同时推进多项任务。就像厨师长一边炖着汤,一边切着菜,宏观上 几件事在同时进行。但如果他只有一口锅(单核CPU),那么任何一个时刻,他要么在看汤,要么在切菜,微观上是交替进行的

  2. 共享性:工厂里的资源不是某个工人独占的。打印机大家都能用,数据大家都能查,但得按规矩来,这就是共享。

  3. 虚拟性:这是管家最厉害的"障眼法"。

    • 把物理上的一个变成逻辑上的多个:只有一颗CPU,但管家通过快速切换,让你感觉同时听歌、聊天、写文档,好像好几个CPU在为你服务。
    • 把物理上的多个变成逻辑上的一个:多块硬盘可以被映射成一个大的虚拟磁盘,你不需要关心文件到底存在哪块盘上。
  4. 不确定性:工厂里情况千变万化,任务是"走走停停"的。你无法精确预测下一秒CPU会处理哪个任务,但管家能保证一切都可控。

管家的五项全能(功能)

  1. 进程管理(管时间):管理CPU的时间,把它切成一个个小片,合理分配给各个任务。谁先用,用多久,都由它定。
  2. 文件管理(管仓库):管理硬盘上的文件,负责存、取、组织目录,保证你的文件不丢、不乱。
  3. 存储管理(管空间):管理内存条的空间,给运行的程序分配"工位",用完了再回收。
  4. 设备管理(管外联):管理所有的输入/输出设备,比如打印机、键盘、鼠标等。
  5. 作业管理(管交互):提供任务管理器、语音助手这样的人机交互界面。

管家也分门派(分类)

  • 批处理系统:老式会计。收一堆任务,按顺序自动处理,不跟你互动。
  • 分时系统:客服中心。一台主机连多个终端,轮流为每个人服务一小段时间,让人感觉是自己的专属电脑。
  • 实时系统 :自动驾驶。对外来信息反应必须快、准、稳,可靠性第一,比如火箭控制。
  • 网络操作系统 :连锁店管理。模式有:
    • 集中模式:只有一个总店,所有数据和处理都在那。
    • 客户端/服务器模式:有总店(服务器)和分店(客户端),分店可以向总店要资源。
    • 对等模式:大家都是分店,可以互相分享资源,没有绝对的中心。
  • 分布式操作系统:云计算网络。多台电脑组成一个整体协同工作,你感觉不到它们在地理上是分开的。
  • 嵌入式操作系统 :智能家电的"私人大管家"。特点是 "小、定、快、稳、移"
    • 微型化:省吃俭用,代码量和功耗极低。
    • 可定制:能灵活裁剪功能。
    • 实时性:响应要快。
    • 可靠性:关键场合不能死机。
    • 易移植性:通过硬件抽象层(HAL)和板级支撑包(BSP)等技术,能轻松移植到不同硬件上。
    • 初始化过程 (自上而下):片级 (CPU芯片)→ 板级 (主板其他硬件)→ 系统级(操作系统内核),就像盖房子,先从地基开始。

第二章:工厂的"任务管理大师"(进程管理)

任务三要素(进程组成)

一个任务(进程)就像一个生产工单,包含:

  • 进程控制块(PCB)员工工牌,是它的唯一标识,记录了任务的全部信息。
  • 程序 :工人手里的操作手册,描述要做什么。
  • 数据 :加工需要的原材料

任务的"三生三世"(进程状态)

一个任务主要有三种状态,看图理解:

stateDiagram-v2 direction LR [*] --> 就绪态 : 除CPU外,一切准备就绪 就绪态 --> 运行态 : 被调度获得CPU 运行态 --> 就绪态 : 时间片完,或被高优先级剥夺CPU ① 运行态 --> 阻塞态 : 等待某事件(如I/O) ② 阻塞态 --> 就绪态 : 所等事件完成(如I/O完毕) ③
  • 就绪态:工人(任务)万事俱备,只欠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任务发金卡,可以插队。
  • 多级反馈调度:综合体。新任务先给最高优先级,但时间片最短。如果干不完,就降到次高优先级,时间片也变长。这样就兼顾了快任务和慢任务。

任务的"死胡同"(死锁)

  • 死锁:互相抓着一个对方要的宝物不放手,谁也动弹不得。

  • 四大必要条件(缺一不可):

    1. 互斥:宝物只能一个人独占。
    2. 持有并等待:死抓着宝物不放,还想要别人的。
    3. 不可剥夺:别人抢不走我手里的宝物。
    4. 环路等待: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里点打印,感觉瞬间打完了,其实是系统把数据快速存到磁盘的输出井里,然后排队指挥打印机慢慢印。这就把一台物理的独占打印机,虚拟成多台逻辑打印机,实现了共享。

五种工作方式,效率越来越高

  1. 程序控制方式(查询方式):CPU反复问打印机"好了没?好了没?",啥也干不了,全程**"死等"**。
  2. 程序中断方式 :CPU下达打印命令后就忙别的了。打印机打完发个中断信号通知CPU回来收尸。效率高了。
  3. DMA方式:专门的数据搬运工DMA控制器,直接在内存和高速外设间传数据。CPU只要告诉它搬哪、搬多少,就能撒手不管了,最后接个中断就行。
  4. 通道方式 :更聪明的专属I/O处理器。能执行通道程序,管理一大片外设,CPU彻底解放。
    • 字节多路通道:管理慢速设备,交叉传输。
    • 数组选择通道:管理高速设备,一次服务一个。
    • 数组多路通道:上面两者的结合。
  5. I/O处理机:一台完整的专用电脑,几乎替主机包揽了所有外围设备的I/O。

第五章:工厂的"档案管理员"(文件管理)

空间如何管理(类似电影院排座)

  • 空闲区表 :用表格记下连续的"空闲区",比如1-5排是空的,8-10排是空的。适合连续分配
  • 位示图:画一张巨大的座位图,空座用0,占座用1。想找空位就扫图,简单高效。
  • 空闲块链:每个空座上都贴个条,写着下一个空座在哪。
  • 成组链接法:给座位分组,组长这里记录下一组组长在哪和这组空座数。

文件索引:找资料的方法

  • 顺序存取:只能从第一页开始一页页翻。
  • 随机存取:可以根据页码直接跳到想看的那页。
相关推荐
阿聪谈架构1 小时前
第08章:MCP 模型上下文协议(上)
人工智能·后端
mrchan1 小时前
markdown 画图总结
后端
开心就好20252 小时前
全面介绍iOS开发工具:Xcode、AppCode、CocoaPods、Fastlane和Git
后端·ios
Rust研习社2 小时前
Rust Pin 解析:核心原理与异步编程实践
开发语言·后端·rust
book123_0_992 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
NCIN EXPE2 小时前
使用Springboot + netty 打造聊天服务(一)
java·spring boot·后端
涡能增压发动积2 小时前
日志里全是 $ref,但客户端居然没事?
后端
我叫黑大帅2 小时前
受保护的海报图片读取方案 - 在不公开静态资源目录下如何获取静态资源
后端·python·面试
我母鸡啊2 小时前
软考架构师故事系列-嵌入式技术
后端