操作系统快速复习(进程和线程)
先来个思维导图,喜欢文字的读者可以看博客,也对思维导图进行了一些补充,结合起来可以快速复习操作系统概述这一章节。
一、进程【动态的】
1.1 概念
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
1.2 程序顺序执行的特征
-
封闭性
程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响 -
顺序性
处理机严格按照程序所规定的顺序执行。 -
可再现性
程序运行环境和初始条件相同,不论怎样,可获得相同的结果
1.3 程序并发执行的特征
-
间断性
- 共享系统资源,执行过程为 ”执行——暂停——执行“
-
失去封闭性
- 其运行环境会受到其他程序的影响,执行结果与执行速度有关
- 不可再现性
1.4 进程的组织
【进程是一个独立的运行单位,是OS进行资源分配和调度的基本单位】
-
进程映像(进程实体)【静态的】
PCB【进程存在的唯一标志】进程的管理者(OS)所需要的数据都在PCB中即系统唯有通过进程的PCB才能感知到该进程的存在。PCB主要包括进程描述信息、进程控制和调度信息、资源分配清单、处理机相关信息。-
进程描述信息:包括进程标识符【PID】、用户标识符【UID】
-
进程控制和调度信息:包括进程当前状态和进程优先级。
-
资源分配清单:用于说明有关内存地址空间或虚拟空间的状况,
所打开文件的列表和所使用的输入输出设备信息 -
处理机相关信息: 主要指处理机中个寄存器的值。
-
-
PCB的组织方式
- 线性方式
- 链接方式
- 索引方式
-
程序段【程序可被多个进程共享】:包含程序代码(指令序列)
-
相关数据段:运行过程中产生的各种数据(如程序中定义的变量)
1.5 进程的特征
- 动态性
- 并发性
- 独立性
- 进程是能独立运行、独立获得资源、独立接受调度的基本单位
- 异步性
- 各进程以不可预知的速度向前推进,可能导致结果的不确定性
- 结构性
1.6 进程的状态
三种基本状态:运行态、就绪态和阻塞态/等待态。
-
运行态:占有CPU,并在CPU上运行,具有CPU和其他所有资源
-
就绪态:已具有运行条件,但无空闲CPU,暂时不能运行
-
阻塞态/等待态:因等待某一事件暂时不能运行,无CPU,也无其他所需资源
-
另外两种状态
创建态:进程正在被创建,OS为进程分配系统资源、初始化PCB
终止态:进程正在从系统中撤销,OS回收进程拥有的资源,撤销PCB -
进程状态间的转换
- 就绪态 —>运行态: 进程被调度
- 运行态—>就绪态: 时间片到 or CPU被其他进程抢占
- 运行态—>阻塞态: 等待系统资源分配 or 等待某事件发生(主动行为)
- 阻塞态—>运行态:资源分配到位,等待的事件发生(被动行为)
- 创建态—>就绪态:系统完成创建进程相关的工作
- 运行态—>终止态:进程运行结束 or 运行过程中遇到不可修复的错误
1.7 进程控制
进程控制就是要实现进程状态的转换,进程控制用原语实现
- 原语用关/开中断实现
- 原语是一种特殊的程序
- 原语的执行必须一气呵成,不可中断
相关原语
-
进程的创建(创建原语)
分配标识号、申请空白PCB
分配资源
初始化PCB
将新进程插入就绪队列引起进程创建的事件:
用户登陆
作业调度
提供服务
应用请求 -
进程的终止(撤销原语)
- 根据标识符,从PCB集合中找到终止进程的PCB
- 若进程正在运行,立即终止该进程的执行,将CPU分配给其他进程
- 终止其所有子进程
- 将进程拥有的全部资源归还给其父资源或OS
- 将PCB删除
引起进程终止的事件
正常结束
自己请求终止(exit系统调用)
异常结束
非法使用特权指令、非法指令、算术运算错(整数除以零)、储区越界、保护错、I/O故障、等待超时、I/O故障、运行超时
外界干预
用户选择杀掉进程、父进程请求、父进程终止
-
进程的唤醒(唤醒原语)
- 在事件等待队列找到PCB
- 将PCB从等待队列移出,设置其为就绪态
- 将PCB插入就绪队列
引起进程唤醒的事件
等待的事件发生
因何事阻塞就应由何事唤醒
-
进程的阻塞(阻塞原语)
- 找到要被阻塞的进程标识号对应的PCB
- 保护进程现场(若为运行态),将其状态转换为阻塞态,停止运行
- 将PCB插入相应事件的等待队列
引起进程阻塞的事件
需要等待系统分配某种资源
需要等待互相合作的进程完成其他工作
-
进程的切换(切换原语)
先有资源的调度,才有进程的切换- 保存运行环境信息(进程上下文,包括程序计数器和其他寄存器)
- 更新PCB信息
- 将PCB移入相应队列
- 选择另一个程序执行,更新其PCB
- 更新内存管理的数据结构
- 根据PCB恢复到进程所需的运行环境
引起进程切换的事件
当前进程时间片到
有更高优先级的进程到达
当前进程主动阻塞
当前进程终止
1.8 进程通信
-
低级通信方式
- PV操作
-
高级通信方式
-
共享存储
-
设置一个共享空间,通过对其进行读/写操作实现信息交换
-
要互斥地访问共享空间
-
两种方式
- 基于数据结构(低级)
- 基于存储区(高级)
-
-
管道通信
- 设置一个特殊的共享文件(管道),其实就是一个缓冲区
- 一个管道只能实现半双工通信
- 实现双向同时通信要建立两个管道
- 各进程要互斥访问管道
- 写满时,不能再写,读空时,不能再读
- 没写满时,不能读,没读空时,不能写
-
消息传递
-
传递结构化消息(消息头/消息体)
-
系统提供“发送/接受原语”
-
两种方式
-
直接通信方式
- 消息直接挂到接受方地消息队列里
-
间接(信箱)通信方式
- 消息先发到信箱
-
-
-
二、线程
2.1 概念
- 引入线程后,进程只作为除CPU外的系统资源的分配单位,线程则作为处理机的分配单元
2.2 线程的重要特点
- 进程是资源分配的单位,线程是处理机调度的单位
- 进程是拥有资源的基本单位,线程是独立调度的基本单位
- 同一个进程中的多个线程可以并发执行
- 同一进程的个线程共享进程拥有的资源
- 同一进程内的线程切换不会导致进程切换
2.3 多线程模型
-
一对一模型
- 一个用户级线程映射到一个内核级线程
- 优点:一个线程阻塞后,允许另一个线程继续执行,并发能力强
- 缺点:每个用户级线程都需要创建一个内核级线程与之对应,开销大,影响应用程序性能
-
多对一模型
- 多个用户级线程映射到一个内核级线程
- 优点:线程管理在用户空间进行,开销小,效率高。
- 缺点:一个线程在使用内核服务被阻塞会导致整个进程阻塞,多个线程不能并行地运行在处理机上
-
多对多模型
- n个用户级线程映射到m个内核级线程(n>=m)
- 集两者之所长
2.4 线程的实现方式
-
用户级线程
- 从用户视角能看到线程,由线程库实现
-
内核级线程
- 从OS视角能看到线程,由操作系统实现,内核级线程才是处理机分配的单位
-
组合方式
- 两种方式组合