Chapter 2 进程与线程(上)
1.什么是进程
进程是程序的一次执行过程;是一个程序及其数据在处理机上顺序执行时发生的活动,是系统进行资源分配和调度的一个独立单位
程序段、数据段、PCB三部分组成了进程实体,即进程。PCB是进程存在的唯一标志。
进程控制块(PCB)是指系统为每个运行的程序配置一个数据结构,操作系统通过PCB来管理进程,它包含操作系统对其进行管理所需的各种信息
程序段:存放程序代码
数据段:存放程序运行时使用、产生的运算数据(全局变量、局部变量、宏定义的常量)
2.进程的组织方式
3.进程的特性
4.进程的状态
- 创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB
- 就绪态:进程已经拥有了除了CPU之外所需要的资源,一旦获得CPU,即可立即进入运行态开始运行
- 运行态:占有CPU并在CPU上运行。单核CPU环境下,同一时刻最多只有一个进程处于运行态,多核则多个进程运行
- 阻塞态:等待操作系统分配所需的其他资源
- 终止态:进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
5.进程状态的转换
6.进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能
6.1 如何实现进程控制
通过原语实现进程控制。原语的特点是执行期间不允许中断,一气呵成。
原语通过关中断指令和开中断指令实现,这对指令权限非常大,是只允许在核心态下执行的特权指令
6.2 进程控制相关的原语
原语所做的无非三件事:
- 更新PCB中的信息
- 所有进程控制原语一定都会修改进程状态标志
- 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
- 某进程开始运行前必然要恢复其运行环境
- 将PCB插入合适的队列
- 分配/回收资源
(1)进程创建
(2)进程终止
(3)进程的阻塞和唤醒
(4)进程切换
7.进程通信
8.什么是线程
线程是一个基本的CPU执行单元,也是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
- 引入线程机制的变化
9.线程的实现方式
9.1 用户级线程
用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换),线程切换可以在用户态下完成,无需操作系统干预
对于用户来说,是有多个线程;但对于操作系统内核来看,意识不到线程的存在
9.2 内核级线程
内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都有内核负责,因此内核级线程的切换必然需要在核心态下才能完成
9.3 二者组合
在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上(n >= m)
只有内核级线程才算是CPU分配的单位
10.多线程模型
10.1 多对一模型
多个用户级线程映射到一个内核级线程。每个用户线程只对应一个内核级线程
优点:用户级线程的切换在用户态下即可完成,不需要切换核心态,线程管理的系统开销小,效率高
缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高,多个线程不可在多核CPU上并行运行
10.2 一对一模型
一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程
优点:当一个线程被阻塞后,别的线程还可以继续运行,并发能力强。多线程可以在多核CPU上执行
缺点:一个用户线程占用多个内核级线程,线程切换需要切换到核心态,由操作系统内核完成,因此线程管理的成本高,开销大
10.3 多对多模型
n个用户级线程映射到m个内核级线程(n >= m)。每个用户进程对应m个内核级线程
优点:克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户线程占用太多内核级线程,开销太大的缺点