第二章 进程的描述与控制
2.1 前趋图和程序执行
2.1.1 前趋图
- 定义
定义:所谓前趋图,是指一个有向无循环图,可记为DAG.
*进程(或程序)之间的前趋关系可用“ → ”来表示。
*每个节点还具有一个重量,用于表示该节点所含有的程序量或程序的执行时间。
*前驱图中不允许循环。
2.1.2 程序顺序执行
- 程序的顺序执行
- 程序顺序执行时的特征
- I代表输入操作。 C代表计算机操作。 P为打印操作。
- ①顺序性: 每一操作必须在下一操作开始之前结束
②封闭性: 程序运行时独占全机资源,资源的状态(除出始状态外)只由本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响。
③可再现性: 只要程序执行时的环境和初始条件相同,都可以获得相同结果。
2.1.3 程序并发执行
- 程序的并发执行
- 程序并发执行时的特征
☞ 多道程序的优点:增加了CPU的利用率和作业吞吐量。
✦与单道程序相比,多道程序的工作环境变化主要表现在:
1>资源共享
2>程序的并发执行
☞并发执行的特性:
①间断性
②失去封闭性
③不可再现性:程序执行时的环境和初始条件相同,但结果可能不相同。
2.2进程的描述
2.2.1 进程的定义和特征
- 进程的定义
- 进程的特征
1.进程控制块(PCB):为了使参与并发执行的每个程序(含数据)都能独立的运行,
在操作系统中必须为之配置一个专门的数据结构。称之为进程控制块。
2.进程的定义:
(1)进程是程序的一次执行。
(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
★(3)进程是具有独立功能的程序在一个数据集合上的运行的过程,它是系统
进行资源调度和分配的一个独立单位。
(4)在引入进程实体之后,我们可以把传统OS中的进程定义为:
※进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程 = PCB + 程序段 + 数据段
3.进程的特征:
(1)动态性
(2)并发性
(3)独立性
(4)异步性
4.进程与程序的区别和联系:
进程:是程序的一次执行,是动态概念。一个进程可以同时包括多个程序;
进程是暂时的,是动态的产生和消亡的。
程序:是一组有序的静态指令,是静态概念。一个程序可以是多个进程的
一部分;程序可以作为资料长期保存。
2.2.2 进程的基本状态及转换
- 进程的三种基本状态
- 三种基本状态的转换
- 创建和终止状态
1.(1)就绪状态:这是指进程已处于准备好运行的状态,即进程已分配到处CPU以外的所有必要资源后,只要在获得CPU,便可立即执行。
(2)执行状态:指进程以获得CPU,其程序正在执行的状态。
(3)阻塞状态:这是指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,亦即进程执行受到阻塞。
2.进程三种状态/五种状态的基本转换。 - -- -见课本P37详解。
2.2.3挂起操作和进程状态的转换
- 挂起操作的引入
- 引入挂起原语操作后三个进程状态的转换
- 引入挂起操作后五个进程状态的转换
1.挂起操作的引入:
(1)终端用户的需要
(2)父进程请求
(3)负荷调节的需要
(4)操作系统的需要
2.三个状态的转换:
(1)活动就绪 → 静止就绪
(2)活动阻塞 → 静止阻塞
(3)静止就绪 → 活动就绪
(4)静止阻塞 → 活动阻塞
————见P39图2-7
3.五个状态的转换:
(1)NULL → 创建
(2)创建 → 活动就绪
(3)创建 → 静止就绪
(4)执行 → 终止
2.2.4 进程管理中的数据结构
- 操作系统中用于管理控制的数据结构
- 进程控制块PCB的作用
- 进程控制块的信息
- 进程控制块的组织方式
1.在计算机系统中,对于每个资源和每个进程都设置一个数据结构,
用于表征其实体,我么们称之为(资源信息表)或(进程信息表)。
▶OS管理这些数据结构一般分为四类:内存表、设备表、文件表和进程表。
▶见P39 图2-9 操作系统控制表的一般结构。
2.PCB作用:
(1)作为独立运行基本单位的标志
(2)能实现间断性的运行标志
(3)提供进程管理所需要的信息
(4)提供进程调度所需要的信息
(5)实现与其他进程的同步与通信
3.进程控制块中的信息:
(1)进程标识符
①外部标识符。方便用户对进程的访问
②内部标识符。方便系统对进程的使用
(2)处理及状态
处理机状态信息也称为处理机的上下文,主要是由处理机的各种寄存器中的内容组成的。
这些寄存器包括:
①通用寄存器
②指令计数器
③程序状态字PSW
④用户栈指针
(3)进程调度信息
①进程状态,指明进程的当前状态,它是作为进程调度和对换时的依据。
②进程优先级,是用于描述进程使用处理机的优先级别的一个整数。
③进程调度所需要的其他信息,它们与所采用的进程调度算法有关。
④事件,是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。
(4)进程控制信息
①程序和数据的地址,进程实体中的程序和数据的内存或外存地址,
以便在调度到改进程时,能从PCB中找到其程序和数据。
②进程同步和通信机制,这是实现进程同步和进程通信时必需的机制。
③资源清单,在该清单中列出了进程在运行期间所需要的全部资源,另外
还有一张已分配到该进程的资源的清单。
4.进程控制块的组织方式:
④链接指针,他给出本进程(PCB)所在队列的下一个进程的PCB的首地址。
①线性方式
②链接方式
③索引方式
——见P42中详细介绍。
2.3进程控制
2.3.1 操作系统内核
大多数操作系统内核包括两大方面的内容:
- 支撑功能
- 资源管理功能
通常将处理机的执行状态分为系统状态和用户状态两种。
①系统态:又称为管态,也称为内核态。
②用户态:又称为目态。
1.支撑功能:
(1)中断处理
(2)时钟管理
(3)原语操作
2.资源管理功能:
(1)进程管理
(2)存储器管理
(3)设备管理
2.3.2 进程的创建
- 进程的层次结构
- 进程图
- 引起创建进程的事件
- 进程的创建
进程的层次结构:
通常,把创建进程的进程成为--父进程;把被创建进程的进程成为子进程。
在UNIX中,进程与其子孙进程共同组成一个进程家族(组)。
但在Windows中不存在任何进程层次结构的概念。
引起进程创建的事件:
(1)用户登录
(2)作业调度
(3)提供服务
(4)应用请求
进程的创建:
(1)申请空白PCB为新进程申请获得唯一的数字表示符,并从PCB集合中索取一个空白PCB。
(2)为新进程分配其运行所需的资源。
(3)初始化进程控制块
(4)如果程序就绪队列能够接纳新进程,便将新进程插入就绪队列。
2.3.3 进程的终止
- 引起进程终止的事件
- 进程终止的过程
引起进程终止的事件:
(1)正常结束。
(2)异常结束:
①越界错,这是指程序所访问的存储区,已越出该程序的区域。
②保护错,指进程试图去访问一个不允许访问的资源或文件。或者以不适当的方式进行访问。
③非法指令,指程序试图去执行一个不存在的指令。
④特权指令错,指用户进程试图去执行一条只允许OS执行的指令。
⑤运行超时,指进程的执行时间超过了指定的最大值。
⑥等待超时,指进程等待某事件的时间超过了规定的最大值。
⑦算术运算错,指进程试图去执行一个被禁止的运算。
(3)外界干预:① ② ③
进程终止的过程:
(1)根据被终止进程的标识符,从PCB集合中j检索出该进程的PCB,从中读出该进程的状态。
(2)若被终止的进程的处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。
(3)若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以方他们成为不可控的进程。
(4)将被终止的进程所拥有的全部资源或者归还其父进程,或者归还给系统。
(5)将被终止的进程(PCB)从所在的队列(或链表)中移除,等待其它程序来搜集信息。
2.3.4 进程的阻塞与唤醒
- 引起进程阻塞和唤醒的事件
- 进程阻塞过程
- 进程唤醒过程
有下述几类事件会引起进程阻塞或被唤醒:
(1)向系统请求共享资源失败。
(2)等待某种操作的完成
(3)新数据尚未到达
(4)等待新任务的到达
2.3.5 进程的挂起与激活
- 进程的挂起
- 进程的激活过程
2.4 进程同步
2.4.1 进程同步的基本概念
- 两种形式的制约关系
- 临界资源
- 临界区
- 同步机制应遵循寻的规则
- 两种形式的制约关系:
(1)间接相互制约关系
(2)直接相互制约关系 - 临界资源:
- 临界区:
---人们把每个进程中访问临界资源的那段代码成为临界区。
可以把一个访问临界资源的循环过程描述如下:
while(TRUE){
进入区
临界区
退出区
剩余区
}
- 同步机制应遵循的规则
(1)空闲让进
(2)忙则等待
(3)有限等待
(4)让权等待
2.4.2 硬件同步机制
- 关中断
- 利用Test-And-Set指令实现互斥
- 利用Swap指令实现进程互斥
1.关中断是实现互斥的最简单的方法之一。
缺点:①滥用关中断权力会导致严重后果
②关中断时间过长,会影响系统效率。限制处理器交叉执行的能力
③关中断方法也不适用于多CPU系统
2.4.3 信号量机制
- 整形信号量
- 记录型信号量
- AND型信号量
- 信号量集
2.4.4 信号量的应用
- 利用信号量实现进程互斥
- 利用信号量实现前驱关系
2.4.5 管程机制
- 管程的定义
- 条件变量
1.管程的定义:
代表共享资源的数据结构以及由对该共享数据结构实时操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块,我们称之为管程。
- 管程可分为四部分:
①管程的名称
②局部于管程的共享数据结构说明
③对该数据结构进行操作的一组进程
④对局部于管程的共享数据结构设置初始值的语句
3.从语言角度看,管程有以下特征:
①模块化,即管程是一个基本程序单位,可以单独编译。
②抽象数据类型,指管程中不仅有数据,还有对数据的操作。
③信息掩蔽,指管程中的数据结构只能被管程中的过程访问,这些过程是也是在管程内部定义的供管程外的进程调用,而管程的中的数据结构以及过程(函数)的具体实现外部不可见。
4.管程和进程的不同:
①虽然二者都定义了数据结构,但进程定义的是‘私有’的数据结构PCB,管程定义的是‘公共‘数据结构。
②二者都存在对各自数据结构上的操作,但进程是由顺序程序执行有关操作,而管程主要进行同步操作和初始化操作。
③设置进程的目的在于实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题。
④进程通过调用管程中的过程对共享数据结构实行操作,该过程就如通常的子进程一样被调用,因而管程为被动工作方式,进程则为主动工作方式。
⑤进程之间能并发执行,而管程不能与其调用者并发。
⑥进程具有动态性,由“创建”而诞生,由“撤销”而消亡。而管程则是操作系统中的一个资源管理模块,供进程调用。
2.5经典进程的同步问题
2.5.1 生产者-消费者问题
- 利用记录型信号量解决生产者-消费者问题
- 利用AND信号量解决生产者-消费者问题
- 利用管程解决生产者-消费者问题
2.5.2哲学家进餐问题
- 利用记录型信号量解决哲学家进餐问题
- 利用AND信号量解决哲学家进餐问题
2.5.3 读者-写者问题
- 利用记录型信号量解决读者-写者问题
- 利用信号量集机制解决读者-写者问题
2.6 进程通信
2.6.1 进程通信的类型
- 共享存储器系统
- 管道通信系统
- 消息传递系统
- 客户机-服务器系统
进程通信是指进程之间的信息交换。
在进程之间要传送大量数据时,应当利用OS提供的高级通信工具,该工具最主要的特点是:
(1)使用方便
(2)高效地传送大量数据
共享存储器系统:
(1)基于共享数据结构的通信方式。
(2)基于共享存储区的通信方式。
管道通信系统:
所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间的通信的一个共享文件,又名pipe文件。
管道机制必须提供三种协调机制 :
①互斥
②同步
③确定对方是否存在,只有确定对方已存在时才能进行通信。
消息传递系统:
消息传递系统的通信方式属于高级通信方式:
(1)直接通信方式
(2)间接通信方式
客户机-服务器系统:
(1)套接字
一个套接字就是一个通信标识类型的数据结构
套接字包括两类:
①基于文件型
②基于网络型
(2)远程过程调用和远程方法调用
远程过程调用是一个通信协议,用于通过网络连接的系统。
2.6.2 消息传递通信的实现方式
- 直接消息传递系统
- 信箱通信
直接消息传递系统:
(1)直接通信原语
①对称寻址方式
send(receiver,message) 发送一个消息给接收进程
receive(sender,message) 接收Sender发来的消息
②非对称寻址方式
send(P,message) 发送一个消息给进程P。
receive(id,message) 接收来自任何进程的消息,id变量可设置为进行通信的发送方进程的id或名字。
(2)消息的格式
(3)进程的同步方式
①发送进程阻塞,接收进程阻塞。
②发送进程不阻塞,接收进程阻塞。
③发送进程和接收进程均不阻塞。
(4)通信链路
1.有两种方式建立通信链路:
第一种方式 --- ???
第二种方式 --- ???
2.链路可分为两种:
①单向通信链路
②双向通信链路
1.信箱通信属于间接通信方式,即进程之间的通信,需要通过某种中间实体(如共享数据结构等)来完成。
- ✦信箱的结构
(1)信箱头
(2)信箱体
✦信箱通信原语
(1)邮箱的创建和撤销。
(2)消息的发送和接收。
Send(mailbox,message) 将一个消息发送到指定邮箱
Receive(mailbox,message)从指定邮箱中接收一个消息
✦信箱的类型
(1)私用邮箱
(2)公用邮箱
(3)共享邮箱
①一对一关系
②多对一关系
③一对多关系
④多对多关系
2.6.3 直接消息传递系统实例
- 消息缓冲队列通信中的数据结构
- 发送原语
- 接收原语
1.消息缓冲队列通信中的数据结构
(1)消息缓冲区
(2)PCB中有关通信的数据项
2.7 线程的基本概念
2.7.1 线程的引入
- 进程的两个基本属性
- 程序并发执行所需要付出的时空开销
- 线程—作为调度和分派的基本单位
1.两个基本属性:
(1)进程是一个可拥有资源的独立单位。
(2)进程同时又是一个可独立调度和分派的基本单位。
2.程序并发执行所需要付出的时空开销:
(1) 创建进程
(2)撤销进程
(3)进程切换
2.7.2 线程与线程的比较
- 调度的基本单位
- 并发行
- 拥有资源
- 独立性
- 系统开销
- 支持多处理系统
2.7.3线程的状态和线程控制块
- 线程运行的三个状态
- 线程控制块TCB
- 多线程OS中的进程属性
1.三个状态:
执行状态
就绪状态
阻塞状态
2.TCB:
(1)线程控制标识符
(2)一组寄存器
(3)线程运行状态
(4)优先级
(5)线程专有存储区
(6)信号屏蔽
(7)堆栈指针
3.进程属性:
(1)进程是一个可拥有资源的基本单位。
(2)多个线程可并发执行。
(3)进程已不是可执行的实体。
2.8 线程的实现
2.8.2 线程的实现方式
- 内核支持线程KST
- 用户级线程ULT
- 组合方式
2.8.2 线程的实现
- 内核支持线程的实现
- 用户级线程的实现
2.8.3线程的终止和创建
- 线程的创建
- 线程的终止