Skip to content

《操作系统》第一学期期末试卷A (精选01)

一、选择题(每题1分,共25分)

  1. 在层次结构的操作系统中,内核由若干层次的模块构成,( )。

A. 下层模块可以调用上层模块

B. 上层模块可以调用下层模块

C. 各层模块之间不能相互调用

D. 各层模块之间可以相互调用

查看答案与解析

答案:B

解析:
在层次化结构中,操作系统将内核划分为多个层次(如 $L_0, L_1, \dots, L_n$)。每一层都建立在下层的基础上,并且仅能调用其直接下层的功能和服务。因此,上层模块可以调用下层模块,但下层模块不能调用上层模块(单向依赖)。


难度: ⭐
考点: #操作系统结构 #分层结构

💡 学习锦囊

📖 相关公式与知识点:

  • 分层结构(Layered Approach):将操作系统划分为若干个层次,最底层($L_0$)为硬件,最高层($L_n$)为用户接口。
  • 优点:易于调试和验证,各层之间接口清晰。
  • 缺点:效率较低,因为每一层都需要进行函数调用和参数传递。

思路分析

理解分层结构的核心是“单向调用”。就像盖楼一样,上面的楼层依赖下面的地基,所以上层可以访问下层,反之则不行。

🔄 举一反三
  1. 在分层结构的操作系统中,最底层($L_0$)通常是( )。
    • A. 用户接口
    • B. 硬件
    • C. 进程管理
    • D. 文件系统
    查看练习答案与解析

    答案:B
    解析:根据分层结构的定义,最底层($L_0$)是底层硬件,最高层($L_n$)是用户接口。

  1. 关于各种类型的操作系统,下列说法中错误的是()。

A.相比较而言,分时系统比实时信息处理系统具有更好的交互性
B.作业控制语言是批处理系统为用户提供的命令接口
C. 网络操作系统能够将多个任务分配到网络系统中的多个处理单元上,让这些任务共享系统中的资源,并行执行
D. 实时操作系统有时候为了保证其实时任务的截止时间, 可能会以牺牲系统资源利用率为代价

查看答案与解析

答案:C

解析:

  • A 选项:分时系统侧重于人机交互,允许多个用户通过终端同时使用计算机;而实时系统侧重于对外部事件的及时响应,交互性相对较弱。说法正确。
  • B 选项:批处理系统中,用户无法直接干预作业运行,必须使用作业控制语言(JCL)编写作业说明书提交给系统。说法正确。
  • C 选项:能够将多个任务分配到网络系统中的多个处理单元上并实现“并行执行”的是分布式操作系统。网络操作系统虽然实现了资源共享,但各计算机上的任务仍然由本地操作系统独立管理,缺乏全局的分布式并行处理能力。说法错误。
  • D 选项:实时系统最重要的指标是“截止时间(Deadline)”,为了按时完成任务,系统可能会预留资源,导致资源利用率不高。说法正确。

难度: ⭐⭐
考点: #操作系统类型 #网络操作系统 #分布式操作系统

💡 学习锦囊

📖 相关公式与知识点:

  • 分时系统:多路性、独立性、及时性、交互性。
  • 实时系统:高可靠性、及时性。
  • 网络操作系统:基于计算机网络,实现资源共享,但各节点独立。
  • 分布式操作系统:多台计算机协同工作,对外表现为一个统一的系统(单系统映像)。

易错点

容易混淆“网络操作系统”与“分布式操作系统”。关键区别在于是否有统一的全局管理和任务的透明并行执行。

🔄 举一反三
  1. 分布式操作系统与网络操作系统相比,最本质的区别在于( )。
    • A. 实现了资源共享
    • B. 具有网络通信功能
    • C. 具有全局的系统映像和透明性
    • D. 能够连接不同构架的计算机
    查看练习答案与解析

    答案:C
    解析:分布式操作系统具有“全局性”和“透明性”,用户感觉不到网络的存在,仿佛在使用一台计算机;而网络操作系统用户必须知道网络资源的位置。

3.OS通常会为用户提供多种使用接口,如终端命令、图标菜单、系统调用和()。

A. 计算机高级指令

B. 宏命令

C. 类似 DOS 的批命令或 UNIX 的 shell 文件

D. 汇编语言

查看答案与解析

答案:C

解析:
操作系统为用户提供的接口主要分为两大类:

  1. 命令接口:供用户直接使用。包括联机命令接口(如终端命令、图标菜单)和脱机命令接口(如批命令、Shell 文件)。
  2. 程序接口:由一组系统调用组成,供程序员在编写程序时使用。 C 选项中的批命令和 Shell 文件属于脱机命令接口。

难度: ⭐
考点: #操作系统接口 #命令接口

💡 学习锦囊

📖 相关公式与知识点:

  • 联机命令接口:交互式,用户输入一条,系统执行一条。
  • 脱机命令接口:批处理,用户将一组命令写在脚本中,系统一次性执行。
  • 程序接口:通过系统调用(System Call)实现。

思路分析

理清接口的分类:面向普通用户的(命令接口)和面向程序员的(程序接口)。

🔄 举一反三
  1. 程序员在程序中请求操作系统服务时,应该使用( )。
    • A. 键盘命令
    • B. 系统调用
    • C. 汇编语言
    • D. 高级指令
    查看练习答案与解析

    答案:B
    解析:程序接口是由系统调用组成的,程序员通过系统调用向操作系统请求服务。

  1. 操作系统最主要的设计目标是()。

A. 方便性和有效性

B. 方便性和可扩展性

C. 有效性和可扩展性

D. 有效性和可移植性

查看答案与解析

答案:A

解析:
操作系统的基本目标主要包括:

  1. 方便性:使用户能更方便地使用计算机。
  2. 有效性:提高系统资源的利用率和吞吐量。 这是操作系统最核心的两个设计目标。早期的操作系统更注重有效性,随着技术发展,方便性也变得同等重要。

难度: ⭐
考点: #操作系统目标

💡 学习锦囊

📖 相关公式与知识点:

  • 操作系统的定义:管理系统资源、控制程序执行、改善人机界面、提供各种服务的系统软件。
  • 四大基本特征:并发、共享、虚拟、异步。

易错点

不要将“可扩展性”或“可移植性”误认为是“最主要”的目标,它们属于发展动力或设计原则。

🔄 举一反三
  1. 操作系统引入“有效性”目标的主要目的是为了提高( )。
    • A. 软件的易用性
    • B. 系统的兼容性
    • C. 资源利用率和系统吞吐量
    • D. 硬件的可靠性
    查看练习答案与解析

    答案:C
    解析:有效性是指通过管理,使得 CPU、内存等资源得到充分利用,从而提高吞吐量。

  1. 某系统有 3 个并发程序,都需要同类资源 4 个,试问该系统不会发生死锁的最少资源数是()。

A. 4

B. 8

C. 10

D. 12

查看答案与解析

答案:C

解析:
本题考查死锁的预防与资源分配策略。 设系统中有 $N$ 个进程,每个进程最多需要 $R$ 个同类资源。 发生死锁的最极端情况是:所有进程都获得了 $(R-1)$ 个资源,并且都在等待最后 1 个资源。此时系统中的资源总数为:

$$Total_{deadlock} = N \times (R - 1)$$

只要在这个基础上再增加 1 个资源,就必然会有 1 个进程能够满足所有需求并顺利执行完毕,释放其占有的资源,从而打破死锁循环。 因此,不发生死锁的最少资源数为:

$$Total_{min} = N \times (R - 1) + 1$$

代入本题数据:$N = 3, R = 4$

$$Total_{min} = 3 \times (4 - 1) + 1 = 3 \times 3 + 1 = 10$$

故选 C


难度: ⭐⭐
考点: #死锁预防 #资源分配 #鸽巢原理

💡 学习锦囊

📖 相关公式与知识点:

  • 死锁定义:多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。
  • 不发生死锁的条件公式$M \geq N \times (R - 1) + 1$$M$ 为资源总数)。

思路分析

利用“最坏情况分析法”:先让每个进程都处于“只差一个就能运行”的饥饿状态,然后再给系统加一个资源,就能打破僵局。

🔄 举一反三
  1. 某系统有 5 个并发进程,每个进程都需要 3 台打印机,为保证系统绝不发生死锁,系统至少应配置( )台打印机。
    • A. 10
    • B. 11
    • C. 15
    • D. 16
    查看练习答案与解析

    答案:B
    解析:代入公式 $5 \times (3 - 1) + 1 = 5 \times 2 + 1 = 11$

  1. Linux 中能支持两台计算机之间通信的通信机制是( )。

