一、进程的概念、组成、特征
进程的概念
进程的组成——PCB
进程的组成——程序段、数据段
知识滚雪球:程序是如何运行的?
进程的组成
进程的特征
知识回顾与重要考点
二、进程的状态与转换
进程的状态——创建态、就绪态
进程的状态——运行态
进程的状态——阻塞态
进程的状态——终止态
进程状态的转换
进程的状态
进程的组织——链接方式
进程的组织
进程的组织——索引方式
进程的组织
知识回顾与重要考点
三、进程控制
什么是进程控制?
如何实现进程控制?
原语是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断
如何实现原语的“原子性”?
进程控制相关的原语
那么什么是“进程运行环境信息”呢?
知识滚雪球:程序是如何运行的?
CPU中会设置很多“寄存器”,用来存放程序运行过程中所需的某些数据。
这些指令顺序执行的过程中,很多中间结果是放在各种寄存器中的
当原来的进程再次投入运行时,可以通过PCB恢复它的运行环境
知识回顾与重要考点
学习技巧:进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:
- 更新PCB中的信息
a.所有的进程控制原语一定都会修改进程状态标志
b.剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c.某进程开始运行前必然要恢复其运行环境 - 将PCB插入合适的队列
- 分配/回收资源
四、进程通信(IPC)
什么是进程间通信?
进程间通信(Inter-Process Communication, IPC
)是指两个进程之间产生数据交互。
为什么进程通信需要操作系统支持?
因此,操作系统为进程通信提供了三种方式:
(1)
(2)
(3)
共享存储
消息传递
消息传递(直接通信方式)
消息传递(间接通信方式)
进程通信——管道通信
知识回顾与重要考点
修正
五、线程概念(多线程模型)
什么是线程,为什么要引入线程?
引入线程机制后,有什么变化?
线程的属性
六、线程的实现方式(多线程模型)
线程的实现方式(用户级线程)
很多编程语言提供了强大的线程库,可以实现线程的创建、销毁、调度等功能。
- 线程的管理工作由谁来完成?
- 线程切换是否需要CPU变态?
- 操作系统是否能意识到用户级线程的存在?
- 这种线程的实现方式有什么优点和缺点?
线程如果是用”用户级线程“的方式来实现,cpu的调度单位依然是进程,操作系统是给进程分配cpu时间的。因此,即便我们的电脑是多核处理机,但是由于此时进程才是cpu调度的基本单位,因此,进程只能被分配一个核心,因此,这些线程并不能并行运行
线程的实现方式(内核级线程)
大多数现代操作系统都实现了内核级线程,如Windows、Linux
- 线程的管理工作由谁来完成?
- 线程切换是否需要CPU变态?
- 操作系统是否能意识到内核级线程的存在?
- 这种线程的实现方式有什么优点和缺点?
内核级线程的线程实现方式下,内核级线程是处理机调度的基本单位,而进程只作为分配资源的基本单位,因此在多核cpu的环境下,这几个线程可以分别分派到不同核心下并行执行
多线程模型(一对一模型)
多线程模型(多对一模型)
这些用户级线程不可能并行运行,因为只有内核级线程才是处理机的分配单位,如果一个进程只对应一个内核级线程,那么在同一时刻,这个进程只能被分配一个cpu的核心;如果给这个进程分配多个内核级线程的话,那么在多核环境下,这些内核级线程可以并行运行。但在考试中,如果提到“多对一的线程模型”,那么我们默认一个进程只被分配了一个内核级线程
多线程模型(多对多模型)
由于此时一个进程它有两个内核级线程,因此,其中一个内核级线程被堵塞了的话,另一个内核级线程可以继续运行下去,克服了多对一并发度不高的缺点