[软考网规考点笔记]-操作系统核心知识及历年真题解析

文章目录

  • 前言
  • 一、操作系统核心机制
    • [1. 磁盘调度算法](#1. 磁盘调度算法)
      • [1.1 先来先服务(FCFS)](#1.1 先来先服务(FCFS))
      • [1.2 最短寻道时间优先(SSTF)](#1.2 最短寻道时间优先(SSTF))
      • [1.3 扫描算法(SCAN, "电梯算法")](#1.3 扫描算法(SCAN, “电梯算法”))
      • [1.4 循环扫描算法(C-SCAN)](#1.4 循环扫描算法(C-SCAN))
    • [2. 内存页面置换算法](#2. 内存页面置换算法)
      • [2.1 最优置换(OPT)](#2.1 最优置换(OPT))
      • [2.2 先进先出(FIFO)](#2.2 先进先出(FIFO))
      • [2.3 最近最少使用(LRU)](#2.3 最近最少使用(LRU))
      • [2.4 时钟置换(CLOCK)](#2.4 时钟置换(CLOCK))
    • [3. 进程同步与通信(PV操作)](#3. 进程同步与通信(PV操作))
      • [3.1 P操作 (Wait)](#3.1 P操作 (Wait))
      • [3.2 V操作 (Signal)](#3.2 V操作 (Signal))
      • [3.3 互斥访问](#3.3 互斥访问)
      • [3.4 同步协调](#3.4 同步协调)
    • [4. 系统性能与可靠性计算](#4. 系统性能与可靠性计算)
      • [4.1 流水线计算](#4.1 流水线计算)
      • [4.2 系统可靠性:](#4.2 系统可靠性:)
    • [5. 死锁](#5. 死锁)
      • [5.1 死锁预防](#5.1 死锁预防)
      • [5.2 死锁避免:](#5.2 死锁避免:)
      • [5.3 死锁检测与解除](#5.3 死锁检测与解除)
      • [5.4 关键公式](#5.4 关键公式)
  • 二、网规核心考点总结
  • 三、典型真题思路解析

前言

掌握操作系统核心原理是理解计算机系统如何高效、稳定管理软硬件资源的基础。本文针对软考中经常出现的磁盘调度、系统可靠性、并发控制与内存管理等考点,对这一部分的知识点与历年真题进行梳理与解析。尽可能使我们能构建一个较为清晰的知识体系,以应对软考或其它相关考试。

一、操作系统核心机制

1. 磁盘调度算法

  • 简单来说,磁盘调度算法就是管理磁头的处理请求规则。
  • 其作用是减少磁头来回跑的时间,让硬盘读写数据更快。
  • 通俗讲就是很多人同时需要读取磁盘中的内容,磁盘调度算法要知道先读哪些内容,后读哪些内容效率会更高一些。当然也包括用户存储时的情况。

1.1 先来先服务(FCFS)

  • 按请求到达的先后顺序服务。实现简单,这是最公平的磁盘调度算法,但平均寻道时间长,效率较低。

1.2 最短寻道时间优先(SSTF)

  • 优先服务与当前磁头距离最近的请求。虽缩短了平均寻道时间,但容易导致边缘区域的请求"饥饿"。

  • 通俗来说,就是磁盘磁头总是优先服务离它最近的请求,导致位于磁盘最内圈或最外圈的请求可能一直得不到服务,这是一种牺牲了公平性来换取整体效率算法。

1.3 扫描算法(SCAN, "电梯算法")

  • 磁头按固定方向(如从内到外)移动,沿途服务请求,到达一端后立即反向扫描。兼顾效率与公平性,消除了SSTF算法中的请求"饥饿"现象。
  • 就是磁盘来回扫描磁道的过程中,在某一点上如果正好有人请求这个点上的内容,就把他去出来,然后继续按顺序向前或向后扫描。就像电梯拉人,到哪一层,哪一层的的人就上或者下,来回往返。

1.4 循环扫描算法(C-SCAN)

  • 磁头仅单向(如从内到外)提供服务,到达末端后立即返回至起点重新开始单向扫描。提供了更均匀的等待时间。
  • 循环扫描算法如同一辆单向行驶的公交车,永远只按 A站→B站→C站→D站 这一个方向开。到终点D站后,就空车回起点A站继续单向行驶。

2. 内存页面置换算法

  • 简单来讲,就是电脑的物理内存空间有限,但运行的程序很多。当新的程序启动,物理内存不够用时,系统就必须决定把哪些程序暂时移动到硬盘,给新的程序腾出空间。系统的这套决策规则就是页面置换算法。

2.1 最优置换(OPT)

  • 淘汰未来长时间不被访问的页面。理论上这是最优的一种算法,但在实际中是无法实现的,通常用于评价其他的算法。

2.2 先进先出(FIFO)

  • 淘汰最早调入内存的页面。就是最早进入内存的,最先被请出去。

  • 但它有个缺点:有时候增加更多的内存,反而会导致缺页率升高,这种现象被称为"Belady异常"。

  • 下面通过一个具体例子理解Belady异常,假设页面访问顺序是:3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4

  • 当系统只有3个物理内存块时:[ ] 内是内存中的页面,箭头指向最早进入、即将被淘汰的页面。

    访问 3: 缺页,装入 [3→]
    访问 2: 缺页,装入 [3→, 2]
    访问 1: 缺页,装入 [3→, 2, 1]
    访问 0: 缺页,淘汰最老的3,装入 [2→, 1, 0]
    访问 3: 缺页,淘汰最老的2,装入 [1→, 0, 3]
    访问 2: 缺页,淘汰最老的1,装入 [0→, 3, 2]
    访问 4: 缺页,淘汰最老的0,装入 [3→, 2, 4]
    访问 3: 命中![3→, 2, 4] (3已在内存)
    访问 2: 命中![3→, 2, 4]
    访问 1: 缺页,淘汰最老的3,装入 [2→, 4, 1]
    访问 0: 缺页,淘汰最老的2,装入 [4→, 1, 0]
    访问 4: 命中![4→, 1, 0]
    总计缺页次数:9次

  • 当系统增加1个物理块,变为4个时:

    访问 3: 缺页,装入 [3→]
    访问 2: 缺页,装入 [3→, 2]
    访问 1: 缺页,装入 [3→, 2, 1]
    访问 0: 缺页,装入 [3→, 2, 1, 0] ← 现在有4个块,不用淘汰
    访问 3: 命中![3→, 2, 1, 0]
    访问 2: 命中![3→, 2, 1, 0]
    访问 4: 缺页,淘汰最老的3,装入 [2→, 1, 0, 4]
    访问 3: 缺页,淘汰最老的2,装入 [1→, 0, 4, 3]
    访问 2: 缺页,淘汰最老的1,装入 [0→, 4, 3, 2]
    访问 1: 缺页,淘汰最老的0,装入 [4→, 3, 2, 1]
    访问 0: 缺页,淘汰最老的4,装入 [3→, 2, 1, 0]
    访问 4: 缺页,淘汰最老的3,装入 [2→, 1, 0, 4]
    总计缺页次数:10次

2.3 最近最少使用(LRU)

  • 淘汰最长时间未被访问的页面。性能接近OPT,这个方法认为,"最近用得少的,未来也可能用得少"。它会清走最长时间没有被用过的页面。
  • 但问题在于,要精准记录每个页面多久没用的成本很高,相当于要给每个页面挂一个实时更新的计时器,实现起来开销很大。

2.4 时钟置换(CLOCK)

  • 一种近似LRU的高效算法。每页设置一个访问位。淘汰时,像时钟指针一样循环扫描,遇到访问位为1的页则置0并跳过,遇到访问位为0的页则淘汰。改进型时钟算法还考虑了修改位,优先淘汰未修改的干净页,以减少I/O操作。
  • 时钟置换是一种成本控制和实用主义相结合的算法,被广泛应用于现代操作系统中。

3. 进程同步与通信(PV操作)

  • PV操作是解决进程互斥与同步问题的核心原则,作用于信号量(S)上。就是把计算机中同时运行的多个程序(进程)协调起来,解决"互斥"(某个资源一次只能程序用)和"同步"(运行要有先后顺序)问题。

3.1 P操作 (Wait)

S = S - 1。若 S >= 0,进程继续;若 S < 0,进程阻塞并进入该信号量的等待队列。

3.2 V操作 (Signal)

S = S + 1。若 S > 0,进程继续;若 S <= 0,从等待队列中唤醒一个进程。

3.3 互斥访问

初始化信号量 S = 1,将临界区置于P(S)和V(S)之间。

3.4 同步协调

通过设置初始值为0或其他值的信号量,控制进程执行的先后顺序。

4. 系统性能与可靠性计算

4.1 流水线计算

  • 执行时间:T = k * Δt + (n - 1) * Δt (k为流水线阶段数,n为任务数,Δt为周期时间)
  • 吞吐率 (TP):TP = n / T
  • 最大吞吐率:TP_max = 1 / Δt
  • 加速比 (S):S = T_顺序 / T_流水

4.2 系统可靠性:

  • 串联系统:所有部件都必须正常工作。可靠性 R = R1 × R2 × ... × Rn;失效率 λ ≈ λ1 + λ2 + ... +
    λn。
  • 并联系统:一个部件正常系统即正常。可靠性 R = 1 - (1 - R1) × (1 - R2) × ... × (1 - Rn)。

5. 死锁

  • 多个进程因竞争资源而相互无限期等待。产生必须同时满足四个条件:互斥、持有并等待、不可剥夺、循环等待。

5.1 死锁预防

  • 破坏上述任一条件,如一次性申请所有资源(破坏持有并等待)。

5.2 死锁避免:

  • 采用银行家算法等安全状态检测。

5.3 死锁检测与解除

  • 允许发生,发生后通过剥夺资源或撤销进程解除。

5.4 关键公式

  • 系统有N个进程,每个最多需求R个资源。要保证绝对无死锁,系统至少需提供 K = N * (R - 1) + 1 个该类资源。

二、网规核心考点总结

  • 磁盘调度算法比较:能根据寻道序列计算不同算法的磁头移动总道数,并理解其优缺点。
  • 页面置换算法应用:给定页面访问序列和物理块数,计算FIFO、LRU、CLOCK算法的缺页次数和缺页率。注意FIFO的Belady异常
  • PV操作设计与分析:能根据进程间的同步/互斥关系,正确设置信号量初值并编写P、V操作序列。
  • 可靠性计算:准确区分串联与并联模型,并代入公式计算。混合系统需先分解为串并联子模块逐步求解
  • 死锁资源数计算:熟练运用公式 K = N * (R - 1) + 1 进行计算或判断。
  • 流水线性能计算:熟练计算吞吐率、加速比和实际执行时间。

三、典型真题思路解析

2020年-第2题

题目: 假设某计算机的字长为32位,该计算机文件管理系统磁盘空间管理采用位示图,记录磁盘的使用情况,若磁盘的容量为300GB,物理块的大小为4MB,那么位示图的大小为()个字。

备选答案:

A. 2400

B. 3200

C. 6400

D. 9600

正确答案: A. 2400

解析: 本题考察物理存储的空间管理计算。首先计算物理块总数:300GB / 4MB = 300 * 1024 / 4 = 75 * 1024 个块。每个块用1个比特(bit)表示,总比特数为 75 * 1024。由于字长为32位(即每字32比特),所需字数 = (75 * 1024) / 32 = 2400 字。这属于操作系统的存储管理(外存管理)范畴。

2020年-第4题

题目: 分页内存管理的核心是将虚拟内存空间和物理内存空间皆划分为大小相同的页面,并以页面作为内存空间的最小分配单位,下图给出了内存管理单元的虚拟的物理页面翻译过程,假设页面大小为4KB,那么CPU发出虚拟地址0010000000000100,其访问的物理地址是()。

备选答案:

A. 11000000000100

B. 010000000000100

C. 110000000000000

D. 1100000000000010

正确答案: A. 11000000000100

解析: 典型的分页地址变换题。页面大小为4KB=2^12B,故页内偏移地址为12位。虚拟地址"0010 000000000100"中,后12位"000000000100"为页内偏移,前4位"0010"为页号(十进制2)。根据题目给出的页表图,页号2对应的物理块号(页框号)为"110"。将物理块号与页内偏移拼接,得到物理地址:110 000000000100,即A选项。

2020年-第5题

题目: 以下关于计算机内存管理的描述中,()属于段页式内存管理的描述。

备选答案:

A. 一个程序就是一段,使用基址极限对来进行管理

B. 一个程序分为需要固定大小的页面,使用页表进行管理

C. 程序按逻辑分为多段,每一段内又进行分页,使用段页表来进行管理

D. 程序按逻辑分成多段,用一组基址极限对来进行管理,基址极限对存放在段表里

正确答案: C. 程序按逻辑分为多段,每一段内又进行分页,使用段页表来进行管理

解析: 考察对段页式内存管理核心概念的理解。段页式是分段和分页的结合,即先将用户程序按逻辑分成若干段,再把每个段分成固定大小的页。内存分配以页为单位,通过段表和页表(通常结合为段页表)进行地址映射。

2023年-第38题

题目: 若用 128K×8 bit 的存储器芯片,构成地址 40000000H 到 400FFFFFH 且按字节编址的内存区域,则需()片芯片。

备选答案:

A. 16

B. 32

C. 4

D. 8

正确答案: D. 8

解析: 内存容量的计算与芯片扩展。属于计算机组成原理和存储体系的知识。地址范围 40000000H ~ 400FFFFFH 的字节数为:400FFFFFH - 40000000H + 1 = 100000H Byte = 2^20 Byte = 1MB。每片芯片容量为 128K × 8 bit = 128K Byte(注意:8bit=1Byte)。所需芯片数 = 总容量 / 单芯片容量 = 1MB / 128KB = 1024KB / 128KB = 8(片)。

2020年-第1题

题目: 在支持多线程的操作系统中,假设进程P创建了线程T1,T2,T3,那么下列说法中,正确的是()。

备选答案:

A. 该进程中已打开的文件是不能被T1,T2和T3共享的

B. 该进程中T1的栈指针是不能被T2共享,但可被T3共享

C. 该进程中T1的栈指针是不能被T2和T3共享的

D. 该进程中某线程的栈指针是可以被T1,T2和T3共享的

正确答案: C. 该进程中T1的栈指针是不能被T2和T3共享的

解析: 考察线程的共享与私有资源。线程共享进程的代码段、公有数据、打开的文件描述符等资源,但拥有自己独立的线程ID、寄存器组、栈指针和错误返回码等。因此,每个线程的栈是私有的,其栈指针不能被其他线程共享。

2020年-第3题

题目: 以下关于操作系统微内核架构特征的说法中,不正确的是()。

备选答案:

A. 微内核的系统结构清晰,利于协作开发

B. 微内核代码量少,系统具有良好的可移植性

C. 微内核有良好的伸缩性,扩展性

D. 微内核功能代码可以互相调用,性能很高

正确答案: D. 微内核功能代码可以互相调用,性能很高

解析: 对比微内核与宏内核。微内核将操作系统核心功能最小化,其他服务运行在用户态,通过消息传递进行通信。这种方式带来了模块化好、安全性高、可移植性强等优点(A、B、C正确)。但由于需要频繁地在用户态和内核态之间切换及进行进程间通信(IPC),其性能通常低于将大量功能集成在内核的宏内核架构。因此"性能很高"的说法不正确。

2023年-第2题

题目: 并发性是指若干事件在()发生。

备选答案:

A. 不同时间间隔内

B. 不同时刻

C. 同一时间间隔内

D. 同一时刻

正确答案: C. 同一时间间隔内

解析: 并发与并行的核心概念辨析。"并发"强调在同一个时间间隔内,多个事件都已开始处理,但在微观上可能是交替执行的(单核CPU);"并行"强调在同一个时刻,多个事件同时执行(多核CPU)。这是理解多任务、多线程编程的基础。

相关推荐
Tansmjs2 小时前
实时数据可视化库
开发语言·c++·算法
WBluuue2 小时前
Codeforces 1075 Div2(ABC1C2D1D2)
c++·算法
犀思云2 小时前
如何借助总部融合业务专线服务提升企业运作效率?
网络·智能仓储·fusionwan·专线·naas
emma羊羊2 小时前
【AI技术安全】
网络·人工智能·安全
2401_838472512 小时前
C++模拟器开发实践
开发语言·c++·算法
凌寒112 小时前
minio预签名访问地址经过Nginx代理后返回403问题
服务器·网络·nginx
s1hiyu3 小时前
实时控制系统验证
开发语言·c++·算法
祁鱼鱼鱼鱼鱼3 小时前
DNS 笔记记录
运维·服务器·网络
daad7773 小时前
V4L2_mipi-csi
算法