第二章进程管理(1)
2.1 进程
2.1.1 进程的定义、组成、组织、特征
1. 进程的定义
- 程序的定义:程序就是一个指令序列
- 一个程序在内存中包括:程序段、数据段(可能不对)
- 引入进程的目的
- 为了方便操作系统管理多个程序,实现并发执行,引入了进程、进程实体
- 进程的定义
- 一个进程实体(进程映像)由【PCB、程序段、数据段】组成。
- PCB记录操作系统所需数据,而程序段和数据段记录程序本身运行所需数据
- 【PCB(进程控制块)是进程存在的唯一标准】
2. 进程的组成
-
进程的三部分(PCB、程序段、数据段)
-
PCB(程序控制块)通常包含的内容
-
整体
3. 进程的组织
-
注:进程的组成讨论的是一个进程内部由哪些部分构成的问题;而进程的组织讨论的是多个进程之间的组织方式问题
-
进程组织的两种方式【注意:两种方式都是将相同状态的PCB放在一起,不是整个进程】
-
链接方式(队列)
-
索引方式(索引表)
-
4. 进程的特征
5. 本节整体结构
2.1.2 进程的状态与转换
1. 进程的状态
(1)三种基本状态(运行态、就绪态、阻塞态)
(2)另外两种状态(创建态、终止态)
-
创建态图示说明
-
终止态图示说明
2. 进程的状态转换
3. 本节整体结构
2.1.3 进程的控制
1. 进程控制的概念
2. 进程的状态转换具体图解
- (对2.1.2–2的补充,结合链接/队列组织方式)
- 结合上面的图便于理解状态的转换
3. 原语实现进程控制(状态转换)
- 原语 = 关中断指令 + 若干原语代码 + 开中断指令【原语在体系结构那一节提及过】
- 在关中断指令和开中断指令期间,不会响应外部中断(即不会被打断,不允许中断),从而实现一气呵成
- 原语运行在核心态
4. 原语的功能(三大功能)
5. 五种原语(进程的状态切换相关)
(1)进程的创建原语
(2)进程的终止原语
(3、4)进程的阻塞和唤醒原语
- 阻塞原语和唤醒原语必须成对使用
- 进程自身调用阻塞原语【运行态 → 阻塞态是进程自身做出的主动行为】(2.1.2–2提及过)
- 由其他进程调用唤醒原语【阻塞态 → 运行态是被动行为】
(5)进程的切换原语
6. 本节整体结构
2.1.4 进程的通信
1. 进程通信的概念
2. 进程通信的三种方式
3. 共享存储
- 进程对共享空间的访问是【互斥】的
- 共享存储的分类
- 基于数据结构的共享(低级)
- 基于存储区的共享(高级,由进程控制)
4. 管道通信
- 管道:内存中大小固定的缓冲区
5. 消息传递
- 信息的发送通过【发送原语和接受原语】实现
- 消息传递的分类
- 直接通信方式:发送到接受进程的消息缓冲队列
- 间接通信方式:发送到信箱
6. 本节整体结构
2.1.5 线程概念与多线程模型
1. 为什么引入线程
- 为了更进一步地提高并发性,是进程内并发
- QQ程序是一个进程,QQ进程里可以有多个线程(任务管理器中的折叠展开部分)
2. 线程的概念
- 引入线程后,线程是处理机调度的单位,进程是资源分配的单位
3. 引入线程带来的变化
- 进程、线程地位的变化
- 并发程度的变化
- 切换运行环境的开销变化
4. 线程的属性
- 地位、组成、状态
- 资源使用
- 线程切换
5. 线程的实现方式
根据线程的管理工作归谁管(可以单看线程切换),分为两类
- 用户级线程
- 内核级线程
(1)用户级线程(线程库)
- 线程的管理工作归应用程序负责
- 线程切换在用户态执行(因为上一条)
- 计算机里的透明看不见!!!(容易搞错)
(2)内核级线程
- 线程的管理工作归内核负责
- 线程切换在核心态执行(因为上一条)
(3)二者组合
- 内核级线程才是处理机分配的单位
- 在多核处理机上,操作系统只会根据进程的内核级线程个数,分类几个核
6. 多线程模型
(1)多对一模型
(2)一对一模型
(3)多对多模型
7.本节整体结构
参考:
- https://www.bilibili.com/video/av70156862