A. signal

B. pipe

C. IPC

D. Socket

查看答案与解析

答案:D

解析:

  • A 选项:信号(Signal)主要用于同一台计算机上的进程间通信,发送异步通知。
  • B 选项:管道(Pipe)用于具有亲缘关系(或命名管道用于无亲缘关系)的本地进程间通信。
  • C 选项:IPC(Inter-Process Communication)是进程间通信的总称,通常指本地的信号量、共享内存和消息队列。
  • D 选项:套接字(Socket)不仅支持本地进程间通信,更重要的是支持通过网络在不同计算机之间的进程进行通信。 故选 D

难度: ⭐
考点: #进程通信 #Socket

💡 学习锦囊

📖 相关公式与知识点:

  • Linux 进程通信方式:管道(有名/无名)、信号、消息队列、共享内存、信号量、套接字。
  • 网络通信核心:Socket 接口。

思路分析

抓住题干中的核心词“两台计算机之间”。本地通信机制(如 Pipe)无法跨机器,必须借助网络协议栈(Socket)。

🔄 举一反三
  1. 下列进程通信方式中,传输速度最快的是( )。
    • A. 管道
    • B. 消息队列
    • C. 共享内存
    • D. 套接字
    查看练习答案与解析

    答案:C
    解析:共享内存允许多个进程直接读写同一块物理内存,无需在内核和用户空间之间复制数据,是速度最快的 IPC 方式。

  1. 假设下述 4 个进程同时到达系统,当使用最高优先数优先调度算法时,计算进程的平均周转时间为()。
进程运行时间优先数
P12.04
P25.09
P38.01
P43.08

A. 4.5

B. 10.5

C. 4.75

D. 10.25

查看答案与解析

答案:D

解析:
本题考查进程调度算法与周转时间的计算。 默认优先数越大,优先级越高(杭电及考研常见约定)。

  1. 确定执行顺序
    • 4 个进程同时到达(到达时间均为 0)。
    • 优先级从高到低依次为:P2 (9) > P4 (8) > P1 (4) > P3 (1)。
    • 执行顺序为:$P_2 \to P_4 \to P_1 \to P_3$
  2. 计算各进程的完成时间
    • $P_2$ 运行 5.0,完成时间 $= 5.0$
    • $P_4$ 运行 3.0,完成时间 $= 5.0 + 3.0 = 8.0$
    • $P_1$ 运行 2.0,完成时间 $= 8.0 + 2.0 = 10.0$
    • $P_3$ 运行 8.0,完成时间 $= 10.0 + 8.0 = 18.0$
  3. 计算周转时间(周转时间 = 完成时间 - 到达时间):
    • $P_2$ 周转时间 $= 5.0 - 0 = 5.0$
    • $P_4$ 周转时间 $= 8.0 - 0 = 8.0$
    • $P_1$ 周转时间 $= 10.0 - 0 = 10.0$
    • $P_3$ 周转时间 $= 18.0 - 0 = 18.0$
  4. 计算平均周转时间
    $$\text{平均周转时间} = \frac{5.0 + 8.0 + 10.0 + 18.0}{4} = \frac{41.0}{4} = 10.25$$

故选 D


难度: ⭐⭐
考点: #进程调度 #优先级调度 #周转时间

💡 学习锦囊

📖 相关公式与知识点:

  • 周转时间$T = T_{完成} - T_{到达}$
  • 带权周转时间$W = \frac{T}{T_{运行}}$

易错点

注意审题,区分“优先数大代表优先级高”还是“优先数小代表优先级高”。若无特殊说明,一般优先数越大优先级越高。

🔄 举一反三
  1. 若上题改为“短作业优先(SJF)调度算法”,则平均周转时间为( )。
    • A. 8.75
    • B. 7.5
    • C. 8.25
    • D. 10.25
    查看练习答案与解析

    答案:A
    解析:SJF 顺序为 P1(2) -> P4(3) -> P2(5) -> P3(8)。 完成时间:P1(2), P4(5), P2(10), P3(18)。 平均周转时间 = (2+5+10+18)/4 = 35/4 = 8.75。

  1. 在消息缓冲通信方式中,系统的临界资源为( )。

A. 发送进程

B. 消息队列

c. 接收进程

D. 信箱

查看答案与解析

答案:B

解析:
在消息缓冲通信机制中,发送进程发送消息时,需要将消息挂在接收进程的消息队列上;接收进程接收消息时,需要从消息队列中取下消息。这个消息队列(或消息缓冲区)是多个进程共享的资源,为了防止数据混乱,必须互斥访问,因此它是系统的临界资源。 故选 B


难度: ⭐
考点: #进程通信 #消息缓冲机制 #临界资源

💡 学习锦囊

📖 相关公式与知识点:

  • 临界资源:一段时间内只允许一个进程访问的资源。
  • 消息缓冲机制:属于直接通信方式,利用 OS 提供的发送/接收原语。

思路分析

思考哪个数据结构会被多个并发进程同时修改。在这里是存放消息的“消息队列”。

🔄 举一反三
  1. 在信箱通信方式中,临界资源是( )。
    • A. 发送进程
    • B. 接收进程
    • C. 信箱
    • D. 消息
    查看练习答案与解析

    答案:C
    解析:信箱通信(间接通信)中,信箱是共享的数据结构,属于临界资源。

  1. 在以下说法中,并不是多线程系统的特长的是( )。

A. 利用线程并行的执行矩阵乘法运算
B. 服务器利用线程响应 HTTP 请求
C. 键盘驱动程序为每一个正在运行的应用配备一个线程, 用以响应该应用的键盘输入
D. 基于 GUI 的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作

查看答案与解析

答案:C

解析:

  • A 选项:矩阵乘法可以拆分为多个子任务,多线程在多核 CPU 上可以并行计算,提高速度。正确。
  • B 选项:Web 服务器常用“一个线程服务一个请求”的模型,并发处理大量连接。正确。
  • C 选项:键盘驱动程序通常运行在内核态,通过中断处理机制来响应按键。它不需要也不应该为每个应用程序创建一个线程来监听键盘输入,这会造成极大的资源浪费和调度开销。错误。
  • D 选项:GUI 应用需要保持界面响应,因此“计算”等耗时操作必须放在后台线程,避免阻塞主 UI 线程。正确。 故选 C

难度: ⭐⭐
考点: #多线程 #线程应用场景

💡 学习锦囊

📖 相关公式与知识点:

  • 线程:轻量级进程,是 CPU 调度的基本单位。
  • 适用场景:并发 I/O、并行计算、保持 UI 响应。

思路分析

考虑开销与合理性。I/O 驱动层级通常很低,使用中断驱动,而不是为每个应用开线程。

🔄 举一反三
  1. 下列哪种情况最不适合使用多线程?( )
    • A. 图像处理软件的滤镜效果计算
    • B. 只有单核 CPU 且属于纯计算密集型的单个任务
    • C. 数据库服务器的并发查询
    • D. 视频播放器的音视频同步
    查看练习答案与解析

    答案:B
    解析:单核 CPU 上纯计算任务开多线程不仅不能并行,还会增加线程切换的额外开销。

  1. 阅读下列程序段,请问输出的结果是( )。
c
int main(void) {
    int num = 5;
    if (!fork()) {
        ++num;
        exit(1);
    } else {
        if (!fork()) {
            ++num;
            exit(1);
        } else {
            num--;
        }
        wait(0);
        wait(0);
        printf("%d", num);
    }
}

A. 4

B. 5

C. 6

D. 7

查看答案与解析

答案:A

解析:
本题考查 fork() 系统调用的执行机制和进程的内存隔离。

  1. int num = 5; 初始化父进程的变量。
  2. 第一个 fork()
    • 子进程 1fork() 返回 0,执行 if(!fork()) 内部。++num(此时子进程 1 的 num 变为 6)。然后 exit(1) 退出。
    • 父进程fork() 返回子进程 PID(非 0),进入 else 分支。
  3. 父进程的 else 内部
    • 第二个 fork()
      • 子进程 2fork() 返回 0,执行内层 if(!fork())++num(此时子进程 2 的 num 变为 6)。然后 exit(1) 退出。
      • 父进程fork() 返回子进程 PID,进入内层 else 分支。
  4. 父进程的内层 else
    • 执行 num--;,父进程的 num 变为 $5 - 1 = 4$
  5. 父进程后续
    • 调用两次 wait(0),分别等待子进程 1 和子进程 2 结束。
    • 执行 printf("%d", num);,输出父进程的 num 值,即 4注意:由于进程间内存是相互隔离的(写时复制),子进程对 num 的修改不会影响父进程。 故选 A

