Files
Operating-System/Exam/02第二章 进程线程与作业.md
2026-07-01 15:05:34 +08:00

616 lines
30 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第二章 进程、线程与作业
> 本章是操作系统的核心章节,围绕"运行中的程序如何被管理"这一中心问题,从多道程序设计的需求出发,引出**进程**这一最核心概念,再扩展到**线程**和**作业**。全章内容在考试中出现频率极高,是后续章节(调度、同步、通信、死锁、内存管理)的基础。
---
## 一、知识讲解
### 2.1 多道程序设计Multi-programming
#### 2.1.1 单道程序设计的缺点
**单道程序设计**:内存中同时只有一道程序,程序独占所有资源顺序执行。
- **处理机CPU利用率低**:当程序进行 I/O 操作时CPU 处于空闲等待状态。
- **设备利用率低**I/O 设备串行使用,外设与 CPU 不能并行工作。
- **内存利用率低**:内存中仅有一道程序,占用空间有限。
举例:运行程序 A 时,若 A 在 t1t2 时间段使用设备1则 t1t2 内 CPU 和设备2 完全空闲,整体效率很低。
#### 2.1.2 多道程序设计的提出
**多道程序设计**:内存中同时存放多道程序,使它们交替运行(宏观同时,微观串行),使 CPU 与 I/O 设备并行工作,从而提高资源利用率。
- **核心思想**:当一道程序因 I/O 暂停时CPU 可立即转去运行另一道程序。
- **效果**:处理机、设备、内存等资源利用率显著提升,系统效率(吞吐量)提高。
> 通俗理解A 程序等打印机时B 程序正在用 CPU 算数学——两不耽误。
#### 2.1.3 多道程序设计的道数问题
- **道数过少**:资源利用率仍低。
- **道数过多**系统开销system overhead增大进程切换频繁程序响应速度下降。
- **结论**:道数应与系统资源数量相当。
#### 2.1.4 多道程序设计带来的新问题
| 资源 | 需解决的问题 |
|------|--------------|
| 处理机 | 程序个数 > 处理机个数如何分配CPU 调度) |
| 内存 | 地址空间的相对独立性、共享性内存与外存swap space的分配与去配 |
| 设备 | 分配策略I/O 控制 |
> 这三大问题分别引出后续章节的"处理机管理(进程与调度)"、"存储管理"、"设备管理"。
---
### 2.2 进程的引入
#### 2.2.1 进程的概念
**进程Process** 是操作系统中最基本、最重要的概念之一。
- **定义1**:可参与并发执行的程序称为进程。
- **定义2**:进程是**具有一定独立功能的程序关于一个数据集合的一次运行活动**。
定义强调两方面:
1. **动态性**:进程是"执行中的程序",不是静态代码。
2. **并发性**:进程可与其他进程同时执行(宏观同时)。
**程序 vs 进程**
- 程序是静态的指令集合,可长期保存在磁盘上。
- 进程是动态的执行实体,有从创建到消亡的生存期。
- 一个程序可对应多个进程(如多个用户运行 vi一个进程在某时刻只能执行一个程序。
#### 2.2.2 并发Concurrent vs 并行Parallel
| 概念 | 含义 | 是否需要多 CPU |
|------|------|----------------|
| 并发 | 宏观同时,**交替执行**(分时复用) | 否 |
| 并行 | 微观同时,真正同时执行 | 是 |
> 单 CPU 系统上"边听音乐边写文档"是**并发**;多核 CPU 上两件事同时跑是**并行**。
#### 2.2.3 多道系统中程序的运行特点
- 程序不断**推进 → 暂停 → 推进 → 暂停**。
- **暂停时**必须保存现场PSW、PC、寄存器等便于恢复。
- **推进时**恢复现场。
- **暂停原因**
1. 自身原因:等待资源、启动 I/O。
2. 被剥夺 CPU——给其他程序运行机会。
#### 2.2.4 进程状态及状态转换
**基本三状态**
| 状态 | 英文 | 含义 |
|------|------|------|
| **运行态** | RUN | 占有 CPU正在向前推进 |
| **就绪态** | READY | 具备运行条件,只差 CPU |
| **等待态**(阻塞态) | WAIT | 等待某事件发生(如 I/O 完成) |
**状态转换**(共 4 种):
| 转换 | 触发条件 |
|------|----------|
| 就绪 → 运行 | 获得处理机(被调度) |
| 运行 → 就绪 | 时间片到,被剥夺处理机 |
| 运行 → 等待 | 申请资源未得到 / 启动 I/O |
| 等待 → 就绪 | 资源得到 / I/O 中断事件发生 |
> **重要注意点**
> 1. 状态转换由**操作系统**完成,对用户**透明**。
> 2. **就绪 → 等待** 不存在!就绪态进程没有运行,不可能在等待某事件时突然被阻塞。
> 3. **等待 → 运行** 不存在!等待态必须先转就绪,再等调度才能运行。
**考虑创建与终止的五状态模型**
在基本三状态基础上加上:
- **初创New**:进程刚被创建,尚未就绪。
- **终止Terminated**:进程已结束,等待善后处理。
#### 2.2.5 进程控制块PCB, Process Control Block
**定义****PCB 是标志进程存在的数据结构**,其中保存系统管理进程所需的全部信息。
> **建立进程 = 建立 PCB****撤销 PCB = 撤销进程**。
**PCB 的典型内容**
| 类别 | 内容 |
|------|------|
| 标识信息 | 进程标识pid、家族联系父进程 pid、所属用户uid |
| 状态信息 | 进程状态RUN/READY/WAIT 等) |
| 现场信息 | PSW、PC、通用寄存器、栈指针等 |
| 地址信息 | 程序段、数据段、堆栈段地址 |
| 调度信息 | 优先级、调度参数 |
| 资源信息 | 打开文件、消息指针、信号 |
| 队列信息 | 就绪/等待队列指针 |
**PCB 的组织方式**
- 链接方式:同状态的 PCB 链成队列(就绪队列、等待队列)。
- 索引方式:建立索引表。
#### 2.2.6 进程的组成与上下文
**进程的组成**(三部分):
1. **PCB**:进程存在的标志。
2. **程序**(代码 code + 数据 data
3. **堆栈**stack + heap
- **栈**:保存返回点、参数、返回值、局部变量。
- **堆**:动态分配的变量。
**进程影像Process Image**:进程的程序(代码和数据)部分。
**进程的物理实体 + 支持进程运行的物理环境 = 进程上下文Process Context**
- 包括PCB + 程序 + 系统环境(地址空间、系统栈、打开文件表等)。
**上下文切换Context Switch**:由一个进程的上下文转到另一个进程的上下文。
**系统开销System Overhead**:操作系统为管理工作所花费的时间和空间。
#### 2.2.7 进程的队列
- **就绪队列**:系统中一个或多个(取决于调度算法)。
- **等待队列**:每个等待事件一个队列(如等待打印机、等待磁盘 I/O
- **运行指示字**:每个处理机一个,指向当前运行进程的 PCB。
- 队列中的 PCB 不一定 FIFO可能按优先级排单向或双向链表。
#### 2.2.8 进程的类型与特征
**按类型分**
| 类型 | 功能 | 例子UNIX |
|------|------|---------------|
| **系统进程** | 运行 OS 程序,完成管理/服务功能 | #0 sched、#1 init |
| **用户进程** | 运行用户程序,为用户服务 | vi、shell、cc |
**进程的特征(五大特征)**
1. **并发性**:可与其他进程一道向前推进。
2. **动态性**:动态产生与消亡,生存期内状态动态变化(**最基本特征**)。
3. **独立性**:一个进程是可以调度的基本单位。
4. **交往性**:同时运行的进程可能发生相互作用。
5. **异步性**:进程以各自独立、不可预知的速度向前推进。
6. **结构性**:每个进程有一个 PCB。
#### 2.2.9 进程间相互联系与相互作用
**相互联系**
- **相关进程**:同一家族,可共享文件,需相互通信、协调推进。父进程可监视子进程。
- **无关进程**:无逻辑关系、同时执行。可能产生资源竞争(互斥、死锁、饿死)。
**相互作用**
- **直接相互作用**:发生在相关进程之间,通过 send/receive、信号等显式通信。
- **间接相互作用**:通过共享资源(变量、文件)隐式发生,需互斥访问。
#### 2.2.10 进程的创建与撤销
**进程创建**
1. 建立 PCB
2. 分配内存;
3. 加载程序;
4. 入就绪链。
UNIX 系统中:
- `pid = fork()`:创建子进程(复制父进程),子进程是父进程的"复制品"。
- 返回值:父进程中返回子进程 pid>0子进程中返回 0。
- `execl(prog, arg0, ..., 0)`:在子进程中加载并执行新程序(覆盖原程序,从头执行)。
**进程撤销**
- 去配资源、撤销 PCB、通知父进程。
- UNIX`exit(status)` 自我终止;`kill` 由其他进程终止。
> **进程家族树**:除 0 号init所有进程由父进程创建形成家族关系。
#### 2.2.11 UNIX 进程组成(映像)
UNIX 中进程映像由三部分组成:
1. **proc 结构**常驻内存无论进程在内存还是外存都需的信息p_stat、p_pid、p_ppid、p_pri、p_wchan 等)。
2. **user 结构**可换出仅当进程在内存时需要u_uid、u_ofile、u_arg、u_tsize/dsize/ssize、u_procp 等)。
3. **text 结构**代码段x_daddr、x_size、x_count
#### 2.2.12 fork / vfork 的区别
| 特性 | fork | vfork |
|------|------|-------|
| 是否复制地址空间code+data+stack | 是 | 否 |
| 是否复制控制结构proc、user | 是 | 是 |
| 父子进程数据 | 各有独立拷贝 | **共享** |
| 典型用途 | 不加载新程序时 | 子进程立即 exec |
> vfork 设计目的:避免 fork 后立刻 exec 造成无意义的复制浪费。子进程与父进程共享地址空间,子进程必须立即调用 `execve` 改变虚拟地址空间。
---
### 2.3 线程与轻进程Thread & Light-Weighted Process
#### 2.3.1 线程的引入
**进程切换的问题**
- 进程上下文内容多PCB + 程序 + 系统栈 + 打开文件表 + ...),切换**开销大、笨重**。
- 相关进程之间耦合关系差,通信代价高。
**解决方案——多线程Multi-threading**
- 同一进程内包含多个线程,**共享进程的地址空间和资源**。
- 线程上下文只涉及**寄存器和用户栈**,切换速度快。
- 同一进程内线程间通信方便(共享数据空间即可)。
#### 2.3.2 线程的概念
**线程Thread****进程内一个相对独立的执行流**。
| 维度 | 进程 | 线程 |
|------|------|------|
| **资源分配单位** | 是 | 否(共享所属进程的资源) |
| **执行/调度单位** | 是 | 是 |
| **拥有独立地址空间** | 是 | 否(共享进程的地址空间) |
| **切换开销** | 大 | 小light-weighted |
| **通信方式** | IPC、共享内存等 | 共享进程数据空间,直接读写 |
**多线程优点**
1. 切换速度快(地址空间不变)。
2. 系统开销小。
3. 通信容易(共享数据空间)。
#### 2.3.3 线程的结构
- **多进程视图**:每个进程有独立的内存、代码、栈、寄存器、堆。
- **多线程视图**:同一进程内的多个线程**共享代码段、数据段、堆**,各自有**独立的栈和寄存器**PC、SP 等)。
#### 2.3.4 线程控制块TCB, Thread Control Block
**TCB**:标志线程存在的数据结构,包含线程管理所需的全部信息。
**TCB 典型内容**
- 线程标识 tid
- 线程状态
- 调度参数(优先级)
- 现场信息通用寄存器、PC、SP
- 链接指针(指向同队列中其他 TCB
**TCB 存放位置**
- **用户级线程**:目态空间(用户态运行时系统)。
- **核心级线程**:系统空间(内核)。
#### 2.3.5 线程的实现
**1用户级线程User-Level Thread**
- **实现**:基于 library 函数在用户空间OS 不可见。
- TCB 在用户空间;线程创建、撤销、状态转换均在目态完成。
- **优点**
- 不依赖 OS调度灵活可为不同线程定制调度算法。
- 同一进程内线程切换速度快,**不需进入内核**。
- **缺点**
- 同一进程内多线程**不能真正并行**OS 调度单位仍是进程)。
- 一个线程进入系统(系统调用)受阻,**同进程其他线程全部被阻塞**。
**2核心级线程Kernel-Level Thread**
- **实现**基于系统调用OS 直接管理。
- TCB 在系统空间;创建、撤销、状态转换由 OS 完成。
- **优点**
- 同一进程内多线程可**真正并行**(多 CPU 上)。
- 一线程阻塞,**其他线程可继续**。
- **缺点**
- 系统开销大,切换需陷入内核。
- 调度算法不能灵活控制(由 OS 决定)。
**3混合线程Hybrid, 以 Solaris 为代表)**
Solaris 三层结构:
- **User Level ThreadULT**:由 Lib 程序支持(创建、调度)。
- **Light Weight ProcessLWP**:中间层,每个 task 至少一个 LWPULT 与 LWP **多对多**
- **Kernel Level ThreadKLT**由内核支持LWP 与 KLT **一对一**KLT 与 CPU **多对多**
> 只有与 LWP 关联的 ULT 才能真正推进LWP 对 OS 可见,是 OS 调度的实体。
#### 2.3.6 线程的应用
- 适合"内在的多控制流、需要共享数据"的场景。
- **生产-消费问题**:多线程比多进程**快约 100 倍**(共享缓冲区的开销远小于 IPC
- 提高处理机与设备的并行性,在多处理机环境特别有效。
- **经典例子**
- Word 字处理交互编辑T1、词法检查T2、定时保存T3三个线程。
- HTTP Server每个 HTTP 请求"弹出"一个新线程处理。
---
### 2.4 作业Job
#### 2.4.1 作业的基本概念
- **作业**:用户要求计算机系统为其完成的**计算任务集合**。
- **作业步Job Step**:作业处理过程中一个相对独立的步骤;**一般一个作业步可由一个进程完成**;某些作业步之间可并行。
- **作业分类**
- **批处理作业**:脱机工作,通过作业说明书提交。
- **交互式作业**:联机工作,通过终端命令交互。
#### 2.4.2 批处理作业
- **作业控制语言JCL**:描述批处理作业控制意图的语言。
- **作业说明书**JCL 语句的序列,常以特殊符号起始(如 `$`)。
**典型 JCL 例子**
```
$JOB J1
$FORTN ...
$LINK ...
$EXEC ...
$ENDJOB
```
- **作业控制程序**:解释并处理作业说明书的程序。
- **作业控制进程**:执行作业控制程序的进程。
**作业控制进程工作流程**
读入作业内容 → 释放输入井空间 → 顺取 JCL 语句 →(若是结束语句则执行该作业步 → 申请输出井空间 → 输出结果 → 自我终止)→ 循环。
#### 2.4.3 交互式作业
- **帐户管理**`/etc/passwd` 文件(用户名、口令、用户根目录、同组用户、余额等)。
- **创建**:用户提供(用户名、口令、资金)→ 系统操作员建立根目录、填 passwd。
- **撤销**:删除用户目录及所有文件,清除 passwd 对应 entry。
- **注册/注销**
- 注册:`logon: 用户名` + `password: ********`
- 注销:显式(`logoff`)或隐式(长时间无输入,如 5 分钟)。
**命令解释程序Shell工作流程**:提示符 → 读入命令 → 分析 →(内部命令直接处理 / 外部命令建立子进程)→ 等待子进程结束 → 记帐 → 循环。
#### 2.4.4 作业、进程、线程的关系(小结)
| 关系 | 说明 |
|------|------|
| **作业与进程** | 作业进入内存后变为进程;**一个作业通常对应多个进程** |
| **进程与线程** | 一个进程一般包含多个线程,至少一个;不支持多线程的系统可视为单线程进程 |
| **作业、进程、线程** | 作业是面向用户的任务单位;进程是系统资源分配和独立运行单位;线程是 CPU 调度单位 |
---
### 2.5 现代系统中的进程/线程Java、Linux、Windows
#### 2.5.1 Java 线程
**Java 线程四种基本状态**
| 状态 | 含义 |
|------|------|
| **New** | 新建,尚未启动 |
| **Runnable** | 可运行Java 不严格区分就绪与运行) |
| **Blocked** | 封锁状态等待锁、I/O、sleep、suspend 等) |
| **Dead** | 终止 |
**状态转换**New → start() → RunnableRunnable → sleep()/suspend()/I/O → BlockedBlocked → IO 完成/Resume → RunnableRunnable → stop() → Dead。
**Java 线程与 JVM**
- Java 线程由 JVM 支持JVM 位于 OS 之上。
- Java 线程与 OS 线程的映射由 JVM 决定:
- Windows NT 的 JVM**一对一**。
- Solaris 的 JVM**多对多**。
#### 2.5.2 Linux 进程与线程
- **关键思想**Linux 内核中**进程与线程具有统一的表示**(均为 `task_struct`)。
- **差异体现**:通过与 `fork` 不同的 `clone` 系统调用区分。
- `pid = clone(function, stack_ptr, sharing_flag, arg)`
- `sharing_flag``CLONE_VM`(共享内存)、`CLONE_FILES`(共享文件)、`CLONE_SIGHAND`(共享信号处理)、`CLONE_PID`(共享 pid等。
- `fork` 可视为 `clone` 在所有 sharing flag 关闭时的特例。
#### 2.5.3 Windows 10 进程、线程与纤程
**Win32 进程创建过程**
应用调用 `CreateProcess` → Win32 子系统 → 进程管理器 → 对象管理器OM创建进程对象 → 进程管理器为该进程创建线程 → Win32 将进程/线程句柄返回给应用。
**Windows 线程状态**5 态或更多):
| 状态 | 含义 |
|------|------|
| **初始Initialized** | 线程对象刚创建 |
| **就绪Ready** | 等待 CPU |
| **备用Standby** | 已选中,下一个时间片运行(每个 CPU 一个) |
| **运行Running** | 正在执行 |
| **等待Waiting** | 等待某对象信号、I/O 等) |
| **转换Transition** | 等待栈在外(线程在内核态等待,且其用户栈不在内存) |
| **终止Terminated** | 执行完,等待回收 |
**转换关系**:初始→就绪(创建线程对象)→备用(入就绪队列)→运行(被选中)→就绪/等待(剥夺/等待事件)→等待→就绪(唤醒)→运行(切换)→终止(执行完)。
---
## 二、考点总结
### 考点1进程的定义与基本特征
- **内容**:进程是具有一定独立功能的程序关于一个数据集合的一次运行活动;强调**动态性**和**并发性**。基本特征:动态性、并发性、独立性、交往性、异步性、结构性。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. **填空**进程是程序在某个数据集合上的一次_**运行活动**__是系统进行资源分配和调度的基本单位。
2. **选择**:下面哪项**不是**进程的特征DA. 动态性 B. 并发性 C. 独立性 D. 静态性
3. **简答**:进程与程序的区别是什么?——程序是静态的指令集合,可长期保存;进程是动态的执行实体,有生存期;进程 = 程序 + PCB + 上下文;一个程序可对应多个进程,一个进程在某时刻对应一个程序。
### 考点2进程三种基本状态及转换
- **内容**:就绪 R、运行 RUN、等待 W。转换有 4 种:就绪→运行、运行→就绪、运行→等待、等待→就绪。
- **考查方式**:选择、画图、填空。
- **可能的题目**
1. **画图**:画出进程三种基本状态转换图(含四个箭头及触发条件)。
2. **选择**:下列状态转换中**不可能**发生的是BA. 运行→就绪 B. 就绪→等待 C. 等待→就绪 D. 运行→等待
3. **填空**:进程由**运行**态到**等待**态是由于申请资源未得到或启动 I/O由**等待**态到**就绪**态是因事件发生(如 I/O 完成)。
### 考点3PCB进程控制块
- **内容**PCB 是标志进程存在的数据结构;含 pid、状态、现场、地址、调度、资源、队列指针等信息。**建立进程 = 建立 PCB撤销 PCB = 撤销进程**。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. **选择**在操作系统中进程存在的唯一标志是BA. 程序段 B. PCB C. 数据段 D. 堆栈
2. **简答**PCB 的主要作用是什么包含哪些信息——PCB 是进程存在的标志OS 通过 PCB 管理和控制进程含进程标识、状态、现场PC、PSW、寄存器、地址、调度参数、打开文件、队列指针等。
3. **填空**:建立进程实质上是建立**PCB**;撤销进程实质上是撤销**PCB**。
### 考点4并发与并行的区别
- **内容**:并发是宏观同时微观交替,不要求多 CPU并行是微观真正同时要求多 CPU。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. **选择**:以下描述属于"并行"的是CA. 单核 CPU 上多道程序交替执行 B. 分时系统 C. 多核 CPU 上多个程序同时执行 D. 中断处理
2. **填空**:单处理机系统上的多道程序设计体现的是**并发**性。
### 考点5进程上下文与上下文切换
- **内容**:进程上下文 = 进程物理实体PCB+程序)+ 支持进程运行的物理环境;上下文切换 = 由一个进程的上下文转到另一个进程的上下文,会产生系统开销。
- **考查方式**:选择、简答。
- **可能的题目**
1. **简答**什么是进程上下文切换开销来自哪些方面——OS 保存当前进程的 CPU 现场PC、PSW、寄存器等并加载下一个进程的现场开销来自保存/恢复现场、内核态切换、Cache/TLB 失效等。
### 考点6进程与程序的联系与差别
- **内容**:进程包含一个程序;程序静态,进程动态;程序可长期保存,进程有生存期;一个程序对应多个进程,一个进程只能执行一个程序。
- **考查方式**:选择、简答、辨析。
- **可能的题目**
1. **判断**:一个程序只能对应一个进程。(错)多用户多次运行同一程序产生多个进程。
2. **简答**:进程和程序的主要区别。
### 考点7进程家族与 fork/exec
- **内容**:除 0 号 init 外所有进程由父进程创建;`fork()` 复制父进程,返回值在父进程中为子进程 pid>0子进程中为 0`execl()` 加载并执行新程序(覆盖原程序);`exit()` 自我终止;`wait()` 等待子进程结束。
- **考查方式**:程序分析题、简答。
- **可能的题目**
1. **程序分析**:写出 `pid = fork();` 后父子进程各自看到的 pid 值。父进程pid > 0子进程编号子进程pid = 0。
2. **简答**fork 与 vfork 的区别。fork 复制地址空间code+data+stack父子进程数据独立vfork 不复制地址空间,父子共享,子进程必须立即 execve。
### 考点8线程的概念与特点
- **内容**:线程是进程内一个相对独立的执行流,是 CPU 调度单位;同一进程内线程共享地址空间和资源;线程切换开销小、通信易。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. **选择**:以下关于线程的叙述中,**错误**的是DA. 线程是 CPU 调度的基本单位 B. 同一进程内的线程共享地址空间 C. 线程切换比进程切换开销小 D. 线程是资源分配的基本单位
2. **填空**:进程是**资源分配**单位,线程是**执行(调度)**单位。
### 考点9进程 vs 线程对比
- **内容**
| 维度 | 进程 | 线程 |
|------|------|------|
| 资源分配单位 | 是 | 否(共享所属进程) |
| 调度单位 | 是 | 是 |
| 地址空间 | 独立 | 共享(同一进程内) |
| 切换开销 | 大 | 小 |
| 通信方式 | 复杂IPC | 简单(共享数据) |
- **考查方式**:选择、简答、表格填空。
- **可能的题目**
1. **简答**:为什么引入线程?——减小进程切换开销;提高并发度;同进程内线程通信方便。
### 考点10用户级线程 vs 核心级线程
- **内容**
| 特性 | 用户级线程 | 核心级线程 |
|------|------------|------------|
| 实现 | 用户态 Library | 系统调用 |
| TCB 位置 | 用户空间 | 系统空间 |
| 切换是否进内核 | 否 | 是 |
| 切换速度 | 快 | 慢 |
| 同一进程多线程并行 | 否 | 是 |
| 一线程阻塞影响 | 阻塞同进程所有线程 | 其他线程可继续 |
| 调度灵活性 | 高 | 受 OS 限制 |
- **考查方式**:选择、简答、对比表。
- **可能的题目**
1. **选择**用户级线程的主要缺点是CA. 切换慢 B. 不能并发 C. 同一进程内一线程阻塞会导致整个进程阻塞 D. 占用系统资源多
2. **简答**:用户级线程与核心级线程的优缺点对比。
### 考点11混合线程Solaris 模型)
- **内容**ULT 与 LWP 多对多LWP 与 KLT 一对一KLT 与 CPU 多对多;只有与 LWP 关联的 ULT 才能推进。
- **考查方式**:选择、填空、画图。
- **可能的题目**
1. **填空**:在 Solaris 混合线程模型中LWP 是连接用户级线程和**核心级线程**的中间层。
2. **画图**:画出 Solaris 三层线程模型ULT → LWP → KLT → CPU的多对多映射。
### 考点12作业的概念与分类
- **内容**:作业是用户要求计算机完成的任务集合;作业步是作业内相对独立的步骤,一般一个作业步由一个进程完成;分为批处理作业和交互式作业。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. **填空**:作业由内存进入系统后变为**进程**;一个作业通常对应**多个**进程。
2. **选择**:下列关于作业的叙述**错误**的是BA. 一个作业可包含多个作业步 B. 一个作业步必须由多个进程完成 C. 作业是用户提交任务的基本单位 D. 批处理作业通过 JCL 描述
### 考点13批处理作业与 JCL
- **内容**JCL 是描述批处理作业控制意图的语言;作业说明书是 JCL 语句序列;由作业控制程序解释执行;作业控制进程执行作业控制程序。
- **考查方式**:填空、简答。
- **可能的题目**
1. **填空**:描述批处理作业控制意图的语言称为**JCL作业控制语言**JCL 语句的序列称为**作业说明书**。
2. **简答**:简述批处理作业的处理流程(作业控制进程工作流程)。
### 考点14交互式作业与命令解释程序
- **内容**交互式作业通过终端命令与系统交互需注册logon/password和注销logoff 或超时隐式注销命令解释程序Shell负责读入、分析、执行命令内部命令直接处理外部命令建立子进程。
- **考查方式**:填空、简答。
- **可能的题目**
1. **简答**:简述命令解释程序的工作流程。提示符 → 读入命令 → 分析 →(内部命令处理 / 外部命令建子进程)→ 等待子进程结束 → 记帐 → 循环。
2. **填空**:交互式作业的隐式注销通常发生在**长时间无输入**时。
### 考点15作业、进程、线程关系总结
- **内容**:作业 → 进程 → 线程。作业是面向用户的任务单位,作业进入内存后变为进程;进程是资源分配单位,进程内可有多个线程;线程是调度单位。
- **考查方式**:简答、画关系图。
- **可能的题目**
1. **简答**:简述作业、进程、线程三者之间的关系。
2. **画图**:画出作业 → 作业步 → 进程 → 线程 的包含与映射关系。
### 考点16UNIX 进程映像proc/user/text
- **内容**proc 常驻内存无论进程在内存还是外存都需要的信息p_stat、p_pid、p_ppid 等user 可换出仅进程在内存时需要u_uid、u_ofile、u_procp 等text 是代码段x_count 引用计数)。
- **考查方式**:选择、填空。
- **可能的题目**
1. **选择**UNIX 进程映像中,**常驻内存**的部分是AA. proc 结构 B. user 结构 C. text 结构 D. 用户栈
2. **填空**UNIX 中保存进程打开文件表的是 **user** 结构。
### 考点17Linux 的 clone 与统一表示
- **内容**Linux 进程与线程在系统内部统一表示为 `task_struct`;通过 `clone` 调用及 sharing flagCLONE_VM、CLONE_FILES、CLONE_SIGHAND、CLONE_PID区分。
- **考查方式**:选择、填空、简答。
- **可能的题目**
1. **简答**Linux 中进程与线程在系统内部是如何表示的?它们如何区分?——统一表示为 task_struct通过 clone 系统调用的 sharing_flag 区分共享资源范围。
### 考点18Windows 线程状态
- **内容**Windows 线程有 6 种状态:初始、就绪、备用、运行、等待、转换、终止。
- **考查方式**:画图、选择。
- **可能的题目**
1. **画图**:画出 Windows 线程状态转换图(含各转换触发条件)。
2. **填空**Windows 中"备用Standby"状态表示线程**已被选中**为下一个时间片的执行者(每 CPU 一个)。
### 考点19Java 线程状态
- **内容**Java 线程 4 态New、Runnable、Blocked、Dead。
- **考查方式**:选择、画图。
- **可能的题目**
1. **选择**Java 线程调用 sleep() 后进入DA. New B. Runnable C. Dead D. Blocked
2. **画图**:画出 Java 线程状态转换图。
### 考点20多道程序设计的道数与系统开销
- **内容**:道数过少资源利用率低;道数过多系统开销增大、响应速度下降;应与系统资源数量相当。
- **考查方式**:简答、选择。
- **可能的题目**
1. **简答**:多道程序设计的道数是否越多越好?为什么?——不是。道数过多会使进程切换频繁,系统开销增大,程序响应速度下降。
### 考点21进程间相互作用
- **内容**:直接相互作用(相关进程间 send/receive/同步/互斥);间接相互作用(通过共享资源)。
- **考查方式**:简答、举例。
- **可能的题目**
1. **简答**:进程间有哪两种相互作用方式?各举一例。——直接相互作用(相关进程间通信,如 send/receive、信号量同步间接相互作用通过共享资源访问发生竞争如打印机互斥使用
---
> **学习提示**:本章是 OS 课程的基石,后续"处理机调度"、"进程同步与通信"、"死锁"等章节都以本章的进程/线程概念为基础。复习时应重点理解**进程状态的转换图**、**PCB 作用**、**进程 vs 线程**、**用户级 vs 核心级线程**、**fork/exec 流程**、**作业与进程的关系**等核心考点。