进程的描述与控制"/>
操作系统之进程的描述与控制
进程的描述与控制
(程序的抽象,抽象成一个实体,给出描述实体的信息,实体间的交互协作、实体间的调用、OS对实体的调用,OS存储实体的信息)
(OS建立一个世界,划分不同的角色,制定规则,描述这些角色,控制这些角色,使这些角色相互配合,使世界的运转效率高)
前趋图和程序执行
前趋图
前趋图(Precedence Graph):
指一个有向无循环图,可记为DAG(Directed Acyclic Graph),用于描述进程之间执行的先后顺序
图中的每个结点用来表示一个进程或程序段,乃至一条语句。
节点间的有向边表示两个结点之间存在的偏序或前趋关系。
进程之间的前趋关系用“->”来表示,表示为 ( P i , P j ) (P_i,P_j) (Pi,Pj)或 P i − > P j P_i -> P_j Pi−>Pj,表示 P j P_j Pj开始执行之前 P i P_i Pi必须完成,此时称 P i P_i Pi为 P j P_j Pj的直接前趋, P j P_j Pj为 P i P_i Pi的直接后继。
称没有前趋结点的结点为初始结点,没有后继结点的结点为终止结点。
每个结点具有权重,用于表示该结点所含有的程序量或程序的执行时间。
程序的顺序执行
通常一个程序由若干个程序段组成,执行时,按某种先后次序顺序执行,仅当前一段程序执行完之后,后一段程序才执行。
其特征有:
- 顺序性:处理机严格地按照程序所规定的顺序执行
- 封闭性:程序在封闭的环境下运行,即程序运行时独占全机资源
- 可再现性:只要程序执行时的环境和初始条件相同,程序不管怎样执行,其结果都一样。
程序并发执行
顺序执行系统资源的利用率很低,故一般为并发执行。
并非所有的程序都能并发执行,只有不存在前趋关系的程序才有可能并发执行。
并发执行指,两个或多个程序在同一段时间内同时运行。
其特征为:
- 间断性:并发程序具有“执行–暂停–执行”这种间断性的活动规律
- 失去封闭性:多个程序共享系统资源
- 不可再现性:程序的执行环境和初始条件相同,但多次执行,其结果也可能不同
进程的描述
-
进程的定义
当程序并发执行时,失去封闭性且不可再现。为了使程序可以并发执行,每次执行结果可以再现,且对并发执行的程序加以描述和控制,引入“进程”的概念。
-
进程控制块(Process Control Block, PCB):
用以描述进程的基本情况和活动过程,进而控制和管理进程。
-
进程实体:
由程序段、相关的数据段、PCB 三部分构成了进程实体。
-
进程的定义:
进程是进程实体的运行过程,是系统资源分配和调度的一个独立单位。
一般情况下,所谓创建进程,即创建进程实体中的PCB;撤销进程,即撤销进程的PCB
-
-
进程的特征:
-
动态性:
进程的实质是进程实体的执行过程,具有动态性。
-
并发性:
多个进程实体同存于内存中,且能在同一段时间内同时运行。
-
独立性:
进程实体是一个能独立运行、独立获得资源、独立接受调度的基本单位
-
异步性:
进程按异步的方式运行,即以不可预知的速度运行,但最终的结果相同
-
进程的基本状态及转换
-
进程的三种基本状态
进程在生命周期内具有多种状态
- 就绪状态(Ready):进程已处于准备好运行的状态,已分配到了除CPU外的所有必要资源,只要再获得CPU即可立即执行。
- 执行状态(Running):进程已获得CPU,其程序正在执行的状态。
- 阻塞状态(Block):正在执行的进程由于发生某事件(如I/O请求),无法继续执行,此时进程处于暂停状态,将这种状态称为阻塞状态。
-
三种基本状态的转换
进程在运行过程中,往往发生状态的转换。
-
创建状态和终止状态
为了满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,引入创建状态和终止状态。
-
创建状态:当进程处在创建的过程中时(申请PCB->在PCB中填写信息->…),此时系统不能被调度运行,将该状态称为创建状态。即就绪之前的状态。
引入创建状态是为了保证进程的调度必须在创建工作完成之后进行,以确保对进程控制块操作的完整性。同时,也增加了管理的灵活性。OS可以根据情况推迟新进程的创建。
-
终止状态:
进程的终止需要两个步骤:
- 等待操作系统进行善后处理
- 将PCB清零,并将PCB空间返还系统
当进程处于这两个过程中时,称为终止状态。
进程进入终止状态后不再执行,但在操作系统中仍保留一个记录,保存状态码和一些计时统计数据,供其他进程收集。
-
挂起操作和进程状态的转换
进程被挂起,即将进程从内存调入外存, 且意味着进程处于静止状态。如果进程正在执行,则将暂停执行;如果进程处于就绪状态,则进程暂不接受调度。
与之相对的是激活操作,从外存调入内存。
-
挂起操作的引入
其原因有:
- 终端用户的需要
- 父进程的请求
- 负荷调节的需要
- 操作系统的需要
-
进程状态的转换
- 活动就绪–>静止就绪
- 活动阻塞–>静止阻塞
- 静止就绪- ->静止阻塞
- 静止阻塞- ->活动阻塞
进程管理中的数据结构
为了便于对计算机中的各类资源的使用和管理,将其抽象为各种数据结构,并提供一组对资源进行操作的命令。
-
操作系统中用于管理控制的数据结构
操作系统中,对每个资源、进程都设置了一个数据结构,一般有:内存表、设备表、文件表、用于进程管理的进程表(又称为PCB)
-
进程控制块PCB
PCB作为进程实体的一部分,记录操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息。
其具体作用为:
- 作为独立运行基本单位的标志。PCB为进程存在于系统中的唯一标志
- 能实现间断性运行方式。进程阻塞时,系统将CPU现场信息保存在PCB中,供进程被再次调度时恢复CPU线程时使用.
- 提供进程管理所需要的信息。操作系统根据PCB中的信息对进程进行控制和管理。
- 提供进程调度所需要的信息。
- 实现与其他进程的同步和通信。如在每个进程中配备信号量。
-
进程控制块中的信息
-
进程标识符
进程标识符用于唯一地标识一个进程。一般有两种标识符:
- 外部标识符。方便用户对进程的访问
- 内部标识符。方便系统对进程的使用
-
处理机状态
处理机状态信息也称为处理机的上下文,由处理机的各种寄存器中的内容组成。
-
进程调度信息
- 进程状态
- 进程优先级
- 进程调度所需的其他信息
- 事件。进程阻塞原因
-
进程控制信息
- 程序和数据的地址
- 进程同步和通信机制
- 资源清单
- 链接指针
-
-
进程控制块的组织方式
用了有效的管理PCB,用适当的方式将PCB组织起来。
- 线性方式:将所有的PCB都组织在一张线性表中
- 链接方式:将具有相同状态进程的PCB通过PCB中的链接字链接成一个队列。
- 索引方式:系统根据所有进程状态的不同,建立几张索引表。
进程控制
进程控制主要包括创建进程、终止进程、阻塞进程、进程状态转换。
进程控制一般由OS内核中的原语实现。
操作系统内核
操作系统通常将与硬件联系紧密的模块、运行频率高的模块等安排在紧靠硬件的软件层次中,将它们常驻内存,这些模块即称为OS内核。
为了防止OS及其关键数据被外部程序修改,将处理机的状态分为:
-
系统态:能执行一切指令,访问所有寄存器和存储区。
-
用户态:技能执行规定的指令,访问指定的寄存器和存储区。
OS内核的功能有:
-
支撑功能
提供给OS中的众多模块所需的基本功能,以支撑这些模块工作。最基本的支撑功能有:
-
中断操作
-
时钟管理。配合时间片使用。
-
原语操作
原语(Primitive):
由若干指令组成的,用于完成一定功能的一个过程,
它是一个原子操作(Active Operation),即操作中动作要么全做,要么不做。
-
-
资源管理功能
- 进程管理
- 存储器管理
- 设备管理
进程的创建
-
进程的层次结构
OS中,允许一个进程创建另一个进程,将创建进程的进程称为父进程,被创建的进程称为子进程,由此形成一个层次结构。
-
进程图(Process Graph)
进程图中用于描述进程间关系的一棵有向树。有向边用来描述它们之间的父子关系。
-
引起创建进程的事件
- 用户登录。用户登录后,为用户建立一个进程。
- 作业调度。为作业创建进程,供操作系统进行处理。
- 提供服务。为用户创建一个进程以提供它所需的服务。
- 应用请求:由用户进程创建新进程。
-
进程创建的过程
OS使用创建原语Creat按以下步骤创建一个进程:
- 申请空白PCB。
- 为新进程分配运行所需的资源,包括各种物理和逻辑资源。
- 初始化进程控制块(PCB):
- 初始化标识符。该进程的标识符,及父进程标识符。
- 初始化处理机状态信息
- 初始化处理机控制信息
- 如果进程就绪队列能接纳新进程,则将新进程插入就绪队列。
进程的终止
-
引起进程终止(Termination of Process)的事件
- 正常结束
- 异常结束
- 外界干预。因外界的请求而终止执行
-
进程的终止过程
OS调用进程终止原语,按以下顺序终止进程:
- 根据终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
- 若被终止进程正处于执行状态,则立即终止该进程的执行
- 若该进程还有子孙进程,则将所有子孙进程都终止,以防它们称为不可控进程。
- 将终止新进程所拥有的全部资源归还给父进程,或者归还给系统
- 将被终止进程(PCB)从所在队列中移出,等待其他程序来搜集信息。
进程的阻塞与唤醒
-
引起进程阻塞或唤醒的事件
- 向系统请求共享资源失败
- 等待某种操作的完成
- 新数据尚未到达
- 等待新任务的到达
-
进程阻塞过程
进程通过调用阻塞原语block将自己阻塞,即阻塞是进程自身的一种主动行为。
进入block过程后,该进程还处于执行状态,所以先立即停止执行,将进程控制块中的现行状态由“执行”改为“阻塞”,并将PCB插入阻塞队列。
-
进程唤醒过程
当被阻塞进程所期待的事件发生时,由有关进程调用唤醒原语wakeup,将等待该事件的进程唤醒。其过程为:
- 将被阻塞的进程从等待该事件的阻塞队列中移出
- 将其PCB中的现行状态由阻塞改为就绪
- 将该PCB插入就绪队列
进程的挂起与激活
-
进程的挂起(从内存调入到外存)
当出现了引起进程挂起的事件时,OS利用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。其过程为:
- 首先检查被挂起进程的状态。
- 若处于活动就绪状态,则将其改为静止就绪;对于活动阻塞状态的进程,改为静止阻塞。
-
进程的激活(从外存调入到内存)
当发生激活进程的事件时,OS利用激活原语active,将指定进程激活。其过程为:
- 首先将进程从外存调入内存,检查该进程的现行状态
- 如果处于静止就绪,改为活动就绪;如果为静止阻塞,改为活动阻塞。
进程同步
引入进程后,使得系统中多道程序可以并发执行,但进程的引入同时也增加了系统的复杂性。
为了使多个进程可以在系统中有条不紊地运行,引入进程同步机制。
进程同步的基本概念
进程同步机制地的要任务是, 对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则共享系统资源,并能很好的合作,从而使程序的执行具有可再现性。
(引入进程,为了解决程序并发执行时的不可再现性,通过进程同步机制实现)
-
两种形式的制约关系
各进程间可能存在两种制约关系:
-
间接制约关系
多进程并发执行时,有时互斥的共享系统资源,形成间接制约关系。
-
直接制约关系
两进程的执行依赖彼此,即它们的制约关系源于它们之间的相互合作。如:输入进程和计算进程,只有等输入进程执行完毕之后,计算进程才能执行。
-
-
临界资源
进程通过互斥的方式访问的系统资源,称为临界资源。
分为硬件临界资源和软件临界资源。
-
临界区(critical section)
访问临界资源的代码称为临界区。通过保证诸进程互斥的进入自己的临界区,就能保证诸进程互斥的访问临界资源。
-
进入区(entry section)
在临界区之前用于检测欲访问的临界资源是否正被访问的代码,称为进入区。
-
退出区(exit section)
临界区之后,用于将临界区正被访问的标志恢复为未被访问的标识的代码
-
剩余区
除临界区、进入区、退出区之外的其他部分的代码称为剩余区。
访问一个临界资源的过程为,进程依次进入进入区、临界区、退出区、剩余区。
-
-
同步机制应遵守的规则
- 空闲让进。当临界资源空闲时,允许一个请求进入自己临界区的进程进入自己的临界区,以访问临界资源。
- 忙则等待。当已有进程进入临界区后,表示有进程在访问临界资源,此时,其他进程必须等待。
- 有限等待。欲访问临界资源的进程,应保证能在有限时间内进入自己的临界区,访问临界资源。
- 让权等待。当进程无法进入自己的临界区时,须立即释放处理机,避免处理机忙等。
硬件同步机制
使用软件机制保证进程同步机制具有一定难度,且有很大局限性。目前常用硬件同步机制实现。其实现方式有:
- 关中断
- 利用Test-and-Set执行实现互斥
- 利用Swap指令实现进程互斥
信号量机制
- 整型信号量
- 记录型信号量
- AND型信号量
- 信号量集
生产者-消费者问题
哲学家进餐
进程通信
进程通信指进程之间的信息交换。
进程的同步,也需要在进程间交换一定的信息,属于低级进程通信。低级的原因是:1. 效率低 2. 对用户不透明
在进程间传送大量数据时,利用OS提供的高级通信工具,该工具有如下特点:
- 使用方便。OS隐藏通信的具体细节,用户利用提供的命令实现进程间的通信。
- 高效地传送大量数据。
进程通信的类型
通信机制可归结为四大类
-
共享存储器系统(Shared-Memory System)
共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间通过这些空间进行通信。又分为:
- 基于共享数据结构的通信方式。低级通信。
- 基于共享存储区的通信方式。高级通信。
-
管道通信系统
管道(pipe),指用于连接一个读进程和一个写进程以实现它们之间通信的一个文件。写进程将数据以字符流的形式传入管道,都进程从管道中读取数据,从而实现进程通信。
管道需提供的协调能力:
- 互斥。互斥对管道操作。
- 同步。
- 确定对方是否存在。
-
消息传递系统(Message passing System)
该机制不借助任务共享区或数据结构,以格式化的消息为单位,将通信的数据封装在消息中,利用操作系统提供的一组通信命令 ,在进程间进行消息传递,完成进程间的数据交换。
分为:
- 直接通信方式
- 间接通信方式
-
客户机-服务器系统(Client-Server System)
网络环境的各种应用领域中主流的通信实现机制。其实现方法分为三类:套接字、远程过程调用、远程方法调用。
- 套接字(Socket)
- 远程过程调用和远程方法调用
线程(Threads)的基本概念
线程的引入
引入进程是为了使多个程序能并发执行,提高资源利用率和系统吞吐量。
引入线程则使为了减少所付出的时空开销。
-
进程的两个基本属性
- 进程是一个可拥有独立资源的基本单位
- 进程是一个可独立调度和分派的基本单位
-
程序并发执行时所需要付出的时空开销
- 创建进程
- 撤销进程
- 进程切换
由于进程是资源的拥有者,在进行上述操作时,会付出较大的时空开销。
-
线程—作为调度和分配的基本单位
不将作为调度和分派的基本单位也作为拥有资源的单位。
线程和进程的比较
-
调度的基本单位
线程和进程都是调度的基本单位。
-
并发性
进程之间可以并发,一个进程中的所有进程以及不同进程中的线程也能并发执行。
-
拥有资源
线程本身不拥有系统资源,只有一点必不可少的、能保证独立运行的资源。
线程处理拥有自己的少量资源外,也允许多个线程共享进程所拥有的资源。这可以表现在:同一进程的所有线程都拥有相同的地址空间。
-
独立性
每个进程都拥有独立的地址空间和资源,除了共享全局变量外,不允许其他进程访问。
而同一进程中的线程,共享进程的内存空间和资源。
所以,同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
-
系统开销
对进程的操作的时空开销大于线程,因进程拥有大量资源。
进程比喻成车间,线程就是车间里的工人。
线程的状态和线程控制块
-
线程运行的三个状态
- 执行状态
- 就绪状态
- 阻塞状态
-
线程控制块TCB
线程控制块用于进路所有用于管理和控制线程的信息。通常包括:
- 线程标识符
- 一组寄存器
- 线程运行状态
- 优先级
- 等等
-
多线程OS中的进程属性
- 进程是一个拥有资源的基本单位
- 多个线程可以并发执行。一个进程通常含有若干个线程,至少一个,由进程为这些线程提供资源和运行环境,使它们能并发执行。
- 进程不再是可执行的实体,而将线程作为独立运行的基本单位。
线程的实现。
- 线程的类型
- 内核支持线程
- 用户级线程
- 组合方式。结合内核支持线程和用户级线程。
更多推荐
操作系统之进程的描述与控制
发布评论