Appearance
《操作系统》第一学期期末试卷A (精选01)
一、选择题(每题1分,共25分)
- 在层次结构的操作系统中,内核由若干层次的模块构成,( )。
A. 下层模块可以调用上层模块
B. 上层模块可以调用下层模块
C. 各层模块之间不能相互调用
D. 各层模块之间可以相互调用
查看答案与解析
答案:B
解析:
在层次化结构中,操作系统将内核划分为多个层次(如 $L_0, L_1, \dots, L_n$)。每一层都建立在下层的基础上,并且仅能调用其直接下层的功能和服务。因此,上层模块可以调用下层模块,但下层模块不能调用上层模块(单向依赖)。
难度: ⭐
考点: #操作系统结构 #分层结构
💡 学习锦囊
📖 相关公式与知识点:
- 分层结构(Layered Approach):将操作系统划分为若干个层次,最底层($L_0$)为硬件,最高层($L_n$)为用户接口。
- 优点:易于调试和验证,各层之间接口清晰。
- 缺点:效率较低,因为每一层都需要进行函数调用和参数传递。
思路分析
理解分层结构的核心是“单向调用”。就像盖楼一样,上面的楼层依赖下面的地基,所以上层可以访问下层,反之则不行。
🔄 举一反三
- 在分层结构的操作系统中,最底层($L_0$)通常是( )。
- A. 用户接口
- B. 硬件
- C. 进程管理
- D. 文件系统
查看练习答案与解析
答案:B
解析:根据分层结构的定义,最底层($L_0$)是底层硬件,最高层($L_n$)是用户接口。
- 关于各种类型的操作系统,下列说法中错误的是()。
A.相比较而言,分时系统比实时信息处理系统具有更好的交互性
B.作业控制语言是批处理系统为用户提供的命令接口
C. 网络操作系统能够将多个任务分配到网络系统中的多个处理单元上,让这些任务共享系统中的资源,并行执行
D. 实时操作系统有时候为了保证其实时任务的截止时间, 可能会以牺牲系统资源利用率为代价
查看答案与解析
答案:C
解析:
- A 选项:分时系统侧重于人机交互,允许多个用户通过终端同时使用计算机;而实时系统侧重于对外部事件的及时响应,交互性相对较弱。说法正确。
- B 选项:批处理系统中,用户无法直接干预作业运行,必须使用作业控制语言(JCL)编写作业说明书提交给系统。说法正确。
- C 选项:能够将多个任务分配到网络系统中的多个处理单元上并实现“并行执行”的是分布式操作系统。网络操作系统虽然实现了资源共享,但各计算机上的任务仍然由本地操作系统独立管理,缺乏全局的分布式并行处理能力。说法错误。
- D 选项:实时系统最重要的指标是“截止时间(Deadline)”,为了按时完成任务,系统可能会预留资源,导致资源利用率不高。说法正确。
难度: ⭐⭐
考点: #操作系统类型 #网络操作系统 #分布式操作系统
💡 学习锦囊
📖 相关公式与知识点:
- 分时系统:多路性、独立性、及时性、交互性。
- 实时系统:高可靠性、及时性。
- 网络操作系统:基于计算机网络,实现资源共享,但各节点独立。
- 分布式操作系统:多台计算机协同工作,对外表现为一个统一的系统(单系统映像)。
易错点
容易混淆“网络操作系统”与“分布式操作系统”。关键区别在于是否有统一的全局管理和任务的透明并行执行。
🔄 举一反三
- 分布式操作系统与网络操作系统相比,最本质的区别在于( )。
- A. 实现了资源共享
- B. 具有网络通信功能
- C. 具有全局的系统映像和透明性
- D. 能够连接不同构架的计算机
查看练习答案与解析
答案:C
解析:分布式操作系统具有“全局性”和“透明性”,用户感觉不到网络的存在,仿佛在使用一台计算机;而网络操作系统用户必须知道网络资源的位置。
3.OS通常会为用户提供多种使用接口,如终端命令、图标菜单、系统调用和()。
A. 计算机高级指令
B. 宏命令
C. 类似 DOS 的批命令或 UNIX 的 shell 文件
D. 汇编语言
查看答案与解析
答案:C
解析:
操作系统为用户提供的接口主要分为两大类:
- 命令接口:供用户直接使用。包括联机命令接口(如终端命令、图标菜单)和脱机命令接口(如批命令、Shell 文件)。
- 程序接口:由一组系统调用组成,供程序员在编写程序时使用。 C 选项中的批命令和 Shell 文件属于脱机命令接口。
难度: ⭐
考点: #操作系统接口 #命令接口
💡 学习锦囊
📖 相关公式与知识点:
- 联机命令接口:交互式,用户输入一条,系统执行一条。
- 脱机命令接口:批处理,用户将一组命令写在脚本中,系统一次性执行。
- 程序接口:通过系统调用(System Call)实现。
思路分析
理清接口的分类:面向普通用户的(命令接口)和面向程序员的(程序接口)。
🔄 举一反三
- 程序员在程序中请求操作系统服务时,应该使用( )。
- A. 键盘命令
- B. 系统调用
- C. 汇编语言
- D. 高级指令
查看练习答案与解析
答案:B
解析:程序接口是由系统调用组成的,程序员通过系统调用向操作系统请求服务。
- 操作系统最主要的设计目标是()。
A. 方便性和有效性
B. 方便性和可扩展性
C. 有效性和可扩展性
D. 有效性和可移植性
查看答案与解析
答案:A
解析:
操作系统的基本目标主要包括:
- 方便性:使用户能更方便地使用计算机。
- 有效性:提高系统资源的利用率和吞吐量。 这是操作系统最核心的两个设计目标。早期的操作系统更注重有效性,随着技术发展,方便性也变得同等重要。
难度: ⭐
考点: #操作系统目标
💡 学习锦囊
📖 相关公式与知识点:
- 操作系统的定义:管理系统资源、控制程序执行、改善人机界面、提供各种服务的系统软件。
- 四大基本特征:并发、共享、虚拟、异步。
易错点
不要将“可扩展性”或“可移植性”误认为是“最主要”的目标,它们属于发展动力或设计原则。
🔄 举一反三
- 操作系统引入“有效性”目标的主要目的是为了提高( )。
- A. 软件的易用性
- B. 系统的兼容性
- C. 资源利用率和系统吞吐量
- D. 硬件的可靠性
查看练习答案与解析
答案:C
解析:有效性是指通过管理,使得 CPU、内存等资源得到充分利用,从而提高吞吐量。
- 某系统有 3 个并发程序,都需要同类资源 4 个,试问该系统不会发生死锁的最少资源数是()。
A. 4
B. 8
C. 10
D. 12
查看答案与解析
答案:C
解析:
本题考查死锁的预防与资源分配策略。 设系统中有 $N$ 个进程,每个进程最多需要 $R$ 个同类资源。 发生死锁的最极端情况是:所有进程都获得了 $(R-1)$ 个资源,并且都在等待最后 1 个资源。此时系统中的资源总数为:
只要在这个基础上再增加 1 个资源,就必然会有 1 个进程能够满足所有需求并顺利执行完毕,释放其占有的资源,从而打破死锁循环。 因此,不发生死锁的最少资源数为:
代入本题数据:$N = 3, R = 4$
故选 C。
难度: ⭐⭐
考点: #死锁预防 #资源分配 #鸽巢原理
💡 学习锦囊
📖 相关公式与知识点:
- 死锁定义:多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。
- 不发生死锁的条件公式:$M \geq N \times (R - 1) + 1$ ($M$ 为资源总数)。
思路分析
利用“最坏情况分析法”:先让每个进程都处于“只差一个就能运行”的饥饿状态,然后再给系统加一个资源,就能打破僵局。
🔄 举一反三
- 某系统有 5 个并发进程,每个进程都需要 3 台打印机,为保证系统绝不发生死锁,系统至少应配置( )台打印机。
- A. 10
- B. 11
- C. 15
- D. 16
查看练习答案与解析
答案:B
解析:代入公式 $5 \times (3 - 1) + 1 = 5 \times 2 + 1 = 11$。
- 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)。
🔄 举一反三
- 下列进程通信方式中,传输速度最快的是( )。
- A. 管道
- B. 消息队列
- C. 共享内存
- D. 套接字
查看练习答案与解析
答案:C
解析:共享内存允许多个进程直接读写同一块物理内存,无需在内核和用户空间之间复制数据,是速度最快的 IPC 方式。
- 假设下述 4 个进程同时到达系统,当使用最高优先数优先调度算法时,计算进程的平均周转时间为()。
| 进程 | 运行时间 | 优先数 |
| P1 | 2.0 | 4 |
| P2 | 5.0 | 9 |
| P3 | 8.0 | 1 |
| P4 | 3.0 | 8 |
A. 4.5
B. 10.5
C. 4.75
D. 10.25
查看答案与解析
答案:D
解析:
本题考查进程调度算法与周转时间的计算。 默认优先数越大,优先级越高(杭电及考研常见约定)。
- 确定执行顺序:
- 4 个进程同时到达(到达时间均为 0)。
- 优先级从高到低依次为:P2 (9) > P4 (8) > P1 (4) > P3 (1)。
- 执行顺序为:$P_2 \to P_4 \to P_1 \to P_3$。
- 计算各进程的完成时间:
- $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$
- 计算周转时间(周转时间 = 完成时间 - 到达时间):
- $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$
- 计算平均周转时间:$$\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_{运行}}$。
易错点
注意审题,区分“优先数大代表优先级高”还是“优先数小代表优先级高”。若无特殊说明,一般优先数越大优先级越高。
🔄 举一反三
- 若上题改为“短作业优先(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。
- 在消息缓冲通信方式中,系统的临界资源为( )。
A. 发送进程
B. 消息队列
c. 接收进程
D. 信箱
查看答案与解析
答案:B
解析:
在消息缓冲通信机制中,发送进程发送消息时,需要将消息挂在接收进程的消息队列上;接收进程接收消息时,需要从消息队列中取下消息。这个消息队列(或消息缓冲区)是多个进程共享的资源,为了防止数据混乱,必须互斥访问,因此它是系统的临界资源。 故选 B。
难度: ⭐
考点: #进程通信 #消息缓冲机制 #临界资源
💡 学习锦囊
📖 相关公式与知识点:
- 临界资源:一段时间内只允许一个进程访问的资源。
- 消息缓冲机制:属于直接通信方式,利用 OS 提供的发送/接收原语。
思路分析
思考哪个数据结构会被多个并发进程同时修改。在这里是存放消息的“消息队列”。
🔄 举一反三
- 在信箱通信方式中,临界资源是( )。
- A. 发送进程
- B. 接收进程
- C. 信箱
- D. 消息
查看练习答案与解析
答案:C
解析:信箱通信(间接通信)中,信箱是共享的数据结构,属于临界资源。
- 在以下说法中,并不是多线程系统的特长的是( )。
A. 利用线程并行的执行矩阵乘法运算
B. 服务器利用线程响应 HTTP 请求
C. 键盘驱动程序为每一个正在运行的应用配备一个线程, 用以响应该应用的键盘输入
D. 基于 GUI 的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作
查看答案与解析
答案:C
解析:
- A 选项:矩阵乘法可以拆分为多个子任务,多线程在多核 CPU 上可以并行计算,提高速度。正确。
- B 选项:Web 服务器常用“一个线程服务一个请求”的模型,并发处理大量连接。正确。
- C 选项:键盘驱动程序通常运行在内核态,通过中断处理机制来响应按键。它不需要也不应该为每个应用程序创建一个线程来监听键盘输入,这会造成极大的资源浪费和调度开销。错误。
- D 选项:GUI 应用需要保持界面响应,因此“计算”等耗时操作必须放在后台线程,避免阻塞主 UI 线程。正确。 故选 C。
难度: ⭐⭐
考点: #多线程 #线程应用场景
💡 学习锦囊
📖 相关公式与知识点:
- 线程:轻量级进程,是 CPU 调度的基本单位。
- 适用场景:并发 I/O、并行计算、保持 UI 响应。
思路分析
考虑开销与合理性。I/O 驱动层级通常很低,使用中断驱动,而不是为每个应用开线程。
🔄 举一反三
- 下列哪种情况最不适合使用多线程?( )
- A. 图像处理软件的滤镜效果计算
- B. 只有单核 CPU 且属于纯计算密集型的单个任务
- C. 数据库服务器的并发查询
- D. 视频播放器的音视频同步
查看练习答案与解析
答案:B
解析:单核 CPU 上纯计算任务开多线程不仅不能并行,还会增加线程切换的额外开销。
- 阅读下列程序段,请问输出的结果是( )。
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);
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A. 4
B. 5
C. 6
D. 7
查看答案与解析
答案:A
解析:
本题考查 fork() 系统调用的执行机制和进程的内存隔离。
int num = 5;初始化父进程的变量。- 第一个
fork():- 子进程 1:
fork()返回 0,执行if(!fork())内部。++num(此时子进程 1 的num变为 6)。然后exit(1)退出。 - 父进程:
fork()返回子进程 PID(非 0),进入else分支。
- 子进程 1:
- 父进程的
else内部:- 第二个
fork():- 子进程 2:
fork()返回 0,执行内层if(!fork())。++num(此时子进程 2 的num变为 6)。然后exit(1)退出。 - 父进程:
fork()返回子进程 PID,进入内层else分支。
- 子进程 2:
- 第二个
- 父进程的内层
else:- 执行
num--;,父进程的num变为 $5 - 1 = 4$。
- 执行
- 父进程后续:
- 调用两次
wait(0),分别等待子进程 1 和子进程 2 结束。 - 执行
printf("%d", num);,输出父进程的num值,即 4。 注意:由于进程间内存是相互隔离的(写时复制),子进程对num的修改不会影响父进程。 故选 A。
- 调用两次
难度: ⭐⭐⭐
考点: #fork系统调用 #进程创建 #写时复制
💡 学习锦囊
📖 相关公式与知识点:
fork():一次调用,两次返回。子进程返回 0,父进程返回子进程 PID。- 子进程完全复制父进程的地址空间,但此后两者独立。
易错点
容易误认为子进程修改的 num 会累加到父进程中。一定要牢记“进程间数据独立”。
🔄 举一反三
- 若将上题中的
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 三个进程。
- 若一个系统内存有 64MB,处理器是 32 位地址,则它的逻辑地址空间为()。
A. 2GB
B. 4GB
C. 100KB
D. 64MB
查看答案与解析
答案:B
解析:
- 逻辑地址空间(虚拟地址空间)的大小完全由处理器的地址总线宽度(或寻址位数)决定。
- 处理器是 32 位地址,说明其寻址范围是 $2^{32}$ 字节。
- 物理内存的大小(64MB)仅决定了物理地址空间的大小,不影响逻辑地址空间。 故选 B。
难度: ⭐
考点: #逻辑地址空间 #寻址范围
💡 学习锦囊
📖 相关公式与知识点:
- 逻辑地址空间大小 $= 2^{\text{地址位数}}$。
- 物理地址空间大小 $= 2^{\text{物理地址位数}}$(通常对应实际内存大小)。
思路分析
逻辑地址是虚的(看处理器寻址能力),物理地址是实的(看内存大小)。不要被题目中的“内存 64MB”迷惑。
易错点
容易把物理内存大小(64MB)误认为是逻辑地址空间的大小。
🔄 举一反三
- 某计算机的虚拟地址宽度为 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}$。
- 某分页系统采用三级页表,如果没有引入快表,则 CPU 每取一个数据,实际要访问()次内存。
A. 1
B. 2
C. 3
D. 4
查看答案与解析
答案:D
解析:
在没有快表(TLB)的多级页表系统中,CPU 访问一个逻辑地址的数据,需要通过页表逐级查询物理地址:
- 第 1 次访问内存:访问一级页表,获取二级页表的起始地址。
- 第 2 次访问内存:访问二级页表,获取三级页表的起始地址。
- 第 3 次访问内存:访问三级页表,获取目标数据块的物理页框号,与页内偏移拼接得到物理地址。
- 第 4 次访问内存:根据物理地址,访问实际的目标数据。 因此,总共需要访问 4 次内存。 故选 D。
难度: ⭐⭐
考点: #多级页表 #内存访问次数
💡 学习锦囊
📖 相关公式与知识点:
- $N$ 级页表(无快表)访问一次数据所需的内存访问次数为 $N + 1$。
- 快表(TLB)的作用:缓存页表项,若命中则只需 1 次内存访问(直接取数据)。
思路分析
多级页表用“时间换空间”。每多一级页表,寻址过程就多一次内存访问。
易错点
容易忘记最后一次访问数据本身的内存访问。
🔄 举一反三
- 若系统采用二级页表且引入了快表,在快表命中的情况下,CPU 取一个数据需要访问几次内存?
- A. 1
- B. 2
- C. 3
- D. 0
查看练习答案与解析
答案:A
解析:快表命中时,直接从 TLB 中获取物理地址,无需访问任何页表,仅需访问 1 次内存(读取数据本身)。
- 设有 16 页的逻辑空间,每页有 2048 字节,它们被映射到 32 块的物理存储区中,那么逻辑地址的有效位是()位
A. 10
B. 12
C. 15
D. 13
查看答案与解析
答案:C
解析:
逻辑地址由页号和页内偏移量两部分组成。
- 计算页号的位数:
- 逻辑空间共有 16 页,表示 $0 \sim 15$ 的页号需要:
$$16 = 2^4 \implies 4 \text{ 位}$$ - 计算页内偏移量的位数:
- 每页有 2048 字节(Page Size),表示页内地址需要:
$$2048 = 2^{11} \implies 11 \text{ 位}$$ - 计算逻辑地址总位数:$$\text{逻辑地址位数} = \text{页号位数} + \text{页内偏移量位数} = 4 + 11 = 15 \text{ 位}$$
- 注意:物理存储区有 32 块(对应物理地址位数),这与逻辑地址的有效位数无关。 故选 C。
难度: ⭐⭐
考点: #分页管理 #逻辑地址结构
💡 学习锦囊
📖 相关公式与知识点:
- 逻辑地址结构:页号 | 页内偏移。
- 物理地址结构:块号 | 页内偏移。
思路分析
分别求 out 页号占用的位数和页内偏移占用的位数,相加即为总位数。
易错点
容易把物理块数(32 块)的信息强行加进逻辑地址的计算中。
🔄 举一反三
- 某计算机逻辑地址空间为 64KB,页大小为 2KB,则其逻辑地址中页号占( )位。
- A. 5
- B. 6
- C. 11
- D. 16
查看练习答案与解析
答案:A
解析:页数 $= 64\text{KB} / 2\text{KB} = 32$ 页。$32 = 2^5$,故页号占 5 位。
- 以下几种内存管理方式中,会产生外部碎片的是()。
A. 固定分区方式
B. 可变分区方式
C. 分页存储管理方式
D. 段页式存储管理方式
查看答案与解析
答案:B
解析:
- A 选项:固定分区将内存划分为固定大小的区域,会导致分配区域内未被利用的内部碎片。
- B 选项:可变分区(动态分区)根据进程需要动态分配内存,随着进程的换入换出,会在已分配区域之间留下许多难以利用的小空白区域,即外部碎片。
- C、D 选项:分页和段页式将内存离散分配到物理块中,解决了外部碎片问题,但最后一页可能无法填满,存在极小的内部碎片。 故选 B。
难度: ⭐
考点: #内存碎片 #分区管理
💡 学习锦囊
📖 相关公式与知识点:
- 内部碎片:已分配给进程但未被使用的内存。
- 外部碎片:太小而无法分配给任何进程的零碎空闲内存。
思路分析
区分内外:分给进程用不掉的是“内”;夹在进程中间没人能用的是“外”。
易错点
混淆内部碎片和外部碎片的定义。
🔄 举一反三
- 解决外部碎片问题通常采用的技术是( )。
- 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 软件层次(从上到下):
- 用户层 I/O 软件(如库函数)
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
- 硬件
思路分析
理解“分层”的思想,越底层的越接近硬件,越往上越抽象、越独立于硬件。
易错点
误以为设备驱动程序是最底层,忽略了中断处理程序。
🔄 举一反三
- 在 I/O 软件层次中,执行逻辑设备名到物理设备名转换的层次是( )。
- A. 用户层 I/O
- B. 设备独立性软件
- C. 设备驱动程序
- D. 中断处理程序
查看练习答案与解析
答案:B
解析:设备独立性软件负责屏蔽硬件差异,提供统一接口,并完成逻辑设备到物理设备的映射。
- 完整路径法访问文件是要从()开始按目录访问某个文件。
A.当前目录
B.用户主目录
C. 根目录
D.父目录
查看答案与解析
答案:C
解析:
- 绝对路径(完整路径):从根目录(
/)开始的路径。它是唯一的,不依赖于当前工作目录。 - 相对路径:从当前工作目录开始的路径。 故选 C。
难度: ⭐
考点: #文件目录 #绝对路径 #相对路径
💡 学习锦囊
📖 相关公式与知识点:
- 绝对路径示例:
/home/user/docs/file.txt。 - 相对路径示例:
../docs/file.txt。
思路分析
“完整”即意味着从最顶层的源头(根目录)开始,无视当前所处位置。
易错点
混淆完整路径(绝对路径)与相对路径的起点。
🔄 举一反三
- 若当前目录为
/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。 - A.
- 设基址寄存器的内容为 2000, 执行指令 “LOAD A, 500” 时, 操作数的地址是 ( )。
A.1500
B.2000
C.2500
D.3000
查看答案与解析
答案:C
解析:
本题考查基于基址寄存器的地址转换(动态重定位)。
- 基址寄存器(Base Register)存放的是程序在内存中的起始物理地址。
- 指令中的地址
500是逻辑地址(或相对地址)。 - 实际访问的物理地址计算公式为:
故选 C。
难度: ⭐
考点: #地址转换 #基址寻址 #动态重定位
💡 学习锦囊
📖 相关公式与知识点:
- 物理地址 = 逻辑地址 + 重定位寄存器值。
- 界限寄存器:用于越界检查,确保逻辑地址 $<$ 界限值。
思路分析
牢记动态重定位的核心公式:物理地址 = 基址 + 逻辑地址。
易错点
混淆基址和逻辑地址的关系,或者误进行减法运算。
🔄 举一反三
- 设重定位寄存器内容为 3000,界限寄存器内容为 1000。当 CPU 访问逻辑地址 1500 时,会发生( )。
- A. 正常访问物理地址 4500
- B. 正常访问物理地址 3000
- C. 产生越界中断
- D. 产生越界异常
查看练习答案与解析
答案:C
解析:逻辑地址 $1500 > \text{界限值 } 1000$,触发越界异常。
- 下列关于链接的描述,错误的是()
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。
🔄 举一反三
- 删除一个文件的硬链接后,该文件的内容( )。
- A. 立即被删除
- B. 仅当文件的链接计数归零时才被真正删除
- C. 绝对不会被删除
- D. 变为不可读
查看练习答案与解析
答案:B
解析:硬链接删除只是将 Inode 的links计数减 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)。
易错点
混淆不同操作系统的默认文件系统。
🔄 举一反三
- 在 Linux 中,负责屏蔽底层不同文件系统差异,向用户提供统一系统调用接口的是( )。
- A. FAT
- B. VFS
- C. Ext4
- D. FCB
查看练习答案与解析
答案:B
解析:Virtual File System (VFS) 充当了抽象层。
- 某文件系统采用位示图法管理外存储空间,每个磁盘块 4KB,已知一块磁盘容量为 1TB,则表示该磁盘所需的位示图需要占用()的内存空间。
A.16MB
B. 32MB
C. 64MB
D. 128MB
查看答案与解析
答案:B
解析:
本题考查位示图(Bitmap)空间大小的计算。
- 计算磁盘块的总数:
- 磁盘容量 $= 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{ 块}$$ - 计算位示图所需的总位数:
- 位示图用 1 位(bit)表示 1 个物理块的状态。
$$\text{总位数} = 2^{28} \text{ bit}$$ - 转换为字节和 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。
🔄 举一反三
- 设某文件系统物理块大小为 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}$。
- 在下面的 I/O 控制方式中,需要 CPU 干预最少的方式是()。
A. 程序 I/O 方式;
B. 中断驱动 I/O 控制方式;
C. 直接存储器访问 DMA 控制方式;
D. I/O 通道控制方式
查看答案与解析
答案:D
解析:
I/O 控制方式的演进过程(CPU 干预程度从高到低):
- 程序 I/O 方式:CPU 轮询,干预最多。
- 中断驱动方式:以字节为单位,每完成一个字节传输触发一次中断。
- DMA 方式:以数据块为单位,仅在块传输开始和结束时需要 CPU 干预。
- 通道控制方式:通道有自己的指令和“通道程序”,可以控制多台设备与内存进行成批数据交换,CPU 仅在启动和结束时发送命令,干预最少。 故选 D。
难度: ⭐
考点: #IO控制方式 #通道控制
💡 学习锦囊
📖 相关公式与知识点:
- DMA 与 通道 的区别:DMA 只能控制一台设备的数据传输;通道可以控制一组设备,且具有更强的逻辑处理能力。
思路分析
从历史发展来看,计算机体系结构的设计目标之一就是“解放 CPU”,让 CPU 专注于计算。
易错点
混淆 DMA 和通道的作用范围。
🔄 举一反三
- DMA 方式中,数据传输的基本单位是( )。
- A. 字节
- B. 字
- C. 数据块
- D. 文件
查看练习答案与解析
答案:C
解析:DMA 方式是在内存和外设之间直接进行“成块”的数据交换。
- 以下关于通道的说法错误的是( )。
A. 通道是用来控制外部设备与主存之间进行成批数据传输的部件;
B. 通道是一种特殊的处理机;
C. 通道有自己的指令集, 但指令类型单一, 主要局限于与 I/O 操作有关的指令。
D. 通道有自己的内存, 用以存放通道要执行的程序。
查看答案与解析
答案:D
解析:
- A 选项:通道的主要功能是实现外设与内存之间的成批数据交换。正确。
- B 选项:通道被称为“I/O 处理机”,具有处理简单指令的能力。正确。
- C 选项:通道指令(CCW)类型单一,专门用于控制 I/O 操作。正确。
- D 选项:通道通常没有自己独立的内存,通道要执行的通道程序是存放在**主计算机的内存(主存)**中的。错误。 故选 D。
难度: ⭐⭐
考点: #通道控制 #通道程序
💡 学习锦囊
📖 相关公式与知识点:
- 通道寻址:CPU 通过“启动 I/O”指令指定通道,通道从内存中读取通道命令字(CCW)并执行。
思路分析
容易误认为处理机就必须自带内存。很多协处理器或通道都是共享主存的。
易错点
误以为通道自带独立内存。
🔄 举一反三
- 通道程序是由( )编写的。
- A. 用户程序员
- B. 通道硬件自动生成
- C. 操作系统
- D. 编译程序
查看练习答案与解析
答案:C
解析:操作系统内核的 I/O 管理模块根据用户的请求动态生成通道程序并放入主存。
- 以下关于缓冲的说法,错误的是( )。
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 技术的存储介质。
🔄 举一反三
- 在单缓冲区中,设从磁盘读入一个缓冲区的时间 $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$。
- 对打印机进行 I/O 控制时,通常采用( )方式。
A.程序直接控制;
B.中断驱动;
C.DMA;
D. 通道
查看答案与解析
答案:B
解析:
- 打印机属于低速的字符设备。
- 程序直接控制(轮询)会浪费大量 CPU 时间,不适用。
- DMA 适用于高速的块设备(如磁盘),它要求数据传输是连续的,打印机不满足。
- 通道 成本高,通常用于连接大量复杂外设的大型机系统。
- 中断驱动方式 在打印机输出完一个字符后触发中断,请求 CPU 发送下一个字符,既不浪费 CPU 资源,又适合字符设备的特点。 故选 B。
难度: ⭐
考点: #IO控制方式 #设备分类
💡 学习锦囊
📖 相关公式与知识点:
- 块设备:以数据块为单位,如磁盘。常配合 DMA。
- 字符设备:以字节为单位,如键盘、打印机。常配合中断。
思路分析
不要盲目选择最先进的“通道”或“DMA”,要根据设备的物理特性(速度、传输单位)进行匹配。
易错点
误选 DMA 方式,忽略了打印机是字符设备。
🔄 举一反三
- 磁盘设备与内存之间的数据传输,最适合采用的 I/O 控制方式是( )。
- A. 程序直接控制
- B. 中断驱动
- C. DMA
- D. 通道
查看练习答案与解析
答案:C
解析:磁盘是高速块设备,最经典的匹配方式是 DMA。
- 为支持 CD-ROM 中视频文件的快速随机播放, 播放性能最好的文件数据块组织方式是 ( )。
A.连续结构
B.链式结构
C.单级索引结构
D.多级索引结构
查看答案与解析
答案:A
解析:
- 连续结构(顺序分配):文件在磁盘上占用一组连续的物理块。其随机访问速度最快,只需计算偏移量即可直接定位。
- 链式结构:必须顺着指针查找,随机访问性能极差。
- 索引结构:需要先读取索引块,增加了寻道和读取次数。 由于 CD-ROM 是只读介质,不需要考虑文件的扩充和碎片整理问题,连续分配的缺点(外部碎片、不易扩展)在只读介质上完全不存在,因此连续结构能发挥出最佳的读取性能。 故选 A。
难度: ⭐⭐
考点: #文件物理结构 #连续分配 #CD-ROM
💡 学习锦囊
📖 相关公式与知识点:
- 连续分配:支持顺序和随机访问。
- 显式链接(FAT):解决了文件动态增长问题。
- 索引分配:支持大文件,利于随机访问,但索引块有额外开销。
思路分析
题目强调了两个关键点:“只读(CD-ROM)”和“快速随机播放”。连续分配在只读场景下是无可挑剔的完美选择。
易错点
误选索引结构,忽略了 CD-ROM 只读的特性。
🔄 举一反三
- 链式存储结构(隐式链接)的主要缺点是( )。
- 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 库的桥梁作用。
🔄 举一反三
- 用户程序在( )态下执行系统调用指令。
- 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)同步与互斥关系分析:
- 互斥关系:
- 进出仓库互斥:一次只能一个人进入仓库(设互斥信号量
mutex_warehouse)。 - 推车使用互斥:采购员和销售员在搬运 A 商品时均需使用推车(设互斥信号量
mutex_cart)。
- 进出仓库互斥:一次只能一个人进入仓库(设互斥信号量
- 同步关系:
- 空间限制(非满):仓库最多容纳 200 件 A,1000 件 B(设资源信号量
empty_A,empty_B)。 - 存量限制(非空):销售员取货的前提是仓库有货(设资源信号量
full_A,full_B)。
- 空间限制(非满):仓库最多容纳 200 件 A,1000 件 B(设资源信号量
(2)信号量机制实现:
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);
打包销售;
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
难度: ⭐⭐⭐
考点: #进程同步与互斥 #信号量机制 #生产者消费者模型
💡 学习锦囊
📖 相关公式与知识点:
- $P(\text{空位}) \to P(\text{互斥}) \to \text{临界区} \to V(\text{互斥}) \to V(\text{满位})$。
- 死锁预防:多个进程请求多个锁时,必须保证请求顺序一致。
思路分析
区分哪些操作需要工具(推车),哪些操作受制于空间(空闲信号量)。
易错点
把 $P(\text{互斥})$ 放在 $P(\text{同步})$ 之前,导致死锁。
🔄 举一反三
- 在生产者-消费者问题中,若缓冲区大小为 1,是否还需要设置互斥信号量
mutex?- A. 需要
- B. 不需要
- C. 可有可无
- D. 取决于进程数
查看练习答案与解析
答案:B
解析:当容量为 1 时,empty和full信号量本身即可保证互斥访问。
3.(10分)设一系统在某时刻的资源分配情况如下表所示。
| 已分配资源 | 最大请求资源 | 剩余资源 | |||||||
| A | B | C | A | B | C | A | B | C | |
| P0 | 2 | 1 | 2 | 5 | 5 | 9 | 2 | 3 | 3 |
| P1 | 4 | 0 | 2 | 5 | 4 | 6 | |||
| P2 | 4 | 0 | 5 | 4 | 0 | 13 | |||
| P3 | 2 | 0 | 4 | 4 | 2 | 5 | |||
| P4 | 3 | 1 | 4 | M | 2 | 4 | |||
(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)。
- 进行安全性检查:
- Available (2, 2, 2) 满足 P3,P3 释放后 Available 变为 (4, 2, 6)。
- Available (4, 2, 6) 满足 P4 (Need为 4, 1, 0),P4 释放后 Available 变为 (7, 3, 10)。
- 此时可依次满足 P0, P1, P2。
- 存在安全序列 $P_3 \to P_4 \to P_0 \to P_1 \to P_2$,故可分配。
难度: ⭐⭐⭐
考点: #银行家算法 #安全性检查 #最大资源请求
💡 学习锦囊
📖 相关公式与知识点:
- $\text{Need} = \text{Max} - \text{Allocation}$。
- 安全状态判断:存在至少一个安全序列。
思路分析
逆向思维:为了让死局盘活,必须把唯一能跑的进程跑完以获取新资源。
易错点
计算 Need 时减法出错,或者遗漏了释放已分配资源这一步。
🔄 举一反三
- 银行家算法中,若系统处于不安全状态,则( )。
- 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中 | |
| 0 | 3 | 1 | 是 | |
| 1 | 8 | 1 | 是 | |
| 2 | — | 0 | 否 | |
| 3 | — | 0 | 否 | |
| 4 | 6 | 1 | 是 | |
| 5 | — | 0 | 否 | |
| 6 | — | 0 | 否 | |
| 7 | — | 0 | 否 | |
若一次内存访问时间为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}$。
- 访问流程与耗时:
- 访问 TLB(未命中):$10\text{ns}$。
- 访问二级页表(缺页中断):$2 \times 100\text{ns} = 200\text{ns}$。
- 缺页中断处理:$50\text{ms} = 50,000,000\text{ns}$。
- 重新执行指令,访问 TLB(命中):$10\text{ns}$。
- 访问内存读取数据:$100\text{ns}$。
- 总耗时:$10 + 200 + 50,000,000 + 10 + 100 = \mathbf{50,000,320\text{ ns}}$。
难度: ⭐⭐⭐⭐
考点: #两级页表 #LRU算法 #缺页中断耗时
💡 学习锦囊
📖 相关公式与知识点:
- $\text{物理地址} = \text{物理块号} \times \text{页大小} + \text{页内偏移}$。
- 缺页耗时包含:中断捕获 + 调页入内存 + 更新页表。
思路分析
注意 51A6H 中页号的提取,它是两级结构的高位组合。
易错点
计算耗时时容易漏掉中断处理后“重新访问 TLB + 内存”的步骤。
🔄 举一反三
- 若页表项大小为 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 实际采用):
- 利用
struct page结构体中的flags标志位中的PG_buddy位来表示该页框是否属于伙伴系统中的一个空闲块。 - 在
private字段中存储该空闲块的阶数(Order)。 - 地址计算:设当前回收的块起始页号为 $P$,阶数为 $k$,则其伙伴块的起始页号为 $P \oplus 2^k$。
- 判定:直接通过偏移量找到伙伴块的
struct page,若其PG_buddy为 1 且order等于 $k$,则可判定为空闲,可执行合并。
- 利用
难度: ⭐⭐⭐⭐
考点: #伙伴系统 #内存分配与回收 #页描述符
💡 学习锦囊
📖 相关公式与知识点:
- 伙伴块起始页号公式:$\text{Buddy\_Page} = P \oplus 2^k$。
- 内部碎片 $= 2^k \times \text{页大小} - \text{实际请求大小}$。
思路分析
伙伴系统的核心是“对半拆分”与“地址二进制互补合并”。
易错点
回收时必须保证两块大小相同且地址连续才能算作伙伴。
🔄 举一反三
- 在伙伴系统中,某空闲块大小为 16 页,起始页号为 32,其伙伴块的起始页号为( )。
- A. 16
- B. 48
- C. 0
- D. 64
查看练习答案与解析
答案:B
解析:$32 \oplus 16 = 32 \oplus 2^4 = 48$。
- (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$。
思路分析
读文件内容前,必须先通过多级索引定位到物理块号。
易错点
容易遗漏读取“索引块”本身的磁盘访问次数。
🔄 举一反三
- 某文件的物理块号依次存在索引表中,访问文件的第 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 表已读入内存,访问文件的物理块无需额外读取磁盘查找链表。
- 访问顺序:
- 读取目录项(块号 100):磁道 $\lfloor 100 / 8 \rfloor = 12$。
- 读取文件内容(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)二级索引分配下的寻道距离:
- 访问流程与磁道:
- 读取目录项(块号 100):磁道 $\lfloor 100 / 8 \rfloor = 12$。
- 读取一级索引(块号 1000):磁道 $\lfloor 1000 / 8 \rfloor = 125$。
- 读取二级索引(块号 1500):磁道 $\lfloor 1500 / 8 \rfloor = 187$。
- 依次读取文件各数据块(已推导磁道: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 做起点减法。
🔄 举一反三
- 某磁盘有 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$。