操作系统期末大题预测合集:8章核心考点,逐个击破

期末考试临近,操作系统这门课最大的拉分点就是大题。选择题大家都能蒙对几个,但大题一道不会就是零分。这篇文章,我根据高校期末考试命题规律408历年真题考察频率,把操作系统8个核心章节的必考大题类型全部整理出来,每类都给出了典型例题 + 详细解答 + 解题模板

不管你是突击复习还是系统冲刺,这篇都是你的大题"押题库"。

本文目录

  1. 操作系统引论 — 系统调用分析题

  2. 进程的描述与控制 — PV操作(必考中的必考)

  3. 处理机调度与死锁 — 调度算法 + 银行家算法

  4. 存储器管理 — 地址变换 + 内存分配

  5. 虚拟存储器 — 页面置换算法

  6. 输入输出系统 — 缓冲计算 + I/O软件

  7. 文件管理 — 索引分配 + 文件计算

  8. 磁盘存储器的管理 — 磁盘调度算法


考频速查表

先放一张总表,让你一眼看清哪些章节必考、哪些偶尔考:

章节

大题类型

高校期末考频

408考频

重要程度

引论

系统调用分析

偶尔

偶尔

了解

进程描述与控制

PV操作

必考

必考

核心

处理机调度

调度算法计算

必考

必考

核心

死锁

银行家算法

必考

高频

核心

存储器管理

地址变换/内存分配

必考

高频

核心

虚拟存储器

页面置换算法

必考

必考

核心

输入输出

缓冲/I/O计算

中频

中频

掌握

文件管理

索引/目录计算

高频

高频

掌握

磁盘管理

磁盘调度算法

高频

高频

掌握


一、操作系统引论:系统调用分析题

考频:高校偶尔考,408偶尔出选择题/简答题,大题较少

预测题型:用户态与内核态、系统调用过程分析

【例题】 请分析以下程序的执行过程,指出哪些操作会触发系统调用,并说明每次系统调用属于哪一类(进程控制/文件管理/设备管理/信息维护)。

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
    int fd = open("/tmp/data.txt", O_RDWR);   // ①
    char buf[100];
    read(fd, buf, 100);                        // ②
    printf("Hello World\n");                   // ③
    fork();                                    // ④
    wait(NULL);                                // ⑤
    close(fd);                                 // ⑥
    return 0;
}

【解答】

序号

操作

系统调用

类别

open()

文件管理

read()

文件管理

printf()

