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

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

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

计算机系统就像一座复杂的智能工厂,硬件(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。想找空位就扫图,简单高效。
  • 空闲块链:每个空座上都贴个条,写着下一个空座在哪。
  • 成组链接法:给座位分组,组长这里记录下一组组长在哪和这组空座数。

文件索引:找资料的方法

  • 顺序存取:只能从第一页开始一页页翻。
  • 随机存取:可以根据页码直接跳到想看的那页。
相关推荐
阿祖zu29 分钟前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
不才不才不不才39 分钟前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring
IT_陈寒1 小时前
SpringBoot自动配置失效?这个隐藏配置坑了我一整晚
前端·人工智能·后端
搜狐技术产品小编20231 小时前
告别“黑盒”与误判:如何用“多智能体对抗辩论”重构内容安全审核系统
后端·多agent
DantyWei1 小时前
controller注册及调用时机
后端
edwarddamon2 小时前
Spring Cloud 配置热更新与 Bean 代理机制梳理
java·后端
码事漫谈2 小时前
我用 Seed Evolving 做了个 AI 小说写作工具
后端
Raas1002 小时前
MAIGateway,魔芋企业级AI网关的FinAPI成本竞争力设计
java·后端·网关·api网关·魔芋ai·finapi·mai gateway
计算机魔术师3 小时前
传统基础架构 - 微服务
大数据·后端·微服务·架构·开发工具·编程语言
DantyWei3 小时前
kube-controller-manager的leader选举流程和策略
后端