跳转至

第13章 · 计算与操作系统 · 阶段测试题答案


一 · 单选 (8 题)

1.1 B - 进程是资源分配单位, 线程是调度单位。

1.2 A - 虚拟内存让进程使用比物理内存大的地址空间。

1.3 C - 上下文切换保存/恢复 CPU 状态。

1.4 B - 死锁 4 必要条件: 互斥 / 占有等待 / 不可剥夺 / 循环等待。

1.5 A - CPU Cache L1/L2/L3 速度递减, 容量递增。

1.6 C - SIMD = Single Instruction Multiple Data。

1.7 B - Linux 是开源 OS 内核。

1.8 A - CUDA 是 NVIDIA GPU 编程框架。


二 · 多选 (4 题)

2.1 ABCD - 进程间通信方式。

2.2 ABD - C 错: 线程共享进程地址空间。

2.3 ABC - 都是 CPU 架构术语。

2.4 ABD - 都是 GPU 厂商。


三 · 简答 (5 题)

3.1 进程 vs 线程

维度 进程 线程
资源 独立地址空间 共享进程
切换开销 大 小
通信 IPC 共享内存
并发 进程级 线程级
数量 几百 上万

3.2 虚拟内存

核心: 通过 MMU + 页表, 进程用虚拟地址, 物理内存用物理地址 作用: - 进程隔离 (A 不能访问 B 的内存) - 内存超载 (Swap) - 共享 (mmap / 共享库)

3.3 死锁 4 条件

  1. 互斥: 资源一次只能一个进程
  2. 占有等待: 持有资源 + 等待新资源
  3. 不可剥夺: 不能强行抢占
  4. 循环等待: 形成环路

解决: 破坏任一条件(常用: 资源有序分配)

3.4 CPU 流水线

5 级: 取指 IF / 译码 ID / 执行 EX / 访存 MEM / 写回 WB 冒险: - 数据冒险 (RAW / WAR / WAW) - 结构冒险 (资源冲突) - 控制冒险 (分支)

3.5 Linux 关键命令

命令 用途
ps / top 进程查看
kill 终止进程
grep / awk / sed 文本处理
find 文件查找
ssh 远程登录
git 版本控制
docker 容器

四 · 编程 (2 题)

4.1 多线程

import threading

def worker(n):
    print(f"Worker {n}")

threads = [threading.Thread(target=worker, args=(i,)) for i in range(5)]
for t in threads: t.start()
for t in threads: t.join()

4.2 进程间通信

from multiprocessing import Process, Queue

def worker(q):
    q.put("hello from worker")

q = Queue()
p = Process(target=worker, args=(q,))
p.start()
print(q.get())  # "hello from worker"
p.join()