难度: ⭐⭐⭐
考点: #fork系统调用 #进程创建 #写时复制

💡 学习锦囊

📖 相关公式与知识点:

  • fork():一次调用,两次返回。子进程返回 0,父进程返回子进程 PID。
  • 子进程完全复制父进程的地址空间,但此后两者独立。

易错点

容易误认为子进程修改的 num 会累加到父进程中。一定要牢记“进程间数据独立”。

🔄 举一反三
  1. 若将上题中的 exit(1) 去掉,且父进程不执行 wait,则总共会产生多少个进程(包括初始父进程)?
    • A. 3
    • B. 4
    • C. 7
    • D. 8
    查看练习答案与解析

    答案:A
    解析:去掉了 exit 后,子进程也会继续往下执行。 初始进程 P0 -> fork -> P0 和 P1。 P0 再次 fork -> P0 和 P2。 P1 执行完 ++num 后,跳出 if,不执行 else。 所以总共是 P0, P1, P2 三个进程。

  1. 若一个系统内存有 64MB,处理器是 32 位地址,则它的逻辑地址空间为()。

A. 2GB

B. 4GB

C. 100KB

D. 64MB

查看答案与解析

答案:B

解析:

  • 逻辑地址空间(虚拟地址空间)的大小完全由处理器的地址总线宽度(或寻址位数)决定。
  • 处理器是 32 位地址,说明其寻址范围是 $2^{32}$ 字节。
$$2^{32} \text{ B} = 4 \times 2^{30} \text{ B} = 4 \text{ GB}$$
  • 物理内存的大小(64MB)仅决定了物理地址空间的大小,不影响逻辑地址空间。 故选 B

难度: ⭐
考点: #逻辑地址空间 #寻址范围

💡 学习锦囊

📖 相关公式与知识点:

  • 逻辑地址空间大小 $= 2^{\text{地址位数}}$
  • 物理地址空间大小 $= 2^{\text{物理地址位数}}$(通常对应实际内存大小)。

思路分析

逻辑地址是虚的(看处理器寻址能力),物理地址是实的(看内存大小)。不要被题目中的“内存 64MB”迷惑。

易错点

容易把物理内存大小(64MB)误认为是逻辑地址空间的大小。

🔄 举一反三
  1. 某计算机的虚拟地址宽度为 48 位,则其逻辑地址空间最大为( )。
    • A. 256 TB
    • B. 64 TB
    • C. 4 GB
    • D. 16 TB
    查看练习答案与解析

    答案:A
    解析$2^{48} \text{ B} = 2^8 \times 2^{40} \text{ B} = 256 \text{ TB}$

  1. 某分页系统采用三级页表,如果没有引入快表,则 CPU 每取一个数据,实际要访问()次内存。

A. 1

B. 2

C. 3

D. 4

查看答案与解析

答案:D

解析:
在没有快表(TLB)的多级页表系统中,CPU 访问一个逻辑地址的数据,需要通过页表逐级查询物理地址:

  1. 第 1 次访问内存:访问一级页表,获取二级页表的起始地址。
  2. 第 2 次访问内存:访问二级页表,获取三级页表的起始地址。
  3. 第 3 次访问内存:访问三级页表,获取目标数据块的物理页框号,与页内偏移拼接得到物理地址。
  4. 第 4 次访问内存:根据物理地址,访问实际的目标数据。 因此,总共需要访问 4 次内存。 故选 D

难度: ⭐⭐
考点: #多级页表 #内存访问次数

💡 学习锦囊

📖 相关公式与知识点:

  • $N$ 级页表(无快表)访问一次数据所需的内存访问次数为 $N + 1$
  • 快表(TLB)的作用:缓存页表项,若命中则只需 1 次内存访问(直接取数据)。

思路分析

多级页表用“时间换空间”。每多一级页表,寻址过程就多一次内存访问。

易错点

容易忘记最后一次访问数据本身的内存访问。

🔄 举一反三
  1. 若系统采用二级页表且引入了快表,在快表命中的情况下,CPU 取一个数据需要访问几次内存?
    • A. 1
    • B. 2
    • C. 3
    • D. 0
    查看练习答案与解析

    答案:A
    解析:快表命中时,直接从 TLB 中获取物理地址,无需访问任何页表,仅需访问 1 次内存(读取数据本身)。

  1. 设有 16 页的逻辑空间,每页有 2048 字节,它们被映射到 32 块的物理存储区中,那么逻辑地址的有效位是()位

A. 10

B. 12

C. 15

D. 13

查看答案与解析

答案:C

解析:
逻辑地址由页号页内偏移量两部分组成。

  1. 计算页号的位数
    • 逻辑空间共有 16 页,表示 $0 \sim 15$ 的页号需要:
    $$16 = 2^4 \implies 4 \text{ 位}$$
  2. 计算页内偏移量的位数
    • 每页有 2048 字节(Page Size),表示页内地址需要:
    $$2048 = 2^{11} \implies 11 \text{ 位}$$
  3. 计算逻辑地址总位数
    $$\text{逻辑地址位数} = \text{页号位数} + \text{页内偏移量位数} = 4 + 11 = 15 \text{ 位}$$
  • 注意:物理存储区有 32 块(对应物理地址位数),这与逻辑地址的有效位数无关。 故选 C

难度: ⭐⭐
考点: #分页管理 #逻辑地址结构

💡 学习锦囊

📖 相关公式与知识点:

  • 逻辑地址结构:页号 | 页内偏移。
  • 物理地址结构:块号 | 页内偏移。

思路分析

分别求 out 页号占用的位数和页内偏移占用的位数,相加即为总位数。

易错点

容易把物理块数(32 块)的信息强行加进逻辑地址的计算中。

🔄 举一反三
  1. 某计算机逻辑地址空间为 64KB,页大小为 2KB,则其逻辑地址中页号占( )位。
    • A. 5
    • B. 6
    • C. 11
    • D. 16
    查看练习答案与解析

    答案:A
    解析:页数 $= 64\text{KB} / 2\text{KB} = 32$ 页。$32 = 2^5$,故页号占 5 位。

  1. 以下几种内存管理方式中,会产生外部碎片的是()。

A. 固定分区方式

B. 可变分区方式

C. 分页存储管理方式

D. 段页式存储管理方式

查看答案与解析

答案:B

解析:

  • A 选项:固定分区将内存划分为固定大小的区域,会导致分配区域内未被利用的内部碎片
  • B 选项:可变分区(动态分区)根据进程需要动态分配内存,随着进程的换入换出,会在已分配区域之间留下许多难以利用的小空白区域,即外部碎片
  • C、D 选项:分页和段页式将内存离散分配到物理块中,解决了外部碎片问题,但最后一页可能无法填满,存在极小的内部碎片。 故选 B

难度: ⭐
考点: #内存碎片 #分区管理

💡 学习锦囊

📖 相关公式与知识点:

  • 内部碎片:已分配给进程但未被使用的内存。
  • 外部碎片:太小而无法分配给任何进程的零碎空闲内存。

思路分析

区分内外:分给进程用不掉的是“内”;夹在进程中间没人能用的是“外”。

易错点

混淆内部碎片和外部碎片的定义。

🔄 举一反三
  1. 解决外部碎片问题通常采用的技术是( )。
    • A. 覆盖技术
    • B. 交换技术
    • C. 紧凑技术
    • D. 分页技术
    查看练习答案与解析

    答案:C
    解析:紧凑技术(Compaction)通过移动内存中的进程,将零散的外部碎片拼接成大的连续区域。

15.关于I/O软件,以下说法中正确的是()。

A.在 I/O 软件的层次模型中,设备驱动程序位于最底层

B. 设备独立性是指用户的应用程序独立于具体使用的物理设备

C. 设备驱动程序必须提供设备保护功能,防止无权限的用户存取设备

D.引入设备独立性后,可能会使 I/O 重定向变得困难

查看答案与解析

答案:B