是(底层调用write()

设备管理

fork()

进程控制

wait()

进程控制

close()

文件管理

解题要点:

  • 用户程序不能直接操作硬件,必须通过系统调用陷入内核态

  • printf() 虽然是C库函数,但底层最终调用了 write() 系统调用

  • 系统调用会导致用户态→内核态的切换,这是常考的"陷阱点"


二、进程的描述与控制:PV操作(必考中的必考)

考频:高校必考,408每年必考,是操作系统大题的"压轴常客"

预测题型1:生产者-消费者问题(经典PV操作)

【例题】 有一个缓冲区B,容量为N。有k个生产者进程和m个消费者进程共享B。生产者每次放入一个产品,消费者每次取出一个产品。用PV操作实现同步与互斥。

【解答】

semaphore mutex = 1;    // 互斥信号量:访问缓冲区
semaphore empty = N;    // 同步信号量:空闲缓冲区数量
semaphore full = 0;     // 同步信号量:已放产品的缓冲区数量

// 生产者进程
Producer() {
    while(true) {
        生产一个产品;
        P(empty);        // ① 先申请空位(同步)
        P(mutex);        // ② 再申请互斥访问缓冲区
        将产品放入B;
        V(mutex);        // ③ 释放互斥
        V(full);         // ④ 通知消费者有新产品(同步)
    }
}

// 消费者进程
Consumer() {
    while(true) {
        P(full);         // ① 先等待产品(同步)
        P(mutex);        // ② 再申请互斥访问缓冲区
        从B取出产品;
        V(mutex);        // ③ 释放互斥
        V(empty);        // ④ 通知生产者有空位(同步)
        消费产品;
    }
}

解题模板(PV操作万能套路):

  1. 找互斥:哪些资源是互斥访问的?设 mutex=1

  2. 找同步:谁先谁后有先后依赖?设同步信号量

  3. P的顺序:先P同步,再P互斥("先同步后互斥",写反了会死锁!)

  4. V的顺序:先V互斥,再V同步

预测题型2:读者-写者问题

【例题】 多个读者进程和多个写者进程共享一个文件。要求:允许多个读者同时读;只允许一个写者写;写者写时不允许任何读者读。用PV操作实现。

【解答】

semaphore rw_mutex = 1;    // 互斥:读者和写者之间
semaphore r_mutex = 1;     // 互斥:修改readcount
int readcount = 0;         // 当前读者数量

// 读者进程
Reader() {
    while(true) {
        P(r_mutex);
        readcount++;
        if(readcount == 1)  // 第一个读者,锁住写者
            P(rw_mutex);
        V(r_mutex);

        读文件;

        P(r_mutex);
        readcount--;
        if(readcount == 0)  // 最后一个读者,解锁写者
            V(rw_mutex);
        V(r_mutex);
    }
}

// 写者进程
Writer() {
    while(true) {
        P(rw_mutex);
        写文件;
        V(rw_mutex);
    }
}

预测题型3:哲学家进餐问题

【例题】 5个哲学家围坐圆桌,每人左右各一根筷子(共5根)。每人交替思考和进餐,进餐需同时拿到左右两根筷子。用PV操作避免死锁。

【解答】(采用"至多4人同时拿筷子"方案)

semaphore chopstick[5] = {1, 1, 1, 1, 1};
semaphore room = 4;    // 最多允许4人同时进入餐厅

Philosopher(i) {
    while(true) {
        思考;
        P(room);                    // 进入餐厅
        P(chopstick[i]);            // 拿左筷子
        P(chopstick[(i+1) % 5]);    // 拿右筷子
        进餐;
        V(chopstick[i]);            // 放左筷子
        V(chopstick[(i+1) % 5]);    // 放右筷子
        V(room);                    // 离开餐厅
    }
}

常考的PV操作变形题:

  • 吸烟者问题(3人共享3种材料)

  • 独木桥问题(单向/双向过桥)

  • 理发师问题

  • 司机-售票员问题


三、处理机调度与死锁

预测题型1:处理机调度算法(必考)

考频:高校必考,408高频

【例题】 设有4个进程到达时间和运行时间如下表:

进程

到达时间

运行时间

优先级(数字小优先)

P1

0

7

2

P2

2

4

1

P3

4

1

3

P4

5

4

4

分别用以下算法调度,计算各进程的周转时间平均周转时间:(1) FCFS (2) SJF(非抢占) (3) SRTF(抢占式SJF) (4) 优先级调度(非抢占) (5) RR(时间片=2)

【解答】

(1) FCFS(先来先服务)

执行顺序:P1(0-7) → P2(7-11) → P3(11-12) → P4(12-16)

进程

完成时间

周转时间

带权周转时间

P1

7

7

1.00

P2

11

9

2.25

P3

12

8

8.00

P4

16

11

2.75

平均周转时间 = (7+9+8+11)/4 = 8.75

(2) SJF(非抢占最短作业优先)

0时刻只有P1到达,P1执行到7。7时刻P2/P3/P4都已到达,按运行时间选P3(1)→P2(4)→P4(4)。

执行顺序:P1(0-7) → P3(7-8) → P2(8-12) → P4(12-16)

进程

完成时间

周转时间

P1

7

7

P2

12

10

P3

8

4

P4

16

11

平均周转时间 = (7+10+4+11)/4 = 8.0

(3) SRTF(抢占式SJF,最短剩余时间优先)

时间段

执行进程

说明

0-2

P1

P1剩余5

2-4

P2

P2到达,剩余4<P1的5,抢占

4-5

P3

P3到达,剩余1<P2的2,抢占

5-6

P2

P3完成,P2剩余2,P4剩余4,选P2

6-8

P2

P2完成

8-12

P4

P4执行4个单位完成

12-17

P1

P1剩余5个单位完成

平均周转时间 = (17+6+1+7)/4 = 7.75

(5) RR(时间片轮转,q=2)

就绪队列变化:

时间

事件

就绪队列

0

P1执行

[]

2

P1用完时间片,P2到达

[P2, P1]

4

P2用完时间片,P3到达

[P1, P3, P2]

5

P3用完时间片,P4到达

[P3, P2, P4, P1]

6

P3完成(只用1)

[P2, P4, P1]

8

P2完成

[P4, P1]

10

P4用完时间片

[P1, P4]

12

P1用完时间片

[P4, P1]

14

P4完成

[P1]

17

P1完成

[]

解题要点:

  • 画甘特图(时间线)是最关键的一步

  • 注意"到达时间"——进程没到达之前不能参与调度

  • 周转时间 = 完成时间 - 到达时间

  • 带权周转时间 = 周转时间 / 运行时间

预测题型2:银行家算法(必考)

考频:高校必考,408高频

【例题】 系统有5个进程(P0~P4),3类资源(A/B/C),总量分别为10/5/7。T0时刻各进程的资源分配和需求如下:

进程

Allocation

Need

Available

A B C

A B C

A B C

P0

0 1 0

7 4 3

3 3 2

P1

2 0 0

1 2 2

P2

3 0 2

6 0 0

P3

2 1 1

0 1 1

P4

0 0 2

4 3 1

(1) 判断T0时刻系统是否安全?给出安全序列。

(2) 若P1请求资源Request(1,0,2),能否分配?

【解答】

(1) 安全性检查

Available = (3, 3, 2)

步骤

Work

找Need≤Work

分配后Work

Finish

1

(3,3,2)

P1: Need(1,2,2)≤(3,3,2) ✓

(3,3,2)+(2,0,0)=(5,3,2)

true

2

(5,3,2)

P3: Need(0,1,1)≤(5,3,2) ✓

(5,3,2)+(2,1,1)=(7,4,3)

true

3

(7,4,3)

P4: Need(4,3,1)≤(7,4,3) ✓

(7,4,3)+(0,0,2)=(7,4,5)

true

4

(7,4,5)

P0: Need(7,4,3)≤(7,4,5) ✓

(7,4,5)+(0,1,0)=(7,5,5)

true

5

(7,5,5)

P2: Need(6,0,0)≤(7,5,5) ✓

(7,5,5)+(3,0,2)=(10,5,7)

true

安全序列:P1 → P3 → P4 → P0 → P2,系统处于安全状态。

(2) P1请求Request(1,0,2)

检查:Request(1,0,2) ≤ Need_P1(1,2,2) ✓,Request(1,0,2) ≤ Available(3,3,2) ✓

试探分配后:

  • Available = (3,3,2) - (1,0,2) = (2,3,0)

  • Allocation_P1 = (2,0,0) + (1,0,2) = (3,0,2)

  • Need_P1 = (1,2,2) - (1,0,2) = (0,2,0)

安全性检查:Work=(2,3,0),找Need≤Work → P1(0,2,0)≤(2,3,0) ✓ → P3 → P4 → P0 → P2 ✓

存在安全序列,可以分配

银行家算法解题模板:

  1. 检查 Request ≤ Need(不能超过最大需求)

  2. 检查 Request ≤ Available(系统有足够资源)

  3. 试探分配:修改 Available、Allocation、Need

  4. 执行安全性检查(找安全序列)

  5. 安全则真正分配,不安全则回滚


四、存储器管理:地址变换 + 内存分配

预测题型1:基本分页地址变换(必考)

考频:高校必考,408必考

【例题】 某系统采用分页存储管理,页面大小为4KB。某进程的页表如下:

页号

物理块号

0

2

1

7

2

4

3

5

4

9

(1) 将逻辑地址 8244 转换为物理地址。

(2) 将逻辑地址 15000 转换为物理地址。

(3) 若进程大小为20KB,计算该进程占用的物理块数及内部碎片大小。

【解答】

页面大小 = 4KB = 4096B

(1) 逻辑地址 8244

  • 页号 = 8244 / 4096 = 2(取整)

  • 页内偏移 = 8244 % 4096 = 52

  • 查页表:页号2 → 物理块号4

  • 物理地址 = 4 × 4096 + 52 = 16436

(2) 逻辑地址 15000

  • 页号 = 15000 / 4096 = 3(取整)

  • 页内偏移 = 15000 % 4096 = 2712

  • 查页表:页号3 → 物理块号5

  • 物理地址 = 5 × 4096 + 2712 = 23192

(3) 进程大小20KB

  • 20KB / 4KB = 5页,需要 5个物理块

  • 刚好整除,内部碎片 = 0

  • 若进程大小为18KB:18KB / 4KB = 4余2KB → 需要5个物理块,最后一页只用2KB,内部碎片 = 2KB

地址变换公式:

  • 页号 = ⌊逻辑地址 / 页面大小⌋

  • 页内偏移 = 逻辑地址 % 页面大小

  • 物理地址 = 物理块号 × 页面大小 + 页内偏移

预测题型2:多级页表地址变换

【例题】 某系统采用二级页表,页面大小4KB,每个页表项4字节。逻辑地址32位,其中:高10位为一级页表索引,中间10位为二级页表索引,低12位为页内偏移。逻辑地址为 0x00401028,求物理地址(假设查表得到一级页表项指向物理块5,二级页表项指向物理块8)。

【解答】

  • 逻辑地址 0x00401028 = 0000 0000 01 | 00 0000 0001 | 0000 0010 1000

  • 一级页表索引 = 0000 0000 01 = 1

  • 二级页表索引 = 0000 0000 01 = 1

  • 页内偏移 = 0000 0010 1000 = 40

查表过程:

  1. 一级页表第1项 → 物理块5(存放二级页表的起始地址 = 5×4096 = 20480)

  2. 二级页表(从20480开始)第16项 → 物理块8

  3. 物理地址 = 8 × 4096 + 40 = 32808

预测题型3:动态分区分配算法

【例题】 内存空闲分区如下(按地址递增排列):

分区号

起始地址

大小

1

100K

30K

2

200K

60K

3

350K

40K

4

500K

80K

依次有进程请求:20K、50K、10K。分别用首次适应(FF)最佳适应(BF)最坏适应(WF)分配,给出分配结果。

【解答】

(1) 首次适应(FF)——从低地址开始找第一个够大的

请求

分配位置

剩余

20K

分区1(100K)的前20K

分区1剩10K

50K

分区2(200K)的前50K

分区2剩10K

10K

分区1剩余的10K

分区1剩0K

(2) 最佳适应(BF)——找最小且够大的

请求

分配位置

剩余

20K

分区1(30K),最小够大

分区1剩10K

50K

分区2(60K)

分区2剩10K

10K

分区1剩余的10K(或分区2剩余的10K)

无剩余

(3) 最坏适应(WF)——找最大的

请求

分配位置

剩余

20K

分区4(80K),最大

分区4剩60K

50K

分区4剩余的60K

分区4剩10K

10K

分区1(30K)/分区2(60K)/分区4(10K)中选最大:分区2(60K)

分区2剩50K


五、虚拟存储器:页面置换算法(必考)

考频:高校必考,408必考,每年都有计算题

【例题】 某进程访问如下页面序列:7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1。系统分配给该进程3个物理块(初始为空)。分别计算以下算法的缺页次数和缺页率:

(1) OPT(最佳置换) (2) FIFO(先进先出) (3) LRU(最近最少使用)

【解答】

(1) OPT(最佳置换)——淘汰将来最久不用的页面

时刻

访问页

块状态

淘汰

缺页

1

7

[7,,]

-

2

0

[7,0,_]

-

3

1

[7,0,1]

-

4

2

[2,0,1]

7

5

0

[2,0,1]

-

6

3

[2,0,3]

1

7

0

[2,0,3]

-

8

4

[2,4,3]

0

9

2

[2,4,3]

-

10

3

[2,4,3]

-

11

0

[2,0,3]

4

12

3

[2,0,3]

-

13

2

[2,0,3]

-

×

14

1

[2,0,1]

3

15

2

[2,0,1]

-

x

16

0

[2,0,1]

-

x

17

1

[2,0,1]

-

x

18

7

[7,0,1]

2

19

0

[7,0,1]

-

×

20

1

[7,0,1]

-

×

    OPT缺页次数 = 9次,缺页率 = 9/20 = 45%

    (2) FIFO(先进先出)

    时刻

    访问页

    块状态

    淘汰

    缺页

    1

    7

    [7,,]

    -

    2

    0

    [7,0,_]

    -

    3

    1

    [7,0,1]

    -

    4

    2

    [2,0,1]

    7(最早进入)

    5

    0

    [2,0,1]

    -

    6

    3

    [2,3,1]

    0

    7

    0

    [2,3,0]

    1

    8

    4

    [4,3,0]

    2

    9

    2

    [4,2,0]

    3

    10

    3

    [4,2,3]

    0

    11

    0

    [0,2,3]

    4

    12

    3

    [0,2,3]

    -

    13

    2

    [0,2,3]

    -

    14

    1

    [1,2,3]

    0

    15

    2

    [1,2,3]

    -

    16

    0

    [1,0,3]

    2

    17

    1

    [1,0,3]

    -

    18

    7

    [1,0,7]

    3

    19

    0

    [1,0,7]

    -

    20

    1

    [1,0,7]

    -

    FIFO缺页次数 = 15次,缺页率 = 15/20 = 75%

    (3) LRU(最近最少使用)

    时刻

    访问页

    块状态(最近→最久)

    淘汰

    缺页

    1

    7

    [7,,]

    -

    2

    0

    [0,7,_]

    -

    3

    1

    [1,0,7]

    -

    4

    2

    [2,1,0]

    7(最久未用)

    5

    0

    [0,2,1]

    -

    6

    3

    [3,0,2]

    1

    7

    0

    [0,3,2]

    -

    8

    4

    [4,0,3]

    2

    9

    2

    [2,4,0]

    3

    10

    3

    [3,2,4]

    0

    11

    0

    [0,3,2]

    4

    12

    3

    [3,0,2]

    -

    13

    2

    [2,3,0]

    -

    14

    1

    [1,2,3]

    0

    15

    2

    [2,1,3]

    -

    16

    0

    [0,2,1]

    3

    17

    1

    [1,0,2]

    -

    18

    7

    [7,1,0]

    2

    19

    0

    [0,7,1]

    -

    20

    1

    [1,0,7]

    -

    LRU缺页次数 = 12次,缺页率 = 12/20 = 60%

    三种算法对比:

    算法

    缺页次数

    缺页率

    OPT

    9

    45%

    LRU

    12

    60%

    FIFO

    15

    75%

    解题技巧:

    • OPT:往后看,找"最久不再被访问"的页淘汰

    • FIFO:维护一个"进入顺序"队列,淘汰队头

    • LRU:往前看,找"最久没被访问"的页淘汰

    • 注意:FIFO可能出现Belady异常(增加物理块反而缺页率升高)


    六、输入输出系统:缓冲计算 + I/O软件

    考频:高校中频,408中频

    预测题型1:缓冲时间计算

    【例题】 某系统采用单缓冲方式处理磁盘数据。磁盘一块数据读入缓冲区的时间 T = 100μs,CPU处理一块数据的时间 C = 50μs,将缓冲区数据传送到用户区的时间 M = 10μs。

    (1) 单缓冲方式下,处理一块数据的总时间是多少?

    (2) 双缓冲方式下,处理一块数据的总时间是多少?

    【解答】

    (1) 单缓冲

    处理一块数据的时间 = C+T + M = 50+100 + 10 = 160μs

    (当CPU处理缓冲区数据时,不能同时往缓冲区读新数据)

    (2) 双缓冲

    处理一块数据的时间 = max(C, T) + M= max(50, 100)+10 = 110μs

    (CPU处理一个缓冲区时,磁盘可以同时往另一个缓冲区写数据)

    预测题型2:SPOOLing系统分析

    【例题】 简述SPOOLing系统的组成和工作原理,并说明它如何将独占设备改造为共享设备。

    【解答要点】

    • 组成:输入井、输出井(磁盘上)+ 输入缓冲区、输出缓冲区(内存中)+ 输入进程、输出进程

    • 原理:利用磁盘模拟独占设备。以打印机为例:

      • 用户请求打印 → 数据写入磁盘输出井 → 用户进程结束

      • 输出进程从输出井取数据 → 发送到实际打印机

      • 对每个用户来说像独享一台打印机,实际共享一台

    • 本质:通过缓冲 + 后台进程实现虚拟设备


    七、文件管理:索引分配 + 文件计算

    考频:高校高频,408高频

    预测题型1:混合索引(inode)计算

    【例题】 某文件系统采用Unix inode方式管理文件。inode中有:10个直接地址项、1个一次间接地址项、1个二次间接地址项、1个三次间接地址项。每个磁盘块大小为4KB,每个磁盘块号占4字节。

    (1) 一个一次间接地址项可寻址多大的文件?

    (2) 一个二次间接地址项可寻址多大的文件?

    (3) 该文件系统支持的最大文件有多大?

    (4) 某文件大小为100KB,需要多少个物理块?访问该文件的第100KB数据需要访问几次磁盘?

    【解答】

    每个磁盘块可存放的块号数 = 4KB / 4B = 1024个

    (1) 一次间接

    一个索引块可指向 1024 个数据块。可寻址大小 = 1024 × 4KB = 4MB

    (2) 二次间接

    一层索引有1024个项,每项指向一个一级索引块,每个一级索引块又指向1024个数据块。可寻址大小 = 1024 × 1024 × 4KB = 4GB

    (3) 最大文件

    • 直接地址:10 × 4KB = 40KB

    • 一次间接:1024 × 4KB = 4MB

    • 二次间接:1024 × 1024 × 4KB = 4GB

    • 三次间接:1024 × 1024 × 1024 × 4KB = 4TB

    最大文件 = 40KB + 4MB + 4GB + 4TB ≈ 4TB(主要由三次间接决定)

    (4) 文件100KB

    • 需要物理块数 = ⌈100KB / 4KB⌉ = 25个

    • 前10块:直接地址(0次间接)

    • 第11~25块:一次间接

    访问第100KB(即第25块,编号24,从0开始):

    • 24 ≥ 10,在直接地址范围外

    • 24 < 10 + 1024 = 1034,在一次间接范围内

    • 需要:读inode(1次) → 读一次间接索引块(1次) → 读数据块(1次) = 3次磁盘访问

    预测题型2:FAT文件系统计算

    【例题】 某磁盘采用FAT32文件系统,簇大小为4KB,磁盘总容量为8GB。

    (1) FAT表需要多少个表项?

    (2) 每个FAT表项至少需要多少位?

    (3) FAT表至少占用多少磁盘空间?

    【解答】

    (1) 磁盘总簇数 = 8GB / 4KB = 8 × 1024 × 1024 × 1024 / (4 × 1024) = 2,097,152 个簇

    FAT表项数 = 2,097,152(每簇一个表项,加少量保留项)≈ 2M个表项

    (2) 需要表示 2,097,152 个不同值,至少需要 21位(2²¹ = 2,097,152)。FAT32实际用32位。

    (3) FAT表大小 = 2,097,152 × 4字节 = 8,388,608 字节 = 8MB


    八、磁盘存储器的管理:磁盘调度算法

    考频:高校高频,408高频

    预测题型:磁盘调度算法计算

    【例题】 假设磁头当前位于第100号磁道,正在向磁道号增大的方向移动。磁盘请求队列(按到达顺序)为:55, 58, 39, 18, 90, 160, 150, 38, 184。磁道号范围为0~199。

    分别计算以下算法的磁头移动总磁道数平均寻道长度

    (1) FCFS (2) SSTF (3) SCAN (4) C-SCAN (5) LOOK (6) C-LOOK

    【解答】

    (1) FCFS

    移动顺序:100 → 55 → 58 → 39 → 18 → 90 → 160 → 150 → 38 → 184

    移动

    磁道差

    100→55

    45

    55→58

    3

    58→39

    19

    39→18

    21

    18→90

    72

    90→160

    70

    160→150

    10

    150→38

    112

    38→184

    146

    总磁道数 = 45+3+19+21+72+70+10+112+146 = 498

    平均寻道 = 498/9 = 55.3

    (2) SSTF

    每次选最近的:100 → 90 → 58 → 55 → 39 → 38 → 18 → 150 → 160 → 184

    移动

    磁道差

    100→90

    10

    90→58

    32

    58→55

    3

    55→39

    16

    39→38

    1

    38→18

    20

    18→150

    132

    150→160

    10

    160→184

    24

    总磁道数 = 10+32+3+16+1+20+132+10+24 = 248

    (3) SCAN(电梯算法,向增大方向)

    100 → 150 → 160 → 184 → 199(端点) → 90 → 58 → 55 → 39 → 38 → 18

    移动

    磁道差

    100→150

    50

    150→160

    10

    160→184

    24

    184→199

    15

    199→90

    109

    90→58

    32

    58→55

    3

    55→39

    16

    39→38

    1

    38→18

    20

    总磁道数 = 50+10+24+15+109+32+3+16+1+20 = 280

    注意:SCAN必须扫到端点(199),即使199没有请求。

    (4) C-SCAN(循环扫描)

    100 → 150 → 160 → 184 → 199(端点) → 0(跳回) → 18 → 38 → 39 → 55 → 58 → 90

    总磁道数 = (199-100) + (199-0) + (90-0) = 99 + 199 + 90 = 388

    (也有算法不算回跳的距离,只看服务请求的移动:50+10+24+15+199+18+20+1+16+3+32 = 388)

    (5) LOOK

    100 → 150 → 160 → 184(最远请求,不到199) → 90 → 58 → 55 → 39 → 38 → 18

    总磁道数 = (184-100) + (184-18) = 84 + 166 = 250

    (6) C-LOOK

    100 → 150 → 160 → 184 → 18(最远端请求) → 38 → 39 → 55 → 58 → 90

    总磁道数 = (184-100) + (184-18) + (90-18) = 84 + 166 + 72 = 322

    汇总对比:

    算法

    总磁道数

    平均寻道

    FCFS

    498

    55.3

    SSTF

    248

    27.6

    SCAN

    280

    31.1

    C-SCAN

    388

    43.1

    LOOK

    250

    27.8

    C-LOOK

    322

    35.8

    易错点提醒:

    • SCAN必须扫到物理端点(0或199),LOOK不需要

    • C-SCAN/C-LOOK的回跳距离是否计入总磁道数,要看题目要求(通常计入)

    • SSTF注意"当前最近"是动态变化的


    终极复习清单

    考前最后看一遍这个清单,确认每种题型你都能独立做出来

    • PV操作:能写生产者-消费者、读者-写者、哲学家进餐

    •  调度算法:FCFS/SJF/SRTF/RR/优先级,会画甘特图算周转时间

    • 银行家算法:安全性检查 + 资源请求判断

    • 地址变换:基本分页(一级/多级)地址计算

    • 内存分配:FF/BF/WF动态分区分配

    • 页面置换:OPT/FIFO/LRU,会算缺页率

    • 缓冲计算:单缓冲/双缓冲时间公式

    • inode计算:直接/间接寻址的文件大小

    • FAT计算:表项数、表大小

    • 磁盘调度:FCFS/SSTF/SCAN/C-SCAN/LOOK/C-LOOK的磁道数计算

    全都会了?那期末稳了。祝考试顺利!


    Logo

    openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

    更多推荐