操作系统笔记第二章【进程的描述与控制】
进程的描述与控制
在传统的操作系统中,为了提高资源的利用率和系统吞吐量,通常采用多道程序技术,将多个程序同时装入内存,并使之并发运行,传统意义上的程序不再能独立运行。此时作为资源分配和独立运行的基本单位都是进程。操作系统所具有的的四大特征也都是基于进程而形成的,并从进程的角度对操作系统进行研究。在操作系统中,进程是一个极其重要的概念。
前趋图和程序执行
前趋图(DAG)
所谓前趋图是指一个有向无环图,它用于描述进程之间执行的先后顺序。
节点之间有边说明两节点之间存在偏序关系。
没有前趋的节点称为初始节点,没有后继的节点叫做终止节点。
程序顺序执行
程序顺序执行时的特征:1.顺序性,2.封闭性,3.可在观性。
程序并发执行
程序并发执行的特征:1. 间断性,2.失去封闭性,3.不可再现性。
进程的描述
进程的定义和特征
为了使参与并发执行的每个程序都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。这样,由程序段、相关的数据结构和PCB三部分便构成了进程实体(又称进程映象)。
关于进程比较经典的定义有:
1. 进程是程序的一次执行。
2. 进程是一个程序及其数据在处理机上顺序执行时所发生的的活动。
3. 进程是具有单独功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程是进程实体的运动过程,是计算机进行资源分配和调度的一个独立单位。
-
进程的特征
- 动态性:进程的实质是进程实体的执行过程。
- 并发性:是指多个进程实体同存于内存中。
- 独立性:在传统的OS中,独立性是指进程实体是一个能独立运行、独立获取资源和接收调度的基本单位。
- 异步性:是指进程按异步的方式运行的,即按各自独立的、不可预知的速度向前推进。
进程的基本状态及转换
-
进程的三种基本状态
- 就绪状态
- 执行状态
- 阻塞状态
-
三种基本状态的变换
上图就绪->阻塞,阻塞->执行箭头反了,不想重做了~
-
创建状态和终止状态
- 创建状态
进程是创建产生的。首先由一个进程申请一个空白的PCB,并向PCB里填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后把该进程转入就绪状态插入就绪队列中。
进程所需资源尚得不到满足无法就绪的进程状态称为创建状态。 - 终止状态
等待操作系统进行善后处理,然后将其PCB清零,并将PCB空间返还给系统。
- 创建状态
挂起操作和进程状态的转化
-
挂起操作的引入
- 终端用户的需要。
- 父进程请求。
- 负荷调节的需要。
- 操作系统的需要。
- 对换需要
-
引入挂起原话操作后三个进程状态的转换
- 活动就绪->静止就绪
- 活动阻塞->静止阻塞
- 静止就绪->活动就绪
- 静止阻塞->活动阻塞
-
引入挂起操作后五个进程状态的转换
- NULL->创建
- 创建->活动就绪
- 创建->静止就绪
- 执行->终止
操作系统中的数据结构
- 操作系统中用于管理控制的数据结构
OS管理的这些数据结构一般分为以下四类:内存表、设备表、文件表、进程表。
-
进程控制块PCB的作用 为了便于系统描述和管理进程的运行,OS的核心为每个进程专门定义了一个数据结构进程控制块PCB。
- 作为独立运行基本单位的标志
- 能实现间断性运行方式
- 提供进程所需要的信息
- 提供进程调度所需要的信息
- 实现与其他进程的同步于通信
-
进程控制块中的信息
- 进程识别符
- 外部识别符
- 内部识别符
- 处理机状态
- 进程调度信息
- 进程控制信息
- 进程识别符
-
进程控制块的组织方式
- 线性方式
- 链接方式
- 索引方式
进程控制
进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。
进程控制一般是由OS的内核中的原语实现的。
操作系统内核
现代操作系统华为若干层,与硬件紧密相关的模块、各种驱动程序以及运行频率较高的模块安排在紧靠硬件的软件层次中,将它们常驻内存,通常被称为OS内核。
两个目的:一是对于这些软件的保护,放置遭受其他应用程序的破坏;二是可以提高OS的运行效率。
为了方式OS本身以及相关数据遭到破坏,处理机执行状态分为:
1. 系统态(管态,内核态):有较高权限,能执行一切指令。
2. 用户态(目态):具有较低特权的执行状态。
- 支撑功能
- 中断处理
- 时钟管理
- 原语操作
- 资源管理功能
- 进程管理
- 存储器管理
- 设配管理
进程的创建
- 进程的层次结构
OS中,允许一个进程创建另一个进程,PCB中设置了家族关系表。
- 进程图
进程图就是用于描述进程关系的一棵又向树。
- 引起创建进程的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
- 进程的创建
- 申请空白的PCB
- 为新进程分配其运行资源
- 初始化PCB
- 初始化标识信息
- 初始化处理机状态信息
- 初始化处理机控制信息
- 插入就绪队列
进程的终止
- 引进进程终止的事件
- 正常结束
- 异常结束
- 外界干预
- 进程终止的过程
- PCB集合中检索出该进程的PCB
- 终止进程的执行
- 终止子进程
- 将被终止进程所拥有的资源归还父进程
- 将终止进程PCB从所在队列中移出
进程的阻塞与事件
- 引起进程阻塞和唤醒的事件
- 向系统请求共享资源失败
- 等待与某种操作的完成
- 新数据尚未到达
- 等待新任务的到达
- 进程阻塞的过程
正在执行的进程发生上述事件,进程边通过阻塞原语block将自己阻塞。
阻塞是一种主动行为。 - 进程唤醒过程
当阻塞过程所期待的时间发生时,有关进程调用唤醒原语wakeup。wakeup执行过程是:现将被阻塞的进程从等待该事件的阻塞队列移出,将其PCB中现行状态改为就绪,然后将该PCB插入就绪队列。
进程的挂起与激活
-
进程的挂起
当系统中出现挂起事件时,OS利用挂起原语suspend将进程挂起。
-
进程的激活过程
当系统中发生激活进程事件时,OS将利用激活原句active,将指定进程激活。
进程同步
进程同步的基本概念
进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享资源,并能很好地相互合作。
- 两种形式的制约关系
- 间接相互制约关系
- 直接相互制约关系
- 临界资源
诸如打印机、磁带机等都属于临界资源,进程之间采用互斥方式。
- 临界区
每个进程中访问邻接资源的代码称为临界区。
- 同步机制应遵循的规则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
硬件同步机制
- 关中断
- 利用Test and Set指令实现互斥
- 利用Swap指令实现进程互斥
信号量机制
- 整型型号量
- 记录型信号量
- AND型型号量
- 信号量集
信号量应用
- 利用信号量实现进程互斥
- 利用信号量实现前趋关系
管程机制
- 管程的定义
管程由四部分组成:①管程的名称;②局部对于管程的共享数据结构说明;③对该数据结构进行操作的一组过程;四队局部于管程的共享数据设置初始值的语句。
- 条件变量
经典的同步问题
生产者-消费者问题
哲学家进餐问题
读者——写者问题
进程通信
进程通信是指进程之间的信息交换
由于进程的互斥同步需要交换一定信息,也归为进程通信,不过只是低级进程通信。
低级的原因:①效率低;②通信对用户不透明。
进程之间传输数据时,应当利用OS提供的高级通信工具,该工具特点:
①使用方便。
②高效地传送大量数据。
进程通信的类型
- 共享存储器系统
- 基于共享数据结构的通信方式
- 基于共享存储区的通信方式
- 管道通信系统
连接一个读进程一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。 管道机制必须提供的三方面的协调能力: ①互斥 ②同步 ③确定对方是否存在,只有对方已存在才能进行通信。
- 信息传递系统
- 直接通信方式
- 间接通信方式
- 客户机-服务器系统
- 套接字
套接字就是一个通信标识类型的数据结构,包括了: 通信目的地址、通信使用端口号、通信网络所在的网络地址、不同的系统调用(API函数等) 通常,套接字分为两类: ①基于文件型 ②基于网络型
- 远程过程调用
- 远程方法调用
- 套接字
消息传递通信的实现方式
- 直接信息传递系统
- 直接通信原语
- 对称寻址方式
send(receiver,message) receive(sender,message)
- 非对称寻址方式
send(P,message) receive(id,messaage)
- 对称寻址方式
- 消息的格式
- 进程的同步方式
- 通信链路
- 直接通信原语
- 信箱通信
- 结构:信箱头、新箱体
- 信箱通信原语
- 信箱通信类型
私用信箱、公用信箱、共享信箱
直接信息传递系统实例
- 信息缓冲队列通信机制中的数据结构
- 发送原语
- 接收原语
线程的基本概念
### 线程的引入
为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发行。
- 进程的两个基本属性
- 进程是一个可拥有资源的独立单位
- 进程同时又是一个可独立调度和分派的基本资源
- 进程并发执行所需付出的时空开销
为了能使进程能够并发执行,系统必须要: 1、创建进程;2、撤销进程;3、进程切换 所以系统要为之付出很大的时空开销
- 线程——作为调度和分派的基本单位
如何能使多个程序更好地并发执行,同时又尽量减少系统开销~~~ 这种思想下引入了线程。
线程与进程的比较
线程称为轻型进程,传统进程称为重型进程
- 调度的基本单位
- 并发性
- 拥有资源
线程本身并不具有系统资源,而是仅有一点必不可少、能够保证独立运行的资源。
- 独立性
同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多
- 系统开销
线程创建、切换、撤销的代价远低于进程的
- 支持多处理机系统
线程的状态和线程的控制块
-
线程运行的三个状态
- 执行状态
- 就绪状态
- 阻塞状态
-
线程控制块TCB
系统给线程配置了PCB,PCB包括:
- 线程标识符
- 一组寄存器
- 线程运行状态
- 优先级
- 线程专有存储区
- 信号屏蔽
-
多线程OS中的进程属性
- 进程是一个可拥有资源的基本单位
- 多个线程可以并发执行
- 进程已不是可执行的实体
线程的实现
线程的实现方式
线程在许多系统已经实现,但各系统的实现方式并不完全相同。
-
内核支持线程
这种线程的实现方式有四个主要优点:
- 多处理器系统中,内核能够同时调度同一进程中的多个线程并行执行
- 如果进程中的一个线程被阻塞了,内核可以调度该进程中的其他线程占有处理器运行,也可以运行其他进程中的线程。
- 内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小。
- 内核本身也采用多线程技术,可以提高系统的执行速度和效率。
-
用户级线程
用户级线程与内核无关,都是在用户空间中实现的。
-
组合方式
有些OS把用户级线程和内核支持线程两种方式进行组合
- 多对一模型
- 一对一模型
- 多对多模型
线程的实现
- 内核支持线程的实现
系统在创建一个新进程时,给它分配一个任务数据区PTDA,其中包括若干个线程控制块TCB空间。 每当进程要创建一个新线程时,便为新线程分配一个TCB,将有关信息填入该TCB中,并为之配置必要的资源。
- 用户级线程的实现
- 运行时系统
- 内核控制线程
线程的创建和终止
-
线程的创建
在创建新进程时,需要利用一个线程创建函数。在系统的创建函数执行完后,将返回一个线程识别符供以后使用。
-
线程的终止
当一个线程完成了自己的任务后,由终止函数通过调用相应的函数对它执行终止操作。
习题
- 什么是前趋图,为什么要引入前趋图?
前趋图是一个有向无环图,记为DAG,用于描述进程之间的前后关系。
- 画出下面四条语句的前趋图:
S1:a=x+y
S2:b=z+1
S3:c=a-b
S4:w=c+1
答案略
- 为什么程序并发执行会产生间断性特征?
程序在并发执行时,由于它们共享资源,以及为完成同一项任务而相互合作,导致这些并发执行的进程之间,形成了相互制约的关系,从而也就使得进程在执行期间出现了间断性。
- 程序并发执行时为什么会失去封闭性和可再现性?
答:因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。而程序一旦失去了封闭性也会导致失去可再现性。
- 在操作系统中为什么要引入进程的概念?他会产生什么样的影响?
为了使程序在多到程序环境下能并发执行,并对并发执行的程序加以控制和描述,从而在操作系统中引入了进程概念。影响:使程序的并发执行得以实行。
- 试从动态性、并发性、独立性上比较进程和程序。
动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程有一定的生命期;而程序只是一组有序指令的集合,是静态实体。
并发性是进程重要的特征,同时也是OS的重要特征。引入进程的目的正是为了使其程序和其他建立了进程的程序并发执行,而程序本身是不能并发执行的。
独立性是指进程实体是一个独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。而对于未建立任何进程的程序,都不能作为一个独立单位来运行。
- 试说明PCB的作用具体表现在哪几个方面?为什么说PCB是进程存在的唯一标志?
PCB是进程实体的一部分,是操作系统总最重要的记录型数据结构。PCB中记录了操作系统所需用于描述进程情况及控制进程所需的全部信息。因而它的作用是使一个在多到程序环境下不能独立运行的程序,成为一个独立运行的基本单位,一个能和其他进程并发执行的过程。
在进程的整个生命周期中,系统总是通过PCB对进程进行控制,系统是根据进程PCB而不是任何别的什么而感知该进程存在的,所以说PCB是进程存在的唯一标志。
- 试说明进程在三个基本状态之间的转化的典型原因。
(1)就绪状态->执行状态:进程分配到CPU资源。
(2)执行状态->就绪状态:时间片完成
(3)执行状态->阻塞状态:I/O请求
(4)阻塞状态->执行状态:I/o完成
- 为什么要引入挂起状态?该状态有哪些性质?
1. 终端用户的需要。
2. 父进程请求。
3. 负荷调节的需要。
4. 操作系统的需要。
5. 对换需要
- 是说明线程有哪些属性?
(1)轻型实体
(2)独立调度和分派的基本单位
(3)可并发执行
(4)共享进程资源