解析:

  • A 选项:I/O 软件层次中,最底层是中断处理程序,其上才是设备驱动程序。错误。
  • B 选项设备独立性(设备无关性)的核心思想是应用程序使用逻辑设备名,由 OS 映射到物理设备,使程序不依赖具体硬件。正确。
  • C 选项:设备保护通常由内核中的设备独立性软件层实现,驱动程序主要负责与硬件交互。错误。
  • D 选项:设备独立性使得 I/O 重定向非常容易实现(例如将输出从屏幕重定向到文件)。错误。 故选 B

难度: ⭐⭐
考点: #IO软件层次 #设备独立性

💡 学习锦囊

📖 相关公式与知识点:

  • I/O 软件层次(从上到下):
    1. 用户层 I/O 软件(如库函数)
    2. 设备独立性软件
    3. 设备驱动程序
    4. 中断处理程序
    5. 硬件

思路分析

理解“分层”的思想,越底层的越接近硬件,越往上越抽象、越独立于硬件。

易错点

误以为设备驱动程序是最底层,忽略了中断处理程序。

🔄 举一反三
  1. 在 I/O 软件层次中,执行逻辑设备名到物理设备名转换的层次是( )。
    • A. 用户层 I/O
    • B. 设备独立性软件
    • C. 设备驱动程序
    • D. 中断处理程序
    查看练习答案与解析

    答案:B
    解析:设备独立性软件负责屏蔽硬件差异,提供统一接口,并完成逻辑设备到物理设备的映射。

  1. 完整路径法访问文件是要从()开始按目录访问某个文件。

A.当前目录

B.用户主目录

C. 根目录

D.父目录

查看答案与解析

答案:C

解析:

  • 绝对路径(完整路径):从根目录/)开始的路径。它是唯一的,不依赖于当前工作目录。
  • 相对路径:从当前工作目录开始的路径。 故选 C

难度: ⭐
考点: #文件目录 #绝对路径 #相对路径

💡 学习锦囊

📖 相关公式与知识点:

  • 绝对路径示例:/home/user/docs/file.txt
  • 相对路径示例:../docs/file.txt

思路分析

“完整”即意味着从最顶层的源头(根目录)开始,无视当前所处位置。

易错点

混淆完整路径(绝对路径)与相对路径的起点。

🔄 举一反三
  1. 若当前目录为 /home/user,要访问 /home/user/code/main.c,使用相对路径表示为( )。
    • A. /code/main.c
    • B. code/main.c
    • C. ./home/user/code/main.c
    • D. ../user/code/main.c
    查看练习答案与解析

    答案:B
    解析:从当前目录 /home/user 出发,直接进入 code 目录即可,写成 code/main.c./code/main.c

  1. 设基址寄存器的内容为 2000, 执行指令 “LOAD A, 500” 时, 操作数的地址是 ( )。

A.1500

B.2000

C.2500

D.3000

查看答案与解析

答案:C

解析:
本题考查基于基址寄存器的地址转换(动态重定位)。

  • 基址寄存器(Base Register)存放的是程序在内存中的起始物理地址
  • 指令中的地址 500逻辑地址(或相对地址)。
  • 实际访问的物理地址计算公式为:
$$\text{物理地址} = \text{基址} + \text{逻辑地址}$$
$$\text{物理地址} = 2000 + 500 = 2500$$

故选 C


难度: ⭐
考点: #地址转换 #基址寻址 #动态重定位

💡 学习锦囊

📖 相关公式与知识点:

  • 物理地址 = 逻辑地址 + 重定位寄存器值。
  • 界限寄存器:用于越界检查,确保逻辑地址 $<$ 界限值。

思路分析

牢记动态重定位的核心公式:物理地址 = 基址 + 逻辑地址。

易错点

混淆基址和逻辑地址的关系,或者误进行减法运算。

🔄 举一反三
  1. 设重定位寄存器内容为 3000,界限寄存器内容为 1000。当 CPU 访问逻辑地址 1500 时,会发生( )。
    • A. 正常访问物理地址 4500
    • B. 正常访问物理地址 3000
    • C. 产生越界中断
    • D. 产生越界异常
    查看练习答案与解析

    答案:C
    解析:逻辑地址 $1500 > \text{界限值 } 1000$,触发越界异常。

  1. 下列关于链接的描述,错误的是()

A. 硬链接就是让链接文件的 i 节点号指向被链接文件的 i 节点

B. 硬链接和符号链接都会产生一个新的 i 节点

C. 链接分为硬链接和符号链接

D. 硬链接不能链接目录文件

查看答案与解析

答案:B

解析:

  • A 选项:硬链接通过在目录项中创建一个新的文件名,并将其指向已有的 Inode 节点号实现。正确。
  • B 选项硬链接不会产生新的 i 节点,它只是增加了一个指向现有 i 节点的目录项(引用计数加 1)。而符号链接(软链接)是一个独立的文件,包含了指向目标文件的路径,因此会产生新的 i 节点。错误。
  • C 选项:Linux 文件链接主要分为硬链接和软链接(符号链接)。正确。
  • D 选项:为了防止文件系统形成环路,Linux 规定普通用户不能对目录创建硬链接。正确。 故选 B

难度: ⭐⭐
考点: #文件链接 #硬链接 #符号链接 #Inode

💡 学习锦囊

📖 相关公式与知识点:

  • 硬链接:共享 Inode,删除源文件不影响链接文件访问,不能跨文件系统。
  • 软链接:独立 Inode(存储路径),删除源文件后链接失效,可跨文件系统。

思路分析

记住硬链接的本质:“一个实体,多个名字”。所以实体(Inode)只有一个。

易错点

误认为硬链接会复制文件或产生新 Inode。

🔄 举一反三
  1. 删除一个文件的硬链接后,该文件的内容( )。
    • A. 立即被删除
    • B. 仅当文件的链接计数归零时才被真正删除
    • C. 绝对不会被删除
    • D. 变为不可读
    查看练习答案与解析

    答案:B
    解析:硬链接删除只是将 Inode 的 links 计数减 1,只有当计数归零且没有进程打开该文件时,空间才会被回收。

  1. Linux 通过 VFS 支持多种不同的文件系统。Linux 缺省的文件系统是()。

A. FAT

B. reiserFS

C. Ext 系列

D. NTFS

查看答案与解析

答案:C

解析:

  • VFS(虚拟文件系统)为各种不同的文件系统提供了一个统一的内核接口。
  • FAT 系列是 Windows 的早期文件系统;NTFS 是现代 Windows 的默认文件系统。
  • Ext 系列(如 Ext2, Ext3, Ext4)是专门为 Linux 设计并作为其默认(缺省)文件系统使用的。 故选 C

难度: ⭐
考点: #Linux文件系统 #VFS #Ext文件系统

💡 学习锦囊

📖 相关公式与知识点:

  • VFS 的四个核心对象:superblock(超级块)、inode(索引节点)、dentry(目录项)、file(文件对象)。

思路分析

常识题。Linux 的标志性文件系统就是 Extended File System (Ext)。

易错点

混淆不同操作系统的默认文件系统。

🔄 举一反三
  1. 在 Linux 中,负责屏蔽底层不同文件系统差异,向用户提供统一系统调用接口的是( )。
    • A. FAT
    • B. VFS
    • C. Ext4
    • D. FCB
    查看练习答案与解析

    答案:B
    解析:Virtual File System (VFS) 充当了抽象层。

  1. 某文件系统采用位示图法管理外存储空间,每个磁盘块 4KB,已知一块磁盘容量为 1TB,则表示该磁盘所需的位示图需要占用()的内存空间。

A.16MB

B. 32MB

C. 64MB

D. 128MB

查看答案与解析

答案:B

解析:
本题考查位示图(Bitmap)空间大小的计算。

  1. 计算磁盘块的总数
    • 磁盘容量 $= 1 \text{ TB} = 2^{40} \text{ B}$
    • 磁盘块大小 $= 4 \text{ KB} = 4 \times 2^{10} \text{ B} = 2^{12} \text{ B}$
    $$\text{物理块数} = \frac{1 \text{ TB}}{4 \text{ KB}} = \frac{2^{40}}{2^{12}} = 2^{28} \text{ 块}$$
  2. 计算位示图所需的总位数
    • 位示图用 1 位(bit)表示 1 个物理块的状态。
    $$\text{总位数} = 2^{28} \text{ bit}$$
  3. 转换为字节和 MB
    $$\text{字节数} = \frac{2^{28} \text{ bit}}{8} = \frac{2^{28}}{2^3} = 2^{25} \text{ B}$$
    $$\text{MB数} = \frac{2^{25} \text{ B}}{1 \text{ MB}} = \frac{2^{25}}{2^{20}} = 2^5 \text{ MB} = 32 \text{ MB}$$

