进程的描述
1、进程概念(三种典型定义):
- 程序执行一次的过程
- 程序和数据在处理机上顺序执行一次的过程
- 具有独立功能的程序在数据集合上运行一次的过程,他是系统调度和资源资源分配的一个独立单位。
2、进程的组成:PCB+代码段+数据段。PCB有进程的描述信息(PID, UID),进程控制管理信息(优先级、当前状态),资源分配信息(键盘、鼠标、打印机、程序段指针、数据段指针),处理机信息(各种寄存器的值)
3、进程的组织方式:链式、索引两种方式。区别:就绪指针、阻塞指针直接指向队列还以一个索引表,经过索引表再指向队列。
进程转态及转化
1、进程的三种基本状态:
- 就绪态:占有资源,没有得到处理器,万事俱备,只欠CPU
- 运行态:占有资源和处理器,进程处于运行转态。一个单核CPU,同一时间段只有一个进程处于运行态。
- 阻塞态: 因等待某一资源或时间的发生而暂时不能运行。既没有资源,也没有CPU。
2、另外两种状态:
- 创建态:创建PCB,分配资源。
- 终止态:撤销PCB,回收资源。
3、进程五状态转换图
进程控制
1、进程控制:系统对进程进行有效的管理,具有创建进程,进程状态转换,进程撤销的功能。
2、如何实现进程控制?原语。即原子操作,执行期间不能中断,只能一气呵成。如何实现原语?开指令,关指令。
3、原语在进程转换过程中,做了什么?
1.更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
a.所有的进程控制原语一定都会修改进程状态标志
b.剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c.某进程开始运行前必然要恢复期运行环境
2.将PCB插入 合适的队列
3.分配/回收资源
进程同步
进程通信
1、共享存储:基于数据结构的共享(低级,如一次只能读取一个长度为10的数组), 基于存储区的共享(高级)
2、管道通信:一个管道队列,两个进程一个满的时候读,一个空的时候写,互斥访问,所以半双工通信。两个队列就全双工
3、消息传递:直接通信,直接放到对方的缓冲队列,间接通信:放到信箱里,对方需要的时候从信箱取。
线程
1、定义:可以把线程理解为“轻量级进程。线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度。
注:引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。(内核)线程则作为处理机的分配单元。
2、线程引入所带来的变化?
- 资源分配:之前进程是cpu调度、系统资源分配的基本单位,现在线程是cpu调度的基本单位,进程是资源分配的基本单位
- 并发性:进程间可以并发,同时,进程内的线程也可以并发,并发性大大提高。
- 系统消耗:进程切换,系统消耗大,线程切换,消耗小。qq调动摄像头,摄像头被占用,阻塞整个QQ和阻塞摄像头线程的区别。
3、线程的属性:
- 线程是处理机调度的单位
- 多CPU计算机中,各个线程可占用不同的CPU
- 每个线程都有一个线程ID、 线程控制块(TCB)
- 线程也有就绪、阻塞、运行三种基本状态
- 线程几乎不拥有系统资源
- 同一进程的不同线程间共享进程的资源
- 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
- 同一进程中的线程切换,不会引起进程切换
- 不同进程中的线程切换,会引起进程切换
- 切换同进程内的线程,系统开销很小
- 切换进程,系统开销较大
4、线程的实现方式
用户级线程:用户级线程由程序线程库实现,所有的线程管理有应用程序负责管理。在用户态下面运行。
内核级线程:内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
5、三种多线程模型