操作系统进程与线程篇章
`
文章目录
- 操作系统进程与线程篇章
- 前言
- 一、进程概念
-
- 进程控制块
- 进程创建
- 进程终止
- 进程的阻塞和唤醒
-
- 进程唤醒
- 进程挂起和激活
- 线程
-
- 多线程
- 线程实现与线程模型
- 总结
-
- 互斥和同步
- 并发原理
- 硬件同步
- 信号量机制
- 信号量的应用
- 管程
- 经典同步问题
- 消息传递
前言
一、进程概念
3.1.1 程序的顺序执行及其特征
-
程序的顺序执行
通常可以把一个应用程序分成若干个程序段,各程序段之间必须按照某种先后次序顺序执行,仅当前一程序段(操作)执行完后,才能执行后继程序段(操作)。 -
程序的顺序执行
图 3.1 多道程序的顺序执行
3.1.1 程序的顺序执行及其特征
- 顺序性:处理机的操作严格按照程序所规定的顺序执行,即每一操作必须在上一个操作结束之后开始。
- 封闭性:程序是在封闭的环境下执行的,即程序运行时独占整个系统资源,资源的状态(除初始状态外)只有本程序可以改变。
- 可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它的执行方式如何,是连续执行,还是“走走停停”的执行,其结果都是相同的。
3.1.2 程序的并发执行及其特征
- 程序的并发执行
为了提高计算机的利用率、处理速度和系统的吞吐量,并行处理技术和并发程序设计技术在计算机中已经得到了广泛应用,成为了现代操作系统的基本特征之一。
前趋图的引入:前趋图是一个有向无环图(Directed Acyclic Graph, DAG)
考虑具有以下四条语句的一个程序段:
S1: a:=x+2;
S2: b:=y+4;
S3: c:=a+b;
S4: d:=c+b;
3.1.2 程序的并发执行及其特征
- 间断(异步)性:程序在并发执行时,由于它们共享系统资源,以及为了完成同一任务而相互合作,致使这些并发程序之间形成了相互制约的关系。
- 失去封闭性:程序在并发执行时,多个程序共享系统中的各种资源,因此,系统资源的状态将由多个程序来改变,致使程序失去了封闭性。
3.不可再现性: 程序在并发执行时,由于失去了封闭性,也将导致其失去执行的可再现性。
3.1.3 进程的概念及其特征
使程序能够并发执行,并能够对并发执行的程序进行描述和控制 ——进程
已有的进程定义:
- 进程是程序的一次执行;
- 进程是可以和别的计算并发执行的计算;
- 进程是定义在一个数据结构上,并能够在其上进行操作的一个程序;
- 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
我们将进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
程序和进程之间的区别与联系:
程序是完成特定任务的一组指令的结合,可以永久保存,具有静态性;
进程是程序在某一数据结构上的一次执行过程,是系统进行资源分配和调度的基本单位,具有动态性;
一个进程可以包含多个程序,一个程序也可以被多个进程执行。
3.1.4 进程状态
包含 运行态(Running) 和 非运行态(Not running) 两种进程状态
创建了一个新进程之后,它会以非运行态加入到系统中,等到操作系统为其分派处理器
当前处于运行态的进程会不时地中断,由系统中的分派器选择处于非运行状中的某一个进程运行
2.五状态模型
- 包括就绪态(Ready)、运行态(Running)、阻塞态(Blocked)、新建态(New)和终止态(Terminate)
进程状态描述:
新建态:刚刚创建的新进程,通常是指进程控制块已经创建,但还没有加载到系统内存中的进程。
就绪态:进程等待系统为其分派处理器,而此时处理器被其它进程占据,所以该状态进程不能执行,但已经具备了除处理器之外的进程执行所需要的所有条件。
运行态:进程已获得所需资源并占据处理器,处理器正在执行该进程。
阻塞态:也称为等待态、挂起态或睡眠态,进程在等待某个事情的发生而暂时不能运行,例如等待某个I/O操作的完成。
终止态:进程或者因为执行结束或者因为被撤销而从可执行进程组中退出。
进程状态间可能的转换及原因有:
- 新建→就绪:系统纳入一个新进程。
- 就绪→运行:进程被调度程序选中,占据处理器而进入运行状态。
- 运行→终止:进程运行结束或被撤销则退出系统进入终止态。
- 运行→就绪:进程分配的占据处理器的时间片已经用完,或者是具有更高优先级的进程进入系统,当前正在运行的进程被抢占了处理器,此时进程从运行态转换到就绪态。
- 运行→阻塞:进程在等待系统分配资源或者等待某些事件的发生,进程让出处理器由运行态转入阻塞态。
- 阻塞→就绪:处于阻塞队列中的进程等待的资源可用或者等待的事件发生之后,进程从阻塞态转换到就绪态,等待处理器选中它运行。
挂起状态的引入
对于内存中的多个进程,处理器依次选中运行,当一个进程正在等待I/O事件发生时,处理器转移到另一个进程。但是,处理器的速度比I/O要快很多,有可能内存中所有进程都在等待I/O事件的完成,导致处理器处于空闲状态。
引入挂起(Suspend)的概念:内存中没有就绪的进程时,系统将内存中处于阻塞的进程换出到外存中的挂起队列,而将外存中的就绪进程激活,换入到内存.
进程控制块
进程控制块(Process control block, PCB)是操作系统用来记录进程状态和相关信息,控制进程运行的数据结构,是进程的唯一标识符.
在PCB中,主要包含如下的信息:
进程控制是进程管理中最基本的功能
在操作系统中,不同功能都是通过执行各种原语(Primitive)操作实现
原语是由若干条指令构成、可完成特定功能的程序段.
进程创建
引起进程创建的事件:
批处理作业
用户登录
提供服务
进程派生
创建一个新进程的具体步骤:
(1)系统为新建进程申请一个空白的进程控制块,获得一个唯一的进程标识符。
(2)系统为新建进程分配运行所需的资源,包括:内存、处理器时间、I/O设备等。
(3)进程控制块(PCB)初始化。
(4)设置链接,如果就绪队列允许新进程插入,则将新进程插入就绪队列。
引起进程终止的事件:
进程终止
终止原语的具体步骤:
(1)根据需要终止进程的进程标识符,从PCB集合中查找对应的进程,从中读出该进程的状态。
(2)若被终止进程正处在执行状态,则应立即终止该进程的执行,并设置相应的调度信息,用于指示该进程被终止后应重新进行调度。
(3)将被终止进程所拥有的所有资源归还给其父进程,或者归还给系统。
(4)若被终止进程还拥有子孙进程,则将其所有子孙进程一并终止。
(5)归还PCB所占据的空间。
进程的阻塞和唤醒
进程阻塞是指进程在执行过程中因等待某个事件的发生或等待某个操作的完成而不得不让出处理器。
引起进程阻塞的主要事件有:
- 请求系统服务。
- 启动某种操作。
- 新数据尚未到达。
- 无新工作可做。
阻塞原语(Block primitive)的具体步骤:
(1)正在执行的进程立即终止执行,把PCB中的进程状态由执行改为阻塞,并将处理机状态写入PCB中。
(2)将PCB插入阻塞队列中,等到事件的发生或操作的完成。
(3)系统将处理机重新分派给另一就绪进程,按照新进程的处理机状态更新处理机环境,