故选 B


难度: ⭐⭐
考点: #位示图 #存储空间管理 #容量换算

💡 学习锦囊

📖 相关公式与知识点:

  • $\text{位数} = \text{磁盘总容量} / \text{物理块大小}$
  • $\text{占用空间} = \text{位数} / 8$ 字节。

思路分析

理清计算步骤:求块数 $\to$ 求位数 $\to$ 换算为字节 $\to$ 换算为 MB。

易错点

$2^{28} \text{ bit}$ 转换为字节时,容易忘记除以 8

🔄 举一反三
  1. 设某文件系统物理块大小为 1KB,位示图占用 1MB 的内存空间,则该文件系统所管理的磁盘容量为( )。
    • A. 1 GB
    • B. 8 GB
    • C. 4 GB
    • D. 2 GB
    查看练习答案与解析

    答案:B
    解析$1\text{MB} = 2^{20}\text{ 字节} = 2^{23}\text{ bit}$。管理的物理块数 $= 2^{23}$ 块。总容量 $= 2^{23} \times 1\text{KB} = 8\text{GB}$

  1. 在下面的 I/O 控制方式中,需要 CPU 干预最少的方式是()。

A. 程序 I/O 方式;

B. 中断驱动 I/O 控制方式;

C. 直接存储器访问 DMA 控制方式;

D. I/O 通道控制方式

查看答案与解析

答案:D

解析:
I/O 控制方式的演进过程(CPU 干预程度从高到低):

  1. 程序 I/O 方式:CPU 轮询,干预最多。
  2. 中断驱动方式:以字节为单位,每完成一个字节传输触发一次中断。
  3. DMA 方式:以数据块为单位,仅在块传输开始和结束时需要 CPU 干预。
  4. 通道控制方式:通道有自己的指令和“通道程序”,可以控制多台设备与内存进行成批数据交换,CPU 仅在启动和结束时发送命令,干预最少。 故选 D

难度: ⭐
考点: #IO控制方式 #通道控制

💡 学习锦囊

📖 相关公式与知识点:

  • DMA通道 的区别:DMA 只能控制一台设备的数据传输;通道可以控制一组设备,且具有更强的逻辑处理能力。

思路分析

从历史发展来看,计算机体系结构的设计目标之一就是“解放 CPU”,让 CPU 专注于计算。

易错点

混淆 DMA 和通道的作用范围。

🔄 举一反三
  1. DMA 方式中,数据传输的基本单位是( )。
    • A. 字节
    • B. 字
    • C. 数据块
    • D. 文件
    查看练习答案与解析

    答案:C
    解析:DMA 方式是在内存和外设之间直接进行“成块”的数据交换。

  1. 以下关于通道的说法错误的是( )。

A. 通道是用来控制外部设备与主存之间进行成批数据传输的部件;

B. 通道是一种特殊的处理机;

C. 通道有自己的指令集, 但指令类型单一, 主要局限于与 I/O 操作有关的指令。

D. 通道有自己的内存, 用以存放通道要执行的程序。

查看答案与解析

答案:D

解析:

  • A 选项:通道的主要功能是实现外设与内存之间的成批数据交换。正确。
  • B 选项:通道被称为“I/O 处理机”,具有处理简单指令的能力。正确。
  • C 选项:通道指令(CCW)类型单一,专门用于控制 I/O 操作。正确。
  • D 选项:通道通常没有自己独立的内存,通道要执行的通道程序是存放在**主计算机的内存(主存)**中的。错误。 故选 D

难度: ⭐⭐
考点: #通道控制 #通道程序

💡 学习锦囊

📖 相关公式与知识点:

  • 通道寻址:CPU 通过“启动 I/O”指令指定通道,通道从内存中读取通道命令字(CCW)并执行。

思路分析

容易误认为处理机就必须自带内存。很多协处理器或通道都是共享主存的。

易错点

误以为通道自带独立内存。

🔄 举一反三
  1. 通道程序是由( )编写的。
    • A. 用户程序员
    • B. 通道硬件自动生成
    • C. 操作系统
    • D. 编译程序
    查看练习答案与解析

    答案:C
    解析:操作系统内核的 I/O 管理模块根据用户的请求动态生成通道程序并放入主存。

  1. 以下关于缓冲的说法,错误的是( )。

A. 缓冲能缓和 CPU 与 I/O 设备间速度不匹配的矛盾;

B. 软件缓冲通常是在磁盘上分配一段空间来实现的;

C. 缓冲能减少 I/O 操作对 CPU 的中断频率;

D. 缓冲能协调数据处理单位和传输单位不匹配的问题。

查看答案与解析

答案:B

解析:

  • A 选项:这是引入缓冲技术的最主要目的(如 CPU 快,打印机慢)。正确。
  • B 选项:软件缓冲(如单缓冲、双缓冲、缓冲池)是在内存中开辟的缓冲区,而不是在磁盘上。在磁盘上分配空间属于虚拟存储Spooling 技术的范畴。错误。
  • C 选项:通过缓冲区成批读写,可以大幅减少中断 CPU 的次数。正确。
  • D 选项:例如网络传输以包为单位,程序处理以字节为单位,缓冲区可以起到适配作用。正确。 故选 B

难度: ⭐
考点: #缓冲技术 #内存管理

💡 学习锦囊

📖 相关公式与知识点:

  • 单缓冲时间$\max(C, T) + M$$C$: 计算, $T$: 传输, $M$: 搬运)。
  • 双缓冲时间$\max(C, T)$

思路分析

缓冲区一定是“临时存放数据”的高速介质,磁盘属于低速外设,不适合作为实时缓冲的载体。

易错点

混淆缓冲区与虚拟内存/Spooling 技术的存储介质。

🔄 举一反三
  1. 在单缓冲区中,设从磁盘读入一个缓冲区的时间 $T=100\mu s$,CPU 处理时间 $C=50\mu s$,缓冲区数据传送到用户区时间 $M=20\mu s$。则处理一个数据块的平均时间为( )。
    • A. 100
    • B. 120
    • C. 150
    • D. 170
    查看练习答案与解析

    答案:B
    解析:代入公式 $\max(C, T) + M = \max(50, 100) + 20 = 120\mu s$

  1. 对打印机进行 I/O 控制时,通常采用( )方式。

A.程序直接控制;

B.中断驱动;

C.DMA;

D. 通道

查看答案与解析

答案:B

解析:

  • 打印机属于低速的字符设备
  • 程序直接控制(轮询)会浪费大量 CPU 时间,不适用。
  • DMA 适用于高速的块设备(如磁盘),它要求数据传输是连续的,打印机不满足。
  • 通道 成本高,通常用于连接大量复杂外设的大型机系统。
  • 中断驱动方式 在打印机输出完一个字符后触发中断,请求 CPU 发送下一个字符,既不浪费 CPU 资源,又适合字符设备的特点。 故选 B

难度: ⭐
考点: #IO控制方式 #设备分类

💡 学习锦囊

📖 相关公式与知识点:

  • 块设备:以数据块为单位,如磁盘。常配合 DMA。
  • 字符设备:以字节为单位,如键盘、打印机。常配合中断。

思路分析

不要盲目选择最先进的“通道”或“DMA”,要根据设备的物理特性(速度、传输单位)进行匹配。

易错点

误选 DMA 方式,忽略了打印机是字符设备。

🔄 举一反三
  1. 磁盘设备与内存之间的数据传输,最适合采用的 I/O 控制方式是( )。
    • A. 程序直接控制
    • B. 中断驱动
    • C. DMA
    • D. 通道
    查看练习答案与解析

    答案:C
    解析:磁盘是高速块设备,最经典的匹配方式是 DMA。

  1. 为支持 CD-ROM 中视频文件的快速随机播放, 播放性能最好的文件数据块组织方式是 ( )。

A.连续结构

B.链式结构

C.单级索引结构

D.多级索引结构

查看答案与解析

答案:A

