Appearance
《操作系统》第一学期期末试卷A (精选07)
一、选择题(每题 1分,共25分)
- 在中断发生后,进入中断处理的程序属于( )
- A.用户程序
- B. 可能是应用程序,也可能是操作系统程序
- C.操作系统程序
- D. 既不是应用程序,也不是操作系统程序
查看答案与解析
答案:C
解析: 中断处理程序是操作系统核心的一部分,运行在核心态(管态),属于操作系统程序。当中断发生时,处理器从用户态切换到核心态,并执行相应的操作系统中断处理程序。
难度: ⭐
考点: #中断处理 #操作系统内核 #核心态
💡 学习锦囊
📖 相关公式与知识点:
- 中断是进入核心态的唯一途径。
- 内核态可以执行特权指令,访问所有资源。
思路分析
考查中断处理程序的归属。中断是进入核心态的唯一途径,处理中断的必须是操作系统。
易错点
容易误选 B,认为中断处理可能包含用户代码。
🔄 举一反三
- 当 CPU 执行特权指令时,若发现当前处于用户态,则会引发( )
- A. 硬件故障中断
- B. 外部中断
- C. 访管中断
- D. 异常(或内部中断)
查看练习答案与解析
答案:D
解析:在用户态执行特权指令属于“非法指令”异常,由 CPU 内部触发。
- 以下( )指令是非特权指令。
- A.启动 I/O
- B. 设置中断屏蔽
- C. 传送 PSW
- D. 访管指令
查看答案与解析
答案:D
解析: 访管指令(或称陷阱指令、Trap)是用户程序请求操作系统服务(系统调用)的手段,必须在用户态下执行,因此是非特权指令。执行后会触发软中断,使 CPU 进入核心态。A、B、C 均涉及系统核心状态的修改,属于特权指令。
难度: ⭐
考点: #特权指令 #非特权指令 #访管指令
💡 学习锦囊
📖 相关公式与知识点:
- 特权指令:仅在核心态下允许执行的指令。
- 非特权指令:在核心态和用户态下均可执行的指令。
思路分析
区分特权与非特权的关键在于该指令是否会危及系统安全。
🔄 举一反三
- 下列指令中,只能在核心态下执行的是( )
- A. 读时钟指令
- B. 取数指令
- C. 广义指令(系统调用)
- D. 置时钟指令
查看练习答案与解析
答案:D
解析:修改时钟(置时钟)会影响系统调度,必须是特权指令。读时钟可以是非特权。
- 有关原语的说法中,( )是正确的。
- A. 原语是不可中断执行的用户过程
- B. 原语是不可中断执行的操作系统过程
- C. 原语是可中断执行的用户过程
- D. 原语是可中断执行的操作系统过程
查看答案与解析
答案:B
解析: 原语(Primitive)是由若干条机器指令构成的程序段,用以完成特定的功能。它的执行是“原子”的,即不可中断。且原语属于操作系统内核的一部分。
难度: ⭐
考点: #原语 #原子操作 #操作系统内核
💡 学习锦囊
📖 相关公式与知识点:
- 原语的核心特征:原子性、内核属性。
思路分析
牢记原语的两个核心特征:原子性(不可中断)和内核属性。
🔄 举一反三
- 实现原语操作的途径通常是( )
- A. 关中断
- B. 开中断
- C. 进程调度
- D. 信号量机制
查看练习答案与解析
答案:A
解析:在单处理机系统中,通过屏蔽中断(关中断)可以防止进程切换,从而保证代码段的原子性执行。
- Linux 用于启动系统所需加载的内核程序位于( )
- A. /
- B. /lib/modules/2.4.20_8/kernel
- C. /boot
- D. /proc
查看答案与解析
答案:C
解析:/boot 目录存放的是启动 Linux 时使用的一些核心文件,包括引导加载程序(如 GRUB)和内核镜像(如 vmlinuz)。
难度: ⭐
考点: #Linux目录结构 #系统启动 #内核文件
💡 学习锦囊
📖 相关公式与知识点:
/etc:配置文件。/bin:基本命令。/dev:设备文件。
思路分析
了解常见 Linux 目录的作用。
🔄 举一反三
- 在 Linux 文件系统中,存放用户配置文件的目录是( )
- A. /etc
- B. /home
- C. /var
- D. /usr
查看练习答案与解析
答案:A
解析:/etc存放系统管理和配置文件。
- 下列选项中,不能改善磁盘 I/O 性能的是( )
- A.重排I/O 请求次序
- B. 在一个磁盘设置多个分区
- C. 预读和滞后写
- D. 优化文件物理排布
查看答案与解析
答案:B
解析: 磁盘分区主要是为了管理方便和隔离数据,并不能提高磁盘物理读写性能,甚至可能因为跨分区寻道而降低性能。A(调度算法)、C(缓存技术)、D(减少寻道)均能有效提升性能。
难度: ⭐⭐
考点: #磁盘I/O性能 #磁盘调度 #磁盘分区
💡 学习锦囊
📖 相关公式与知识点:
- 磁盘访问时间 = 寻道时间 + 旋转延迟 + 传输时间。
思路分析
分析各选项对寻道时间和传输时间的影响。
🔄 举一反三
- 为了提高磁盘存取速度,通常可以采用( )
- A. 增大磁盘容量
- B. 磁盘阵列(RAID)
- C. 减少盘块大小
- D. 增加文件数量
查看练习答案与解析
答案:B
解析:RAID 通过并行读写显著提升 I/O 速度。
- 为了防止用户共享文件时造成破坏,可以采用( )
- A.对文件设置口令
- B. 把文件译成密码
- C. 对文件加锁
- D. 对文件的访问权限进行控制
查看答案与解析
答案:D
解析: 共享文件时的破坏通常是指越权访问或误修改。对文件的访问权限进行控制(如读、写、执行权限)是防止破坏、实现安全共享的有效手段。A、B 主要是保密手段,C 主要是并发控制手段。
难度: ⭐
考点: #文件共享 #访问控制 #文件安全
💡 学习锦囊
📖 相关公式与知识点:
- 访问控制列表 (ACL):为每个文件关联一个允许访问的用户及其权限列表。
思路分析
区分“保密”与“防破坏(权限控制)”。
🔄 举一反三
- 在 UNIX 系统中,文件的权限表示为
rwxr-xr-x,则文件所有者的权限是( )- A. 读、写、执行
- B. 读、执行
- C. 读、写
- D. 无权限
查看练习答案与解析
答案:A
解析:前三位rwx代表文件所有者的权限。
- 若采用位示图(100行,32列)表示磁盘块的使用状态。当分配一个盘块号 133号时,其在位示图中的行、列数位( )。(注:行号:0-99,列为 0-31,首盘块号为 0)
- A. 4 和 5
- B. 5 和 3
- C.4 和 3
- D.5 和 4
查看答案与解析
答案:A
解析: 每行 32 列,即每行表示 32 个盘块。 盘块号 133 对应的行号 = $\lfloor 133 \div 32 \rfloor = 4$(从 0 开始)。 对应的列号 = $133 \bmod 32 = 5$(从 0 开始)。 所以行、列号分别为 4 和 5。
难度: ⭐⭐
考点: #位示图 #磁盘空间管理
💡 学习锦囊
📖 相关公式与知识点:
- $行号 = \lfloor 盘块号 \div 列数 \rfloor$
- $列号 = 盘块号 \bmod 列数$
思路分析
代入公式计算,注意从 0 开始编号。
🔄 举一反三
- 若位示图每行 16 位,盘块号从 1 开始,则第 2 行第 3 位对应的盘块号是( )
- A. 18
- B. 19
- C. 35
- D. 36
查看练习答案与解析
答案:B
解析:盘块号 = $(行号-1) \times 列数 + 列号 = (2-1) \times 16 + 3 = 19$。
- 某文件系统的目录项由文件名和索引结点好构成。若每个目录项长度为 64字节,其中4 字节存放索引结点号,60 字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为( )个。
- A.$2^{26}$
- B. $2^{32}$
- C. $2^{60}$
- D. $2^{64}$
查看答案与解析
答案:B
解析: 文件的上限取决于索引结点号的范围。索引结点号占用 4 字节,即 32 位,能够表示的无符号整数范围是 $0 \sim 2^{32}-1$,因此该文件系统最多能支持 $2^{32}$ 个文件。文件名长度虽有限制,但不是瓶颈。
难度: ⭐⭐
考点: #目录项 #索引结点 #文件数量上限
💡 学习锦囊
📖 相关公式与知识点:
- $最大文件数 = 2^{索引结点号位数}$
思路分析
确定决定文件数量的关键因素(索引结点数)。
🔄 举一反三
- 若每个索引结点占用 128 字节,外存盘块大小为 4KB,则一个盘块最多可存放( )个索引结点。
- A. 16
- B. 32
- C. 64
- D. 128
查看练习答案与解析
答案:B
解析:$4\text{KB} / 128\text{B} = 4096 / 128 = 32$。
- 以下几种内存管理方式中,只会形成外部碎片的管理方式是( )。
- A. 单一连续分配方式
- B. 固定分区分配方式
- C. 段式存储管理方式
- D. 段页式存储管理方式
查看答案与解析
答案:C
解析:
- A、B 会形成内部碎片(分配给进程的内存中未被利用的部分)。
- C(段式)按段分配,段内连续,但段与段之间可能留下无法利用的空闲区,即外部碎片。
- D(段页式)按页分配,最后一页可能不满,存在内部碎片。
难度: ⭐
考点: #内存碎片 #段式存储 #分页存储
💡 学习锦囊
📖 相关公式与知识点:
- 内部碎片:分配给进程但未使用的内存。
- 外部碎片:太小而无法分配给任何进程的空闲内存块。
思路分析
区分内部碎片 and 外部碎片。
🔄 举一反三
- 在页式存储管理中,为了消除内部碎片,可以采取的措施是( )
- A. 减小页面大小
- B. 增大页面大小
- C. 采用段式管理
- D. 无法消除,只能减少
查看练习答案与解析
答案:D
解析:页式管理的内部碎片位于最后一页,无法完全消除,但可以通过减小页面大小来减少。
- 下面关于内存保护的界限寄存器方法的描述中,正确的是( )
- A. 界限寄存器方法通常用在内存离散分配方式的保护机制中
- B. 在上下界寄存器方法中,使用逻辑地址进行越界检查
- C. 在基址 and 限长寄存器方法中,使用逻辑地址进行越界检查
- D. 以上说法都不对
查看答案与解析
答案:C
解析:
- A 错,界限寄存器常用于连续分配。
- B 错,上下界寄存器比较的是物理地址(判断物理地址是否在 [下界, 上界] 之间)。
- C 对,基址和限长寄存器方法中,基址存放进程起始物理地址,限长存放进程逻辑地址空间的最大长度。CPU 执行时,首先检查逻辑地址是否超过限长,若未越界,再与基址相加得到物理地址。
难度: ⭐⭐
考点: #内存保护 #界限寄存器 #地址转换
💡 学习锦囊
📖 相关公式与知识点:
- $物理地址 = 逻辑地址 + 基址$ (要求 $逻辑地址 < 限长$)
思路分析
理解两种界限寄存器的工作原理。
🔄 举一反三
- 在基址和限长寄存器保护机制下,若进程逻辑地址为 1000,限长为 800,基址为 2000,则( )
- A. 产生越界中断
- B. 转换后的物理地址为 3000
- C. 转换后的物理地址为 2000
- D. 正常执行
查看练习答案与解析
答案:A
解析:$逻辑地址(1000) \geq 限长(800)$,越界。
- 在支持多线程的系统中,隶属于同一个进程的多个线程不能共享的是( )。
- A. 进程的代码段
- B. 进程的数据段
- C. 进程所打开的文件
- D. 保存函数参数、返回地址等信息的堆栈
查看答案与解析
答案:D
解析: 线程共享进程的资源(代码段、数据段、打开的文件等),但每个线程都有自己独立的运行栈(保存函数调用、局部变量、返回地址等)和程序计数器(PC),以保证线程的独立执行。
难度: ⭐
考点: #线程共享 #线程私有 #进程与线程
💡 学习锦囊
📖 相关公式与知识点:
- 线程共享:地址空间、全局变量、打开的文件、子进程、信号量等。
- 线程私有:栈、寄存器状态(包括 PC)、局部变量、线程 ID。
思路分析
区分线程的共享资源与私有资源。
🔄 举一反三
- 同一个进程中的线程独立拥有( )
- A. 进程 ID
- B. CPU 寄存器状态
- C. 堆内存
- D. 信号处理句柄
查看练习答案与解析
答案:B
解析:寄存器状态(包括 PC and SP)是线程私有的。
- 有一个 100 行 $\times 200$ 列的矩阵,在一个虚拟存储系统中,采用 LRU 算法,系统分给该进程 5 个页面来存储数据(不包含程序),设每页存放 200 个整数,数组是按行存放的,下面程序要对数组进行初始化,则缺页次数为( )次。
for (i = 0; i <= 99; i++) {
for (j = 0; j <= 199; j++) {
A[i][j] = i + j;
}
}2
3
4
5
- A. 100
- B. 200
- C. 300
- D. 20000
查看答案与解析
答案:A
解析:
- 数据分布:数组大小为 $100 \times 200$ 个整数,每页存放 200 个整数。因为数组按行存放,所以每一行(200 个元素)恰好占用 1 个页面。整个数组共占用 100 个页面。
- 访问模式:程序采用行优先遍历(外层
i,内层j)。 - 缺页分析:
- 访问
A[0][0]时,产生第 1 次缺页,加载第 0 行页面。遍历该行后续元素时不缺页。 - 访问
A[1][0]时,产生第 2 次缺页,加载第 1 行页面... - 依此类推,遍历 100 行,共产生 100 次缺页中断。
- 尽管物理页框只有 5 个,但由于是严格的顺序访问,每次访问新行时,旧行已不再需要,因此不会发生“反复置换”的恶性缺页。
- 访问
难度: ⭐⭐⭐
考点: #缺页中断 #局部性原理 #数组存储 #虚拟存储
💡 学习锦囊
📖 相关公式与知识点:
- 空间局部性:如果一个存储单元被访问,其相邻的单元也可能很快被访问(如行优先遍历)。
思路分析
分析数据分布与访问模式的匹配度。
🔄 举一反三
- 若上题中程序改为按列优先遍历(
for(j...) for(i...)),则缺页次数为( )- A. 100
- B. 200
- C. 20000
- D. 10000
查看练习答案与解析
答案:C
解析:按列遍历时,每次访问A[i][j]都会跨越一行(即跨越一页)。前 5 次访问占用 5 个页框。第 6 次访问(i=5)产生缺页,置换旧页。总缺页次数为 $100 \times 200 = 20000$ 次。
- 在一个请求分页存储管理系统中,某时刻测得系统各相关设备的利用率为:CPU 为 $12\%$ ,磁盘交换区为 $99.5\%$ ,其他 I/O 设备为 $5\%$ ,下面( )措施可以更有效地改进 CPU 的利用率?
- A. 增大磁盘交换区的容量
- B. 减少内存中程序道数
- C. 使用更快速的 CPU
- D. 增加内存中程序道数
查看答案与解析
答案:B
解析: 磁盘交换区利用率极高($99.5\%$),而 CPU 利用率极低($12\%$),这表明系统发生了抖动(Thrashing)现象——页面频繁在内存和外存之间换入换出,导致 CPU 一直在等待 I/O。解决抖动最直接有效的办法是减少多道程序度(程序道数),让留存的进程能分到足够的物理页,从而减少缺页率。
难度: ⭐⭐
考点: #抖动 #多道程序度 #请求分页
💡 学习锦囊
📖 相关公式与知识点:
- 抖动的原因:分配给进程的物理块不足。
思路分析
识别“抖动”现象并选择对策。
🔄 举一反三
- 为了防止系统发生“抖动”,可以采用( )
- A. 工作集模型
- B. 先来先服务算法
- C. 增加外存容量
- D. 提高 CPU 频率
查看练习答案与解析
答案:A
解析:工作集模型通过跟踪进程在一段时间内访问的页面集合,确保只在内存中保留工作集,从而防止抖动。
- 在如下几种类型的系统中,( )采用忙等待 I/O 是合适的。
Ⅰ. 专门用来控制单 I/O 设备的系统 Ⅱ. 单用户单任务操作系统 Ⅲ. 作为一个负载很重的网络服务器的工作站
- A. Ⅰ
- B. Ⅱ,Ⅲ
- C. Ⅰ,Ⅱ
- D. Ⅰ,Ⅱ,Ⅲ
查看答案与解析
答案:C
解析:
- 忙等待 I/O(轮询)会一直占用 CPU 资源进行查询。
- Ⅰ(控制单设备)和 Ⅱ(单任务)中,CPU 没有其他并发任务可做,忙等待不会影响其他进程,且能保证高实时性。
- Ⅲ(负载重的服务器)中,CPU 资源宝贵,忙等待会浪费 CPU,导致系统性能急剧下降。
- 因此,Ⅰ 和 Ⅱ 合适。
难度: ⭐⭐
考点: #忙等待I/O #轮询 #I/O控制方式
💡 学习锦囊
📖 相关公式与知识点:
- I/O 控制方式演进:忙等待 -> 中断 -> DMA -> 通道。
思路分析
评估忙等待对系统整体效率的影响。
🔄 举一反三
- 中断驱动 I/O 方式与轮询方式相比,主要优点是( )
- A. 提高数据传输速度
- B. 减轻 CPU 负担
- C. 简化硬件设计
- D. 减少内存占用
查看练习答案与解析
答案:B
解析:中断方式下,CPU 在设备准备数据时可以做其他事,大大减轻了负担。
- 与 Linux 系统的整体式内核结构相比,采用微内核结构的鸿蒙操作系统具有的特征是( )。
Ⅰ. 较高的效率; Ⅱ. 较高的可靠性; Ⅲ. 更好地支持分布式处理; Ⅳ. 较强的可扩展性
- A. Ⅱ、Ⅳ
- B. Ⅰ、Ⅱ、Ⅲ
- C. Ⅰ、Ⅲ、Ⅳ
- D. Ⅱ、Ⅲ、Ⅳ
查看答案与解析
答案:D
解析:
- 微内核结构将许多传统的内核服务(如文件系统、网络等)移出内核,放在用户态执行。
- 优点:高可靠性(单个服务崩溃不影响内核)、高扩展性(添加服务容易)、支持分布式(服务间通过消息传递解耦)。
- 缺点:效率较低(由于频繁的用户态与核心态切换、进程间通信开销)。
- 因此,Ⅱ、Ⅲ、Ⅳ 正确,Ⅰ 错误。
难度: ⭐⭐
考点: #微内核 #整体式内核 #鸿蒙OS
💡 学习锦囊
📖 相关公式与知识点:
- 整体式内核(宏内核):所有服务运行在内核态,效率高但可靠性低。
思路分析
对比微内核与单内核的优缺点。
🔄 举一反三
- 微内核架构的核心功能通常只包含( )
- A. 文件管理
- B. 进程管理、低级存储管理和通信机制
- C. 设备驱动
- D. 网络协议栈
查看练习答案与解析
答案:B
解析:微内核只保留最基本、最核心的功能。
- 某文件系统采用位示图管理文件存储空间,文件存储空间大小为 256GB,盘块大小为 4KB,则位示图所占空间大小是( )。
- A. 2MB
- B. 8MB
- C. 64MB
- D. 4KB
查看答案与解析
答案:B
解析:
- 计算盘块总数:$$\text{盘块数} = \frac{\text{存储空间大小}}{\text{盘块大小}} = \frac{256\text{GB}}{4\text{KB}} = \frac{256 \times 2^{30}\text{B}}{4 \times 2^{10}\text{B}} = 64 \times 2^{20} = 64\text{M (个)}跌$$
- 计算位示图大小: 位示图用 1 位(bit)表示 1 个盘块的状态。$$\text{总位数} = 64\text{M bits}$$$$\text{字节数} = \frac{64\text{M bits}}{8} = 8\text{MB}$$
难度: ⭐⭐
考点: #位示图 #磁盘空间计算
💡 学习锦囊
📖 相关公式与知识点:
- $盘块数 = \text{总空间} / \text{块大小}$
- $\text{位示图大小} = \text{盘块数} \div 8$ (单位:字节)
思路分析
先算盘块数,再算位数,最后换算为字节。
🔄 举一反三
- 若文件存储空间为 1TB,盘块大小为 1KB,位示图所占空间大小为( )
- A. 128MB
- B. 1GB
- C. 128KB
- D. 256MB
查看练习答案与解析
答案:A
解析:盘块数 = $1\text{TB} / 1\text{KB} = 2^{40} / 2^{10} = 2^{30}$。大小 = $2^{30}\text{ bits} = 2^{30} / 8\text{ bytes} = 2^{27}\text{ bytes} = 128\text{MB}$。
17.下列事件中,可能导致当前正在执行的线程由执行态转变为就绪态的是( )。
- A. 键盘输入
- B. 缺页异常
- C. 主动出让 CPU
- D. 执行信号量的 wait() 操作
查看答案与解析
答案:C
解析:
- A 错,键盘输入是 I/O 事件,等待 I/O 的线程进入阻塞态。
- B 错,缺页异常需要等待调页,线程进入阻塞态。
- C 对,主动出让 CPU(如
yield())使线程从执行态主动放弃处理器,重新回到就绪队列,状态变为就绪态。 - D 错,
wait()(即 P 操作)若资源不足会导致线程阻塞。
难度: ⭐
考点: #线程状态转换 #就绪态 #执行态 #阻塞态
💡 学习锦囊
📖 相关公式与知识点:
- 执行 -> 阻塞:等待某事件(如 I/O、信号量)。
- 执行 -> 就绪:时间片用完或主动出让。
- 阻塞 -> 就绪:等待的事件已发生。
思路分析
区分导致线程进入“就绪态”与“阻塞态”的不同事件。
🔄 举一反三
- 当正在执行的进程时间片用完时,其状态会转换为( )
- A. 阻塞态
- B. 就绪态
- C. 终止态
- D. 挂起态
查看练习答案与解析
答案:B
解析:时间片用完属于被动出让 CPU,回到就绪态。
- 对于采用虚拟内存管理方式的系统,下列关于进程虚拟地址空间的叙述中,错误的是( )。
- A. 每个进程都有自己独立的虚拟地址空间
- B. C 语言中 malloc( )函数返回的是虚拟地址
- C. 进程对数据段和代码段可以有不同的访问权限
- D. 虚拟地址的大小由主存和硬盘的大小决定
查看答案与解析
答案:D
解析:
- A、B、C 正确。
- D 错误,虚拟地址的大小(即寻址范围)由 CPU 的寻址位数(如 32 位或 64 位)决定,而不是由物理内存或硬盘大小决定。例如,32 位系统的虚拟地址空间恒为 4GB。
难度: ⭐
考点: #虚拟内存 #虚拟地址空间 #寻址范围
💡 学习锦囊
📖 相关公式与知识点:
- $\text{虚拟地址空间大小} = 2^{\text{寻址位数}}$。
思路分析
明确虚拟地址空间的决定因素。
🔄 举一反三
- 在 64 位操作系统中,理论上进程的虚拟地址空间最大可达( )
- A. 4GB
- B. 16EB
- C. 1TB
- D. 由内存条大小决定
查看练习答案与解析
答案:B
解析:$2^{64}\text{ bytes} = 16\text{EB}$。
- 若文件 F 仅被进程 P 打开并访问,则当进程 P 关闭 F 时,下列操作中,文件系统需要完成的是( )。
- A. 删除目录中文件 F的目录项
- B. 释放 F的索引节点所占的内存空间
- C. 释放 F的索引节点所占的外存空间
- D. 将文件磁盘索引节点中的链接计数减 1
查看答案与解析
答案:B
解析:
- 当文件被打开时,其外存索引节点(Inode)会被复制到内存的“打开文件表”中以加快访问速度。
- 当进程关闭文件时,由于 F 仅被 P 打开,此时没有其他进程使用该文件,系统应将其内存索引节点删除,释放其所占的内存空间。
- A 错,关闭文件不删除文件本身。
- C 错,外存索引节点必须保留。
- D 错,链接计数(Hard Link Count)在外存中,只有删除硬链接时才减 1,关闭文件不影响。
难度: ⭐⭐
考点: #文件打开与关闭 #索引节点 #内存Inode
💡 学习锦囊
📖 相关公式与知识点:
- 内存打开文件表:记录当前系统所有被打开文件的状态。
思路分析
区分文件的打开状态(内存)与存储状态(外存)。
🔄 举一反三
- 在 UNIX 文件系统中,执行
rm命令删除一个文件时,主要执行的操作是( )- A. 清空文件内容
- B. 释放外存空间,且链接计数减 1
- C. 删除目录项,且链接计数减 1
- D. 仅关闭文件
查看练习答案与解析
答案:C
解析:rm删除的是目录项,并将外存 Inode 的链接计数减 1。计数为 0 时才释放外存。
- 引入多道程序技术的前提之一是系统具有( )。
- A. 多个 CPU
- B. 多个终端
- C. 中断功能
- D. 分时功能
查看答案与解析
答案:C
解析: 多道程序并发执行的核心在于 CPU 能在不同程序间灵活切换。而这种切换(进程调度)是由时钟中断或其他 I/O 中断触发的。没有中断功能,操作系统无法被动获取控制权,强行剥夺当前运行程序的 CPU,多道程序并发便无法实现。
难度: ⭐
考点: #多道程序技术 #中断机制 #并发执行
💡 学习锦囊
📖 相关公式与知识点:
- 中断是操作系统取得系统控制权的唯一手段。
思路分析
理解多道程序设计背后的硬件支持。
🔄 举一反三
- 多道程序设计带来的主要好处是( )
- A. 提高系统吞吐量和资源利用率
- B. 减少单个作业的周转时间
- C. 保证系统实时性
- D. 简化操作系统设计
查看练习答案与解析
答案:A
解析:多道程序使得 CPU 和 I/O 设备并行工作,提高了效率。
- 在消息传递通信机制中,发送原语 send 要做的工作不包括( )。
- A. 在发送进程的内存空间中设置一个发送区,并填写相关信息
- B. 在系统中申请一个空白消息缓冲区
- C. 将发送区中的信息复制到消息缓冲区中
- D. 将消息缓冲区插入接收进程的消息队列
查看答案与解析
答案:A
解析: 在发送进程的内存空间中设置发送区,并填写相关信息,这属于用户程序(发送进程本身)的准备工作,而不是由 send 原语完成的。send 原语被调用后,负责申请内核缓冲区(B)、复制数据(C)并挂入目标队列(D)。
难度: ⭐⭐
考点: #消息传递 #send原语 #进程通信
💡 学习锦囊
📖 相关公式与知识点:
- 直接通信:send(P, message) -> 发送给进程 P。
- 间接通信:send(A, message) -> 发送给信箱 A。
思路分析
区分原语内部逻辑与用户空间操作。
🔄 举一反三
- 在消息缓冲通信机制中,进程间通信的基本单位是( )
- A. 字节
- B. 消息(报文)
- C. 管道
- D. 信号量
查看练习答案与解析
答案:B
解析:消息缓冲通信机制以消息(报文)为基本传输单位,发送方将消息写入缓冲区,接收方从缓冲区读取消息。
- 进程 P1 和 P2 都包含并发线程,伪代码描述如下:
| //进程P1 int x=0; | //进程P2 int x=0; | ||
| thread1() { int a; a = 1; x += 1; } | thread2() { int a; a = 2; x += 2; } | thread3() { int a; a = x; x += 3; } | thread4() { int b; b = x; x += 4; } |
下列选项中,需要互斥操作的是( )。
- A. $a = 1$ 与 $a = 2$
- B. $a = x$ 与 $b = x$
- C. $x += 1$ 与 $x += 2$
- D. $x += 1$ 与 $x += 3$
查看答案与解析
答案:C
解析:
- 进程资源隔离:操作系统中,不同进程(P1 和 P2)拥有独立的地址空间,彼此不共享全局变量。因此 P1 中的
x与 P2 中的x是两个毫无关系的物理变量。 - 线程资源共享:隶属于同一进程的线程共享该进程的全局变量。
- 分析:
- P1 的
thread1和thread2并发修改 P1 的共享变量x,属于竞态条件,需要互斥(即 C 选项)。 - P1 与 P2 之间不存在共享变量访问,故不需要互斥(D 错)。
- P1 的
难度: ⭐⭐
考点: #互斥 #临界资源 #进程隔离
💡 学习锦囊
📖 相关公式与知识点:
- 临界区:访问临界资源的代码段。
思路分析
识别“进程隔离”特性,进程间不共享全局变量。
🔄 举一反三
- 在多线程编程中,下列哪种资源不需要互斥访问( )
- A. 全局共享队列
- B. 局部变量
- C. 堆上分配的对象
- D. 共享文件句柄
查看练习答案与解析
答案:B
解析:局部变量存储在线程独立的栈中,不共享。
二、 综合题(共 75 分)
- (7分)某文件系统采用一级目录结构,文件的数据一次性写入磁盘,已经写入的文件不可修改,但可以多次创建新文件,请回答以下问题:
(1)在连续、链式、索引三种文件的数据块组织方式中,哪种更合适?说明理由。针对你选择的数据块组织方式中,为定位文件数据块,需要在 FCB 中设计哪些相关描述字段?
(2)为快速找到文件,对于文件的 FCB,是集中存储好,还是与对应的文件数据块连续存储好?说明理由。
查看答案与解析
答案: (1)(4 分):连续分配更合适(2 分)。 理由:因为文件不修改,在磁盘中连续存放时,磁盘寻道时间更短,文件随机访问效率更高。 FCB 字段:需要在 FCB 中加入的字段为 〈起始块号, 块数〉 或 〈起始块号, 结束块号〉(2 分)。
(2)(3 分):集中存储好(1 分)。 理由:目录存放在磁盘上,将 FCB 集中存放,文件目录项中仅保留文件名和指向 FCB 的指针,可以减少目录文件占用的磁盘块数量。在检索文件目录时,读取的磁盘块数量减少了,从而加快目录检索速度(2 分)。
难度: ⭐⭐
考点: #文件系统 #物理结构 #目录管理
💡 学习锦囊
📖 相关公式与知识点:
- 连续分配:优点是访问快,缺点是碎片多、不易扩展。
思路分析
根据“一次写入,不可修改”的静态特性,分析哪种物理结构最优。
🔄 举一反三
- 若文件经常需要被随机修改且大小动态增长,哪种物理结构最不合适?
查看练习答案与解析
答案:连续分配。
解析:连续分配需要连续的空闲空间。文件增长可能导致覆盖邻近文件,或需要整体迁移,产生大量外部碎片。
- (11 分) Linux 系统的 $\mathtt { E x t 2 }$ 文件系统采用混合索引的物理结构,假设磁盘块大小为 4KB,每个文件的索引节点占 64B,有 15 个地址项,其中直接地址 12 个,一级、二级和三级索引地址项各 1 个,每个地址项长度为 4B。请回答以下问题:
(1)该文件系统能支持的最大文件长度是多少?(给出计算表达式即可)
(2)文件系统用 1M($1\text{M}=2^{20}$)个磁盘块集中存放文件索引节点,用 512M 个磁盘块存放文件数据。若一个视频文件的大小为 6000B,请问该系统最多能存放多少个这样的视频文件?
(3)请问在 $\mathtt { E x t 2 }$ 文件系统中,是如何解决文件存储空间碎片化的问题的?
查看答案与解析
答案: (1)(3 分): 每个索引块中存放盘块号数量:$4\text{KB} / 4\text{B} = 1024$。 文件最大长度表达式为:
(2)(5 分): 文件索引节点的总个数为:
每个 6000B 的视频文件占用 2 个磁盘块,512M 个磁盘块理论上可存放文件的个数为:
由于系统支持的最大文件数受限于 Inode 总数,因此该系统最多只能存放 64M 个这样的视频文件。
(3)(3 分): Ext2 文件系统主要采用原地查找策略和预分配策略来解决文件存储空间碎片化的问题。
难度: ⭐⭐⭐
考点: #Ext2 #混合索引 #文件大小计算
💡 学习锦囊
📖 相关公式与知识点:
- $N \text{ 级索引项容量} = (\text{块大小}/\text{地址长})^N \times \text{块大小}$。
思路分析
注意(2)题中的“木桶效应”——文件数同时受限于数据块和 Inode 数量。
🔄 举一反三
- 若磁盘块大小改为 2KB,直接地址项改为 10 个,其他不变,最大文件长度的计算式是什么?
查看练习答案与解析
答案:$[10 + 512 + 512^2 + 512^3] \times 2\text{KB}$。
解析:每个索引块包含的指针数为 $2\text{KB}/4\text{B} = 512$。
- (12 分) 某虚拟存储系统中有一个进程共有 6页(0-5):代码占 3 页(页号为 0,1,2),数据占 1 页(页号为 3),数据堆占 1 页(页号为 4),用户栈占 1 页(页号为 5),它们依次存放在外存的 22、23、25、26 号磁盘块中。当前代码页分配在内存的 66、67、87 号块中;数据页分配在 31 号块中,并已经被修改;数据堆页还没有分配内存;用户栈分配在 1 号块中,未被修改。请完成以下问题:
(1)完成下面页表的内容:
| 页号 | 块号 | 修改位 | 访问位 | 引用时间 | 外存地址 | 存在位 |
|---|---|---|---|---|---|---|
| 0 | 66 | 0 | 1 | 1203 | 22 | 1 |
| 1 | 67 | 0 | 1 | 1178 | 23 | 1 |
| 2 | 87 | 0 | 1 | 1225 | 25 | 1 |
| 3 | 31 | 1 | 1 | 1020 | 26 | 1 |
| 4 | — | — | — | — | — | 0 |
| 5 | 1 | 0 | 1 | 1250 | — | 1 |
(2)若数据堆申请内存,因未分配物理内存而产生缺页中断,假设系统采用固定分配、局部置换策略,且采用 LRU 页面置换算法,则应淘汰哪个页面?操作系统如何处理?页表内容又如何变化?设当前时刻为虚拟时间 1270。
查看答案与解析
答案: (1)(6 分):错一个页面信息扣 1 分,全部正确得 6 分。页表如上题干所示。
(2)(6 分):
- 淘汰页面:采用 LRU 算法,淘汰引用时间最早的 3 号页面(引用时间 1020)。
- 操作系统处理:
- 因为 3 号页面修改位为 1,需先将其写回外存(外存地址 26)。
- 将 31 号物理块分配给缺页的 4 号页面。
- 从外存读取 4 号页面内容(本题中数据堆新申请,无需读取,直接清零)。
- 更新页表,重新执行引发缺页的指令。
- 页表变化:
- 3 号页:修改位
1 → —,访问位1 → —,引用时间1020 → —,存在位1 → 0。 - 4 号页:块号
— → 31,修改位— → 0,访问位— → 1,引用时间— → 1270,存在位0 → 1。
- 3 号页:修改位
难度: ⭐⭐⭐
考点: #页表 #LRU算法 #页面置换
💡 学习锦囊
📖 相关公式与知识点:
- LRU (Least Recently Used):淘汰最近最久未使用的页面。
- 脏页(修改过的页)换出时必须写回外存。
思路分析
仔细比对所有页面的“引用时间”,找到最小值。
🔄 举一反三
- 若上题采用 FIFO 算法,且页面调入顺序与页号相同,则淘汰哪个页面?
查看练习答案与解析
答案:0 号页面。
解析:FIFO 淘汰最早进入内存的页面。
- (14分)在一处很深的南北走向的非洲峡谷上,有一根坚固的横跨峡谷的绳索,狒狒可以攀住绳索越过峡谷。同一时刻,只要朝着相同的方向,可以若干只狒狒同时通过。但是向东和向西的狒狒同时攀在绳索上就无法通行,狒狒会被卡在中间,它们无法在绳索上从另一只的背上翻过去。
(1)请利用信号量机制编写伪代码程序来解决该问题。
(2)请分析上述通行规则可能存在什么问题?提出一种解决思路(无需伪代码)。
查看答案与解析
答案: (1)(10 分):
// 信号量设置与初始化 (2分)
semaphore pass_mutex = 1; // 保护绳索的互斥访问
semaphore east_mutex = 1; // 保护 east_count 的互斥访问
semaphore west_mutex = 1; // 保护 west_count 的互斥访问
int east_count = 0; // 当前正在过绳索的向东狒狒数量
int west_count = 0; // 当前正在过绳索的向西狒狒数量
// 向东攀爬的狒狒线程 (4分)
void Baboon_to_East() {
P(east_mutex);
if (east_count == 0) {
P(pass_mutex); // 第一只向东的狒狒抢占绳索
}
east_count++;
V(east_mutex);
// 攀爬绳索过峡谷
cross_canyon_to_east();
P(east_mutex);
east_count--;
if (east_count == 0) {
V(pass_mutex); // 最后一只向东的狒狒释放绳索
}
V(east_mutex);
}
// 向西攀爬的狒狒线程 (4分)
void Baboon_to_West() {
P(west_mutex);
if (west_count == 0) {
P(pass_mutex); // 第一只向西的狒狒抢占绳索
}
west_count++;
V(west_mutex);
// 攀爬绳索过峡谷
cross_canyon_to_west();
P(west_mutex);
west_count--;
if (west_count == 0) {
V(pass_mutex); // 最后一只向西的狒狒释放绳索
}
V(west_mutex);
}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
46
(2)(4 分):
- 潜在问题:可能产生**饥饿(Starvation)**问题(2分)。当抢到绳索的某个方向的狒狒源源不断时,另一个方向的狒狒会陷入无限等待。
- 解决思路(2分,任选其一):
- 思路 1:控制单方向连续通过的狒狒上限,达到上限后强制出让绳索。
- 思路 2:引入服务优先机制(类似公平读者写者),当对向狒狒开始等待时,同向新到的狒狒必须排队,待绳索清空后交由对向使用。
难度: ⭐⭐⭐⭐
考点: #信号量 #进程同步 #读者写者问题变式
💡 学习锦囊
📖 相关公式与知识点:
- “读者优先”的本质:只要有一个读者在读,后续读者可直接进入,导致写者饥饿。本题的“同向狒狒”相当于读者。
思路分析
识别为经典的“读者-读者互斥”问题(双向读者,双向互斥)。
🔄 举一反三
- 在经典读者写者问题中,若要求“公平竞争”(无饥饿),应如何改进信号量设置?
查看练习答案与解析
答案:引入一个互斥信号量
w = 1。读者在进入前先P(w),进入后再V(w)。写者在写前也执行P(w)。
- (13分)某 32 位请求分页系统采用二级页表结构,外部页表项和进程页表项长度均为 4 字节,虚拟地址结构如下图所示:
| 外部页号(10位) | 外部页内地址(10位) | 页内偏移量(12位) |
|---|
某 C 程序中数组 A[512][512] 的起始虚拟地址为 1080 0000H,按行优先方式连续存放在进程虚拟地址空间中,每个数组元素占 4 字节。外部页表在内存中的起始物理地址为 0020 1000H,请回答以下问题:
(1)数组元素 A[1][2] 的虚拟地址是什么?对应的外部页号和外部页内地址分别是多少?
(2)数组元素 A[1][2] 虚拟地址对应的外部页表项的物理地址是多少?若该外部页表项中存放的块号为 00301H,则 A[1][2] 所在页面的页表项的物理地址是多少?
(3)对数组 A 按行遍历和按列遍历,哪一种遍历方式的局部性更好?
查看答案与解析
答案: (1)(6 分):
- 虚拟地址计算(2分):$$\text{地址} = 1080\ 0000\text{H} + (1 \times 512 + 2) \times 4\text{B} = 1080\ 0000\text{H} + 2056\text{D}$$$$2056\text{D} = 0808\text{H}$$$$\text{虚拟地址} = 1080\ 0808\text{H}$$
- 二进制拆分:
1080 0808H转换为 32 位二进制:0001000010 0000000000 100000001000 - 外部页号(2分):取高 10 位
0001000010B= 042H。 - 外部页内地址(2分):取中 10 位
0000000000B= 0H。
(2)(5 分):
- 外部页表项物理地址(2分):$$\text{外部页表基址} + \text{外部页号} \times \text{页表项长} = 0020\ 1000\text{H} + 42\text{H} \times 4 = 0020\ 1108\text{H}$$
- 页表项物理地址(3分):$$\text{块号} \times \text{页大小} + \text{外部页内地址} \times \text{页表项长}$$$$00301\text{H} \times 4\text{KB} + 0 \times 4 = 0030\ 1000\text{H}$$
(3)(2 分): 按行遍历的局部性更好。
难度: ⭐⭐⭐⭐
考点: #二级页表 #地址转换 #局部性原理
💡 学习锦囊
📖 相关公式与知识点:
- $\text{物理地址} = \text{块号} \times \text{页面大小} + \text{页内偏移}$。
思路分析
严格按照地址划分的位数进行二进制转换,避免进制混淆。
🔄 举一反三
- 若系统页大小改为 8KB(偏移量 13 位),其他条件不变,数组元素
A[0][0]的虚拟地址是多少?查看练习答案与解析
答案:
1080 0000H。
解析:起始地址不变。
- (7分)在 Linux 系统的 shell 中依次执行下列命令,所有命令执行完成后,给出各文件(包括目录文件)的 i 节点中 count 计数值。
touch /tmp/f1
mkdir /tmp/dir1
mkdir /tmp/dir1/dir2
ln /tmp/f1 /tmp/dir1/f2
ln -s /tmp/f1 /tmp/dir1/f3
ln /tmp/f1 /tmp/dir1/dir2/bar
ln -s /tmp/dir1 /tmp/dir1/dir2/bar22
3
4
5
6
7
查看答案与解析
答案: (每个文件 1 分,共 7 分)
| 文件/目录 | f1 | f2 | f3 | bar | bar2 | dir1 | dir2 |
|---|---|---|---|---|---|---|---|
| Count 值 | 3 | 3 | 1 | 3 | 1 | 3 | 2 |
解析:
touch /tmp/f1:创建普通文件f1,其 Inode 链接数为 1。mkdir /tmp/dir1:创建目录dir1。dir1自身的 Inode 链接数变为 2(一个是父目录中的条目,一个是dir1内部的.)。mkdir /tmp/dir1/dir2:创建子目录dir2。dir2的 Inode 链接数为 2(dir1指向它,以及自身的.)。dir1的 Inode 链接数加 1(因为dir2内部的..指向dir1),变为 3。
ln /tmp/f1 /tmp/dir1/f2:为f1创建硬链接f2。此时f1和f2共享同一个 Inode,链接数均变为 2。ln -s /tmp/f1 /tmp/dir1/f3:为f1创建软链接(符号链接)f3。软链接是一个独立的文件,Inode 链接数为 1,且不增加原文件f1的链接数。ln /tmp/f1 /tmp/dir1/dir2/bar:为f1再次创建硬链接bar。Inode 链接数(f1、f2、bar)均变为 3。ln -s /tmp/dir1 /tmp/dir1/dir2/bar2:为目录dir1创建软链接bar2。软链接不增加目录的链接数。
难度: ⭐⭐⭐
考点: #硬链接 #软链接 #Inode计数值 #目录结构
💡 学习锦囊
📖 相关公式与知识点:
- 硬链接:共享 Inode,
count累加。 - 软链接:独立 Inode,
count为 1。 - 目录:新建子目录会导致父目录的
count增加 1(由于..)。
思路分析
追踪每次操作对文件系统元数据(特别是 Inode 链接计数)的影响。
🔄 举一反三
- 若随后执行
rm /tmp/dir1/f2,此时文件f1的 Inode 链接数变为多少?查看练习答案与解析
答案:2。
解析:硬链接被删除,链接数递减 1。
- (11分)系统采用二级反馈队列调度算法进行调度。就绪队列 Q1 采用时间片轮转调度算法,时间片为 10ms;就绪队列 Q2 采用短进程优先调度算法;系统优先调度 Q1 队列中的进程,当 Q1 为空时系统才会调度 Q2 中的进程;新创建的进程首先进入 Q1;Q1 中的进程执行一个时间片后,若未结束,则转入 Q2。若当前 Q1,Q2 为空,系统依次创建进程 P1、P2 后,即开始进行调度。P1、P2 需要的 CPU 时间分别为 30ms 和 20ms。
(1)分析 P1、P2 的调度运行过程。
(2)绘制 P1、P2 的调度运行过程图。
(3)计算进程 P1、P2 在系统中的平均等待时间。
(4)计算进程 P1、P2 在系统中的平均带权周转时间。
查看答案与解析
答案: (1)(4 分):
- 0~10ms:P1 在 Q1 中执行 10ms,时间片用完。P1 剩余 20ms,降入 Q2。
- 10~20ms:P2 在 Q1 中执行 10ms,时间片用完。P2 剩余 10ms,降入 Q2。
- 20~30ms:Q1 空,调度 Q2。Q2 采用短进程优先(SPF)。此时 Q2 中有 P1(20ms) 和 P2(10ms),P2 较短先执行。P2 执行 10ms 结束。
- 30~50ms:P1 继续在 Q2 中执行 20ms 结束。
(2)(2 分): 调度运行图如下(Gantt 图表示):
| 进程 | 0-10ms | 10-20ms | 20-30ms | 30-50ms |
|---|---|---|---|---|
| P1 | 运行 (Q1) | 等待 | 等待 | 运行 (Q2) |
| P2 | 等待 | 运行 (Q1) | 运行 (Q2) | 结束 |
(3)(2 分):
- P1 的等待时间:$10\text{ms} (10\sim 20) + 10\text{ms} (20\sim 30) = 20\text{ms}$。
- P2 的等待时间:$10\text{ms} (0\sim 10)$。
- 平均等待时间:$(20 + 10) / 2 = 15\text{ms}$。
(4)(3 分):
- P1 周转时间 = $50 - 0 = 50\text{ms}$;带权周转时间 = $50 / 30 = 5/3$。
- P2 周转时间 = $30 - 0 = 30\text{ms}$;带权周转时间 = $30 / 20 = 3/2$。
- 平均带权周转时间:$$\frac{5/3 + 3/2}{2} = \frac{19}{12} \approx 1.583$$
难度: ⭐⭐⭐⭐
考点: #二级反馈队列 #短进程优先 #等待时间 #带权周转时间
💡 学习锦囊
📖 相关公式与知识点:
- $\text{周转时间} = \text{完成时间} - \text{到达时间}$
- $\text{带权周转时间} = \text{周转时间} / \text{服务时间}$
思路分析
画出甘特图是解决进程调度计算题的法宝。
🔄 举一反三
- 若上题中就绪队列 Q2 采用先来先服务(FCFS)算法,则 P1 在 Q2 中会优先于 P2 执行吗?
查看练习答案与解析
答案:会。
解析:P1 比 P2 先降入 Q2,因此按先来先服务,P1 会在 20~40ms 优先执行。