解析:

  • 连续结构(顺序分配):文件在磁盘上占用一组连续的物理块。其随机访问速度最快,只需计算偏移量即可直接定位。
  • 链式结构:必须顺着指针查找,随机访问性能极差。
  • 索引结构:需要先读取索引块,增加了寻道和读取次数。 由于 CD-ROM 是只读介质,不需要考虑文件的扩充和碎片整理问题,连续分配的缺点(外部碎片、不易扩展)在只读介质上完全不存在,因此连续结构能发挥出最佳的读取性能。 故选 A

难度: ⭐⭐
考点: #文件物理结构 #连续分配 #CD-ROM

💡 学习锦囊

📖 相关公式与知识点:

  • 连续分配:支持顺序和随机访问。
  • 显式链接(FAT):解决了文件动态增长问题。
  • 索引分配:支持大文件,利于随机访问,但索引块有额外开销。

思路分析

题目强调了两个关键点:“只读(CD-ROM)”和“快速随机播放”。连续分配在只读场景下是无可挑剔的完美选择。

易错点

误选索引结构,忽略了 CD-ROM 只读的特性。

🔄 举一反三
  1. 链式存储结构(隐式链接)的主要缺点是( )。
    • A. 不能进行随机访问
    • B. 存在外部碎片
    • C. 文件不能动态增长
    • D. 空间利用率低
    查看练习答案与解析

    答案:A
    解析:隐式链接的下一个块指针存在数据块中,要读第 $N$ 块必须先读前 $N-1$ 块,不支持随机访问。

二、综合题(共75分)

1.(8分)什么是系统调用?以C语言中的printf()为例,分析Linux系统处理系统调用的详细过程。

查看答案与解析

答案:

1. 系统调用的定义: 系统调用(System Call)是操作系统提供给用户程序调用的一组特殊接口。用户程序可以通过系统调用向操作系统内核请求服务(如文件操作、进程控制、内存管理等)。系统调用是实现用户态到核心态切换的安全唯一手段。

2. printf() 处理的详细过程:

  • 用户态调用:应用程序执行 printf("Hello");
  • 库函数转换:C 标准库将 printf 转换为对底层系统调用 write() 的调用,并将系统调用号(如 __NR_write)和参数放入指定寄存器。
  • 触发陷阱:执行 syscall(或 int 0x80)指令,产生软中断,触发特权级切换。
  • 内核分发:CPU 进入核心态,调用 system_call 入口,查系统调用表执行对应的 sys_write
  • 服务执行:内核驱动向输出设备写入数据。
  • 状态返回:执行完毕后通过 sysret 恢复现场,返回用户态继续执行。

难度: ⭐⭐
考点: #系统调用 #用户态与核心态 #printf过程

💡 学习锦囊

📖 相关公式与知识点:

  • 特权级:CPU 运行状态分为用户态(Ring 3)和核心态(Ring 0)。
  • 触发机制:由访管指令(陷阱指令)触发。

思路分析

理清状态切换的触发点(syscall)和内核如何识别请求(系统调用号)。

易错点

误认为 printf 直接操作硬件,忽略了 C 库的桥梁作用。

🔄 举一反三
  1. 用户程序在( )态下执行系统调用指令。
    • A. 用户态
    • B. 核心态
    • C. 访管态
    • D. 中断态
    查看练习答案与解析

    答案:A
    解析:系统调用指令本身在用户态执行,执行后导致 CPU 切换到核心态。

2.(12分)(本大题10分)某淘宝店铺在双十一活动中,设计了一个“买一赠一”的活动:顾客购买一件A商品,店铺赠送一个B商品。商品A和B都存放在同一个仓库中,因为仓库容量的限制,仓库中最多只能存放200件A商品和1000件B商品,为保证入库和出库能有序进行,规定一次只能一个人进入仓库存取商品。A商品是大件商品,出入库都需要使用推车协助,仓库提供了一台推车供采购人员和销售人员使用。商品B是小件商品,不需要工具协助。采购员采购商品后,只要仓库有空间就将商品入库,否则等待。为保证顺利打包,只有仓库中同时有A商品和B商品时,销售人员才能根据顾客订单每次同时从仓库中各取出一件A商品和B商品。假设有多名采购员和多名销售员。请完成以下要求:

(1)分析本问题中相关进程间的同步与互斥关系;
(2)请利用记录型信号量机制实现本问题中多个进程间的同步互斥关系。

查看答案与解析

答案:

(1)同步与互斥关系分析:

  • 互斥关系
    1. 进出仓库互斥:一次只能一个人进入仓库(设互斥信号量 mutex_warehouse)。
    2. 推车使用互斥:采购员和销售员在搬运 A 商品时均需使用推车(设互斥信号量 mutex_cart)。
  • 同步关系
    1. 空间限制(非满):仓库最多容纳 200 件 A,1000 件 B(设资源信号量 empty_A, empty_B)。
    2. 存量限制(非空):销售员取货的前提是仓库有货(设资源信号量 full_A, full_B)。

(2)信号量机制实现:

c
semaphore mutex_warehouse = 1; // 仓库访问互斥
semaphore mutex_cart = 1;      // 推车使用互斥
semaphore empty_A = 200;       // A 商品空位
semaphore empty_B = 1000;      // B 商品空位
semaphore full_A = 0;          // 仓库中 A 商品数
semaphore full_B = 0;          // 仓库中 B 商品数

void Producer_A() { // 采购员 A
    while(1) {
        采购一件 A 商品;
        P(empty_A);
        P(mutex_cart);      // 搬运 A 需先取推车
        P(mutex_warehouse); // 进入仓库
        A 商品入库;
        V(mutex_warehouse);
        V(mutex_cart);
        V(full_A);
    }
}

void Producer_B() { // 采购员 B
    while(1) {
        采购一件 B 商品;
        P(empty_B);
        P(mutex_warehouse); // 进入仓库
        B 商品入库;
        V(mutex_warehouse);
        V(full_B);
    }
}

void Salesman() { // 销售员
    while(1) {
        P(full_A);
        P(full_B);
        P(mutex_cart);      // 取 A 需用推车
        P(mutex_warehouse); // 进入仓库
        取出 A 和 B 商品;
        V(mutex_warehouse);
        V(mutex_cart);
        V(empty_A);
        V(empty_B);
        打包销售;
    }
}

难度: ⭐⭐⭐
考点: #进程同步与互斥 #信号量机制 #生产者消费者模型

💡 学习锦囊

📖 相关公式与知识点:

  • $P(\text{空位}) \to P(\text{互斥}) \to \text{临界区} \to V(\text{互斥}) \to V(\text{满位})$
  • 死锁预防:多个进程请求多个锁时,必须保证请求顺序一致

思路分析

区分哪些操作需要工具(推车),哪些操作受制于空间(空闲信号量)。

易错点

$P(\text{互斥})$ 放在 $P(\text{同步})$ 之前,导致死锁

🔄 举一反三
  1. 在生产者-消费者问题中,若缓冲区大小为 1,是否还需要设置互斥信号量 mutex
    • A. 需要
    • B. 不需要
    • C. 可有可无
    • D. 取决于进程数
    查看练习答案与解析

    答案:B
    解析:当容量为 1 时,emptyfull 信号量本身即可保证互斥访问。

3.(10分)设一系统在某时刻的资源分配情况如下表所示。

已分配资源最大请求资源剩余资源
ABCABCABC
P0212559233
P1402546
P24054013
P3204425
P4314M24

(1)请给出系统中各进程尚需要的资源数。
(2) 在系统安全的情况下, P4 对资源 A 的最大请求数量 M 的最大值是多少? 为什么?
(3)当M取(2)中的最大值时,若PO提出资源请求(0,1,1),系统能够分配吗?

查看答案与解析

答案:

(1)各进程尚需资源数(Need = Max - Allocation):

  • P0: (3, 4, 7)
  • P1: (1, 4, 4)
  • P2: (0, 0, 8)
  • P3: (2, 2, 1)
  • P4: (M-3, 1, 0)

(2)M 的最大值为 7。原因分析

  • 当前可用资源 Available 为 (2, 3, 3)。
  • 检查各进程,只有 P3 的 Need (2, 2, 1) $\le$ Available (2, 3, 3)。执行 P3 后释放资源,Available 变为 (2, 3, 3) + (2, 0, 4) = (4, 3, 7)。
  • 此时 Available (4, 3, 7) 仍无法满足 P0, P1, P2。要保证系统安全,必须能满足 P4。
  • 因此要求 P4 的 $\text{Need}_A \le \text{Available}_A \implies M - 3 \le 4 \implies M \le 7$
  • $M=7$ 时,P4 执行完释放资源,Available 变为 (7, 4, 11),可依次满足 P0, P1, P2,存在安全序列 $P_3 \to P_4 \to P_0 \to P_1 \to P_2$

(3)能够分配。分析过程

  • P0 请求 Request (0, 1, 1) $\le$ Available (2, 3, 3)。
  • 假定分配,Available 变为 (2, 2, 2)。P0 的 Need 变为 (3, 3, 6),Allocation 变为 (2, 2, 3)。
  • 进行安全性检查:
    1. Available (2, 2, 2) 满足 P3,P3 释放后 Available 变为 (4, 2, 6)。
    2. Available (4, 2, 6) 满足 P4 (Need为 4, 1, 0),P4 释放后 Available 变为 (7, 3, 10)。
    3. 此时可依次满足 P0, P1, P2。
  • 存在安全序列 $P_3 \to P_4 \to P_0 \to P_1 \to P_2$,故可分配。

难度: ⭐⭐⭐
考点: #银行家算法 #安全性检查 #最大资源请求

💡 学习锦囊

📖 相关公式与知识点:

  • $\text{Need} = \text{Max} - \text{Allocation}$
  • 安全状态判断:存在至少一个安全序列。

思路分析

逆向思维:为了让死局盘活,必须把唯一能跑的进程跑完以获取新资源。

易错点

计算 Need 时减法出错,或者遗漏了释放已分配资源这一步。

🔄 举一反三
  1. 银行家算法中,若系统处于不安全状态,则( )。
    • A. 一定会发生死锁
    • B. 可能发生死锁
    • C. 绝对不会死锁
    • D. 立即终止进程
    查看练习答案与解析

    答案:B
    解析:不安全状态只是死锁的先兆,若进程后续实际不请求最大资源,可能不会死锁。

4.(11分)某请求分页系统逻辑地址结构如下所示:

外部页号(10位)外部页内地址(10位)页内地址(12位)

系统采用固定分配局部置换策略和LRU页面置换算法,某进程共有8个页面,系统为该进程分配了3个物理块,过去最近的一段时间内页面访问序列是0,1,2,7,4,5,2,3,4,1,0,当前进程页表如下所示,其中有效位为0表示页面不在内存中:

页号物理块号有效位是否在TLB中
031
181
20
30
461
50
60
70

若一次内存访问时间为100ns,一次快表(TLB)访问时间是10ns,地址转换时,先访问快表,如果快表未命中,再访问页表;处理一次缺页的时间为50ms(已包含更新TLB和页表的时间)。

请完成以下问题:

(1)该系统采用的是几级页表?逻辑地址空间是多大?
(2) 虚拟地址 51A6H 的物理地址是多少(结果表示为 16 进制)?给出计算过程。
(3)访问虚拟地址3B15H,需要多少时间?给出计算过程。

查看答案与解析

答案:

(1)页表级数与逻辑地址空间:

  • 页表级数:两级页表(由外部页号、外部页内地址两部分构成)。
  • 逻辑地址空间:逻辑地址总位数 $= 10 + 10 + 12 = 32$ 位,故逻辑地址空间为 $2^{32}\text{ B} = 4\text{ GB}$

(2)虚拟地址 51A6H 的物理地址:

  • 解析地址$51A6\text{H} = 0000\ 0101\ 0001\ 1010\ 0110\text{B}$
    • 页内偏移(低 12 位):$1A6\text{H}$
    • 页号(次高 10 位):$5\text{H}$
  • 缺页与置换:页号 5 目前有效位为 0(不在内存)。当前内存中存放的页面是 {0, 1, 4}。
  • LRU 置换:根据访问序列 ... 4, 5, 2, 3, 4, 1, 0,最近访问顺序为 0 $\to$ 1 $\to$ 4。最久未访问的是 4,故淘汰页面 4,将页面 5 装入其原物理块 6 中。
  • 物理地址:物理块号 6 $\to$ 物理地址为 61A6H

(3)访问虚拟地址 3B15H 的耗时:

  • 解析地址$3B15\text{H} \to$ 页号 3,页内偏移 $B15\text{H}$
  • 访问流程与耗时
    1. 访问 TLB(未命中):$10\text{ns}$
    2. 访问二级页表(缺页中断):$2 \times 100\text{ns} = 200\text{ns}$
    3. 缺页中断处理:$50\text{ms} = 50,000,000\text{ns}$
    4. 重新执行指令,访问 TLB(命中):$10\text{ns}$
    5. 访问内存读取数据:$100\text{ns}$
  • 总耗时$10 + 200 + 50,000,000 + 10 + 100 = \mathbf{50,000,320\text{ ns}}$

难度: ⭐⭐⭐⭐
考点: #两级页表 #LRU算法 #缺页中断耗时

💡 学习锦囊

📖 相关公式与知识点:

  • $\text{物理地址} = \text{物理块号} \times \text{页大小} + \text{页内偏移}$
  • 缺页耗时包含:中断捕获 + 调页入内存 + 更新页表。

思路分析

注意 51A6H 中页号的提取,它是两级结构的高位组合。

易错点

计算耗时时容易漏掉中断处理后“重新访问 TLB + 内存”的步骤。

🔄 举一反三
  1. 若页表项大小为 4B,页面大小为 4KB,则一个页表最多能容纳( )个页表项。
    • A. 1024
    • B. 2048
    • C. 4096
    • D. 512
    查看练习答案与解析

    答案:A
    解析$4\text{KB} / 4\text{B} = 1024$

5.(11分)Linux系统采用伙伴系统管理其物理内存,内存物理页面大小为4KB。某时刻系统内存的使用情况如下图所示:

空闲

已分配

请回答以下问题:

(1)进程A请求分配18KB内存空间,画出分配完成后的内存使用情况图。 (2) 若 B、C、D 三个进程相继运行完成, 系统依次回收各进程占据的内存空间, 分别画出每次回收后的内存使用情况图。
(3)给出一种能比较快速地判断回收块的伙伴块是否空闲的方法。

查看答案与解析

答案:

(1)进程 A 分配 18KB 内存空间推导:

  • 需求转换$18\text{KB} / 4\text{KB} = 4.5$ 页。伙伴系统分配粒度为 $2^k$ 页,故最接近且大于 4.5 的是 $2^3 = 8$ 页(即 32KB,Order 为 3)。
  • 分配流程:系统在 free_area[3] 链表中查找。若有空闲块则直接分配;若无,则向上查找更大阶的空闲块并进行对半拆分(如 64KB $\to$ 32KB + 32KB),直到获得 32KB 块分配给 A,剩余部分挂入对应阶链表。

(2)回收进程 B、C、D 的内存空间推导:

  • 回收算法:系统释放块时,会计算其伙伴块的地址。若伙伴块也处于空闲状态,则将两者合并为一个更大的块,并继续向上级联尝试合并,直到伙伴块非空闲或达到最大阶。

(3)快速判断伙伴块是否空闲的方法:

  • 页描述符位图法(Linux 实际采用)
    1. 利用 struct page 结构体中的 flags 标志位中的 PG_buddy 位来表示该页框是否属于伙伴系统中的一个空闲块。
    2. private 字段中存储该空闲块的阶数(Order)。
    3. 地址计算:设当前回收的块起始页号为 $P$,阶数为 $k$,则其伙伴块的起始页号为 $P \oplus 2^k$
    4. 判定:直接通过偏移量找到伙伴块的 struct page,若其 PG_buddy 为 1 且 order 等于 $k$,则可判定为空闲,可执行合并。

难度: ⭐⭐⭐⭐
考点: #伙伴系统 #内存分配与回收 #页描述符

💡 学习锦囊

📖 相关公式与知识点:

  • 伙伴块起始页号公式:$\text{Buddy\_Page} = P \oplus 2^k$
  • 内部碎片 $= 2^k \times \text{页大小} - \text{实际请求大小}$

思路分析

伙伴系统的核心是“对半拆分”与“地址二进制互补合并”。

易错点

回收时必须保证两块大小相同地址连续才能算作伙伴。

🔄 举一反三
  1. 在伙伴系统中,某空闲块大小为 16 页,起始页号为 32,其伙伴块的起始页号为( )。
    • A. 16
    • B. 48
    • C. 0
    • D. 64
    查看练习答案与解析

    答案:B
    解析$32 \oplus 16 = 32 \oplus 2^4 = 48$

  1. (11分)某文件系统磁盘块大小为4KB。文件采用二级索引结构,每个目录项(文件的FCB)占300B,每个磁盘块存放13个目录项,根目录的内容常驻内存,其他目录文件尚不在内存。有文件file1共1MB,在该文件系统中的位置:/A/B/C/file1。

(1)若A,B,C三个子目录分别有100,200,200个文件或子目录,请问查找file1平均需要读取几次磁盘?(要求给出分析过程)
(2)在找到 file1 之后,要读入 file1 文件从 4000B 开始的 10000B 内容,需要存取几次磁盘?(要求给出简要分析过程)

查看答案与解析

答案:

(1)查找 file1 平均读取磁盘次数推导:

  • 根目录:内容常驻内存,查找目录 A 的 FCB 耗费 0 次磁盘访问。
  • 查找目录 A
    • 目录 A 包含 100 个项,每块存 13 项 $\implies$$\lceil 100 / 13 \rceil = 8$ 个磁盘块。
    • 简化计算(按块均匀分布):顺序检索平均需读取 $\frac{1+8}{2} = 4.5$ 次磁盘。
    • 精确计算(按文件均匀分布)
      $$E_A = \sum_{i=1}^7 \frac{13}{100} \times i + \frac{9}{100} \times 8 = 4.36 \text{ 次}$$
  • 查找目录 B
    • 目录 B 包含 200 个项 $\implies$$\lceil 200 / 13 \rceil = 16$ 个磁盘块。
    • 简化计算:顺序检索平均需读取 $\frac{1+16}{2} = 8.5$ 次磁盘。
    • 精确计算
      $$E_B = \sum_{i=1}^{15} \frac{13}{200} \times i + \frac{5}{200} \times 16 = 8.2 \text{ 次}$$
  • 查找目录 C
    • 目录 C 包含 200 个项 $\implies$$\lceil 200 / 13 \rceil = 16$ 个磁盘块。
    • 简化计算:顺序检索平均需读取 $\frac{1+16}{2} = 8.5$ 次磁盘。
    • 精确计算$E_C = 8.2$ 次。
  • 总计
    • 简化方法:$0 + 4.5 + 8.5 + 8.5 = \mathbf{21.5}$ 次。
    • 精确方法:$0 + 4.36 + 8.2 + 8.2 = \mathbf{20.76}$ 次。

(2)读入 4000B 到 14000B 的磁盘存取次数:

  • 数据跨块分析
    • 磁盘块大小为 4KB (4096B)。
    • 4000B $\to$ 14000B 跨越了文件的第 0 块、第 1 块、第 2 块和第 3 块(共 4 块数据)。
  • 索引块访问
    • 采用二级索引,读取前 4 个数据块需要访问:1 次一级索引块 + 1 次二级索引块
  • 总计:1 (一级) + 1 (二级) + 4 (数据块) = 6 次

难度: ⭐⭐⭐
考点: #文件物理结构 #索引文件 #磁盘访问次数

💡 学习锦囊

📖 相关公式与知识点:

  • 平均查找块数 $= (\text{总块数} + 1) / 2$
  • 字节位置 $\to$ 块号转换:$\text{块号} = \lfloor \text{字节偏置} / \text{块大小} \rfloor$

思路分析

读文件内容前,必须先通过多级索引定位到物理块号。

易错点

容易遗漏读取“索引块”本身的磁盘访问次数。

🔄 举一反三
  1. 某文件的物理块号依次存在索引表中,访问文件的第 5 块(从 0 编号)数据,至少需要几次内存访问?
    • A. 1
    • B. 2
    • C. 3
    • D. 4
    查看练习答案与解析

    答案:A
    解析:若索引表已在内存,直接获取块号,只需 1 次物理块读取。

7.(12分)某磁盘大小为64MB,磁盘上的磁盘块大小为4KB,从0开始编号,每个磁道8个磁盘块。某文件存储在6个磁盘块上,该6个磁盘块号分别是300,400,200,800,600和500,且该文件的目录项所占的磁盘块号是100,若最后一次磁盘块的访问是60号磁盘块。

(1)若采用显示链接,磁盘块号占用4B,FAT表存放在磁盘头部,试计算读取该文件的寻道距离。
(2) 若采用二级索引分配方法, 一级索引表存储在磁盘块号为 1000 的磁盘块上, 二级索引表存储在磁盘块号为 1500 的磁盘块上, 索引表表项占 4B。试计算读取该文件的寻道距离。

查看答案与解析

答案:

基本参数转换:

  • 磁盘块大小 $= 4\text{KB}$
  • 每磁道块数 $= 8$
  • 磁盘块号转磁道号公式:$\text{磁道号} = \lfloor \text{磁盘块号} / 8 \rfloor$

(1)显式链接(FAT)下的寻道距离:

  • 原理:FAT 表已读入内存,访问文件的物理块无需额外读取磁盘查找链表。
  • 访问顺序
    1. 读取目录项(块号 100):磁道 $\lfloor 100 / 8 \rfloor = 12$
    2. 读取文件内容(300, 400, 200, 800, 600, 500):
      • 块 300 $\to$ 磁道 $\lfloor 300 / 8 \rfloor = 37$
      • 块 400 $\to$ 磁道 $\lfloor 400 / 8 \rfloor = 50$
      • 块 200 $\to$ 磁道 $\lfloor 200 / 8 \rfloor = 25$
      • 块 800 $\to$ 磁道 $\lfloor 800 / 8 \rfloor = 100$
      • 块 600 $\to$ 磁道 $\lfloor 600 / 8 \rfloor = 75$
      • 块 500 $\to$ 磁道 $\lfloor 500 / 8 \rfloor = 62$
  • 磁头移动轨迹(从 60 号磁盘块开始 $\implies$ 磁道 $\lfloor 60 / 8 \rfloor = 7$):
    • 起始(7) $\to 12 \to 37 \to 50 \to 25 \to 100 \to 75 \to 62$
  • 寻道距离$|12 - 7| + |37 - 12| + |50 - 37| + |25 - 50| + |100 - 25| + |75 - 100| + |62 - 75|$$= 5 + 25 + 13 + 25 + 75 + 25 + 13 = \mathbf{181}$ 个磁道。

(2)二级索引分配下的寻道距离:

  • 访问流程与磁道
    1. 读取目录项(块号 100):磁道 $\lfloor 100 / 8 \rfloor = 12$
    2. 读取一级索引(块号 1000):磁道 $\lfloor 1000 / 8 \rfloor = 125$
    3. 读取二级索引(块号 1500):磁道 $\lfloor 1500 / 8 \rfloor = 187$
    4. 依次读取文件各数据块(已推导磁道:37, 50, 25, 100, 75, 62)。
  • 磁头移动轨迹
    • 起始(7) $\to 12 \to 125 \to 187 \to 37 \to 50 \to 25 \to 100 \to 75 \to 62$
  • 寻道距离$|12 - 7| + |125 - 12| + |187 - 125| + |37 - 187| + |50 - 37| + |25 - 50| + |100 - 25| + |75 - 100| + |62 - 75|$$= 5 + 113 + 62 + 150 + 13 + 25 + 75 + 25 + 13 = \mathbf{481}$ 个磁道。

难度: ⭐⭐⭐⭐
考点: #磁盘调度 #寻道距离 #文件分配方式

💡 学习锦囊

📖 相关公式与知识点:

  • $\text{磁道号} = \lfloor \text{块号} / \text{每道块数} \rfloor$
  • 距离为两磁道号绝对值之差。

思路分析

准确计算每个磁盘块对应的磁道号是得分关键。

易错点

题目给出的是“60 号磁盘块”而非“60 号磁道”,切勿直接用 60 做起点减法。

🔄 举一反三
  1. 某磁盘有 200 个磁道,磁头当前位于 100 号磁道。若依次有请求 55, 150, 30, 180,采用 FCFS 算法的寻道总距离为( )。
    • A. 250
    • B. 300
    • C. 410
    • D. 345
    查看练习答案与解析

    答案:C
    解析$|55-100| + |150-55| + |30-150| + |180-30| = 45 + 95 + 120 + 150 = 410$

你正在阅读的是会员专属文档,💕 限时特惠进行中
你尚未登录,目前新用户可获3天体验会员,去登录