操作系统(三)
三、进程与进程管理
3.1 进程引入
- 前驱图:有向无循环图
- 程序顺序执行特点:
- 程序执行的顺序性
- 程序执行的封闭性----程序一旦开始运行,其执行结果不受外界因素的影响
- 程序执行结果的确定性
- 程序结果的可再现性----程序执行时的环境和初始条件相同,当程序多次重复执行时,都将获得相同的结果
-
多道程序设计:在采用多道程序设计的计算机系统中,允许多个程序同时进入一个计算机系统的内存储器并运行
- 目的是:提高处理器的效率,从而提高整个系统的效率
- 必须解决的问题
- 存储保护与程序浮动
- 处理器的管理和调度
- 系统资源的管理和调度
-
为了使程序在多道程序环境下能够并发执行(走走停停),并对并发执行的程序加以控制和描述,引入进程的概念。
程序段、数据段及进程控制块三部分构成了一个进程的实体
3.2进程
3.2.1 进程的定义
-
进程是具有独立功能的可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的独立单位。或者说,“进程”是进程实体的运行过程。
-
进程的特征
- 动态性:进程的基本特性。进程是进程实体的执行过程;
- 并发性:进程的主要特征。多个进程实体同存于内存中,能在一段时间内同时运行;
- 独立性:进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。
- 异步性:进程按各自独立的、不可预知的速度向前推进;或者说,进程按异步方式运行。
- 结构特征:从结构上看,进程实体是由程序段、数据段及进程控制块三部分组成,有人把这三部分统称为进程映像。
-
程序与进程的区别与联系
区别:- 进程是程序的一次执行,是一个动态的概念,程序是完成某个特定功能的指令的有序序列,是一个静态的概念
- 一个进程可以执行一个或几个程序,同一程序也可能由多个进程同时执行
- 进程是系统进行资源分配和调度的一个独立单位,程序则不是
- 程序可以作为一种软件资源长期保存,而进程是程序的一次执行过程,它是临时的,有生命期的
- 进程是具有结构的:三部分组成
联系:
进程是程序的一次运行。
3.2.2 进程的基本状态及其转化
- 进程的三种基本状态
-
就绪状态
当进程已分配到除CPU以外的所有必要的资源后,只要能再获得处理机便可立即执行,这时的状态称为就绪状态。同时处于就绪状态的多个进程排成就绪队列。 (万事俱备,只差CPU) -
执行状态
指进程已获得处理机,其程序正在执行 -
阻塞状态
进程因发生某种事件(如I/O请求、申请缓冲空间等)而暂停执行时的状态,有时也称为“等待”状态或“睡眠”状态。通常将处于阻塞状态的进程排成一个队列,即阻塞队列。
-
就绪状态
- 进程挂起状态
-
挂起状态的引入
- 终端用户的需要:暂时静止下来 既不执行也不接受调度
- 父进程的需要:父进程常常希望考察和修改子进程,或者想要协调各子进程间的活动
- 操作系统的需要 :操作系统有时需要挂起某些进程,检查运行中资源的使用情况及进行记账,以便改善系统运行的性能
- 对换的需要
为了缓解内存紧张的情况,即将内存中处于阻塞状态的进程换至辅存上,使进程又处于一种有别于阻塞状态的新状态。 - 负荷调节的需要
实时系统的负荷较重则可能影响到实时任务的控制,此时系统将不重要的进程挂起,以保证系统正常运行。
-
进程状态的转换
- 在引入挂起状态后,又将增加从挂起状态(又称静止状态)到非挂起状态(又称活动状态)的转换
- 活动就绪→静止就绪 :处于就绪状态的进程被suspend()原语挂起后变为静止就绪状态
- 活动阻塞→静止阻塞 :阻塞状态的进程被挂起
- 静止就绪→活动就绪 :处于静止就绪的进程被active()原语**
- 静止阻塞→活动阻塞 :静止阻塞的进程被**
3.2.3进程控制块PCB
- 进程控制块的作用
- 记录进程信息
- 操作系统是根据进程控制块PCB来对并发执行的进程进行控制和管理的
- PCB是进程存在的唯一标志
- 进程控制块中的信息
- 进程标识符信息
进程标识符用于唯一地标识一个进程,通常有外部标识符和内部标识符。
①外部标识符。由创建者提供,通常由字母、数字所组成,往往是由用户(进程)在访问该进程时使用。
②内部标识符。这是为了方便系统使用而设置的。在所有操作系统中都为每一个进程赋予一个惟一的整数作为内部标识符,它通常就是一个进程的序号。 - 处理机状态信息
通用寄存器、指令计数器、程序状态字PSW、用户栈指针,用于断点重新继续执行 - 进程调度信息
存放了一些与进程调度和进程对换有关的信息:进程状态、进程优先级、进程调度所需的其他信息、事件 - 进程控制信息
程序和数据的地址、 进程同步和通信机制、资源清单、链接指针。
- 进程标识符信息
- PCB的组织方式
- 链接方式
- 索引方式
- 链接方式
-
3.2.4 进程控制
进程控制的主要任务是创建和撤消进程以及实现进程的状态转换,进程控制一般由操作系统的内核来实现。操作系统内核通常是运行在系统态的。
- 管态:硬件设备处理机的状态
- 目态:用户程序占用处理机的状态
- 操作系统内核
- 定义:
将一些与硬件紧密相关的模块诸如中断处理程序、各种常用设备的驱动程序以及运行频率较高的模块都安排在紧靠硬件的软件层次中并使它们常驻内存,以便提高操作系统的运行效率,并对它们加以特殊的保护,把这一部分称为操作系统的内核 - 功能:
中断处理、进程管理、资源管理
- 定义:
- 原语 内核或微核提供核外调用的过程或函数称为原语(primitive)。原子操作:一个操作中的所有动作,要么全做,要么全不做
-
进程的创建
- 引起创建进程的典型事件
- 用户登录
- 作业调度:作业装入内存,随即创建进程并插入就绪队列
- 提供服务:如打印进程
- 应用请求
- 进程的创建过程
- 调用进程创建原语create( )创建进程
- 申请空白PCB :分配唯一的数字标识
- 为新进程分配资源:程序、数据及用户栈所需的内存空间
- 初始化进程控制块
- 将新进程插入就绪队列
- 引起创建进程的典型事件
-
进程的终止
- 引起进程终止的事件
- 正常结束
- 异常结束
- 外界干预
- 进程的终止过程
- 根据被终止进程的标识符从PCB集合中检索出该进程的PCB,从中读出该进程的状态
- 若被终止进程正处于执行状态,应立即终止该进程的执行并设置调度标志为真,当前进程被终止后应重新进行调度。
- 若该进程还有子孙进程,还应将其所有子孙进程予以终止
- 将该进程所拥有的全部资源,或者归还其父进程或者归还给系统
- 释放进程的PCB,删除相应队列中的PCB,归还空表项
- 引起进程终止的事件
-
进程的阻塞与唤醒
- 引起进程阻塞和唤醒的事件
- 请求系统服务
- 启动某种操作
- 新数据尚未到达
- 无新工作可作
- 进程阻塞过程
进程通过调用阻塞原语block()把自己阻塞(主动行为)- 立即停止当前进程的执行
- 把进程控制块中的现行状态由“执行”改为“阻塞”,并把它插入到阻塞队列
- 进程唤醒过程
调用唤醒原语wakeup( )将等待该事件的进程唤醒- 把被阻塞进程从等待该事件的阻塞队列中移出
- 将其PCB中的现行状态由“阻塞”改为“就绪”
- 然后再将该进程插入到就绪队列中
block()和wakeup()原语必须成对出现
- 引起进程阻塞和唤醒的事件
-
进程的挂起与**
- 进程的挂起过程
当出现了引起进程挂起的事件时,系统就利用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。- 检查被挂起进程的状态,若正处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将其改为静止阻塞
- 进程保存于外存对换区
- 如被挂起的进程正在执行,则转调度程序重新调度
- 进程的**过程
- 当发生**进程的事件时系统将利用**原语active( )将指定进程**
- 将进程从外存调入内存,检查该进程的现行状态:若是静止就绪,便将其改为活动就绪;若为静止阻塞,便将其改为活动阻塞
- 假如采用的是抢占调度策略 ,检查是否要进行重新调度
- 进程的挂起过程
3.3 进程调度
3.3.1调度的基本概念
- 高级、中级和低级调度:
- 高级调度又称为作业调度 :作业从外存调入内存
- 低级调度又称为进程调度:分配处理机
- 在有的系统中,可能增加一中级调度,主要作用是在内存和外存对换区之间进行进程对换,以解决内存紧张问题。
- 调度方式
- 非剥夺方式
- 剥夺方式
- 剥夺原则:优先权原则、短进程优先原则、时间片原则
3.3.2进程调度算法
-
先来先服务(FCFS)算法 :把处理机分配给最先进入就绪队列的进程
-
最短CPU运行期优先调度算法:从就绪队列中选出“下一个CPU执行期”最短的进程,为之分配处理机使之执行
-
最高响应比优先调度算法 :响应比=(等待时间+要求的服务时间)/要求的服务时间 ,每次选取响应比最高的进程调度
-
优先级调度算法 :将CPU分配给就绪队列中优先级最高的进程
-
时间片轮转调度算法
-
前后台调度算法:该方法用在批处理和分时相结合的系统中。将分时用户作业放在前台,把批处理作业放在后台。系统对前台作业按照时间片轮转法进行调度,仅当前台无作业时,才把处理机分配给后台作业的进程。后台进程通常按先来先服务方式运行
-
多级反馈队列轮转算法
-
**进程调度的过程:
- 进程调度所依赖的数据结构通常是调度队列,由于调度的原因不同,在单处理器系统中设置了多种等待队列
- 只有就绪队列中的进程能够获得处理器而最终运行,其他队列中的进程从队列中出来后,必须进入就绪队列才能分配处理器
- 队列数据结构的建立结构与调度算法密切相关
- 进程调度算法只是决定哪一个进程将获得处理机,而将处理机分配给该进程的具体操作是由分派程序完成的
3.4 线程
-
线程的引入
- 在操作系统中引入进程的目的是为了使多个程序并发执行以改善资源利用率及提高系统的吞吐量;
- 在操作系统中再引入线程,则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
-
线程与进程的比较
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light-Weight Process)或进程元;而把传统的进程称为重型进程(Heavy-Weight Process)。- 调度
在引入线程的操作系统中,线程是调度和分派的基本单位;在同一进程中,线程的切换不会引起进程切换;在由一个进程中的线程切换到另一进程中的线程时,将会引起进程切换 - 并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统吞吐量 - 拥有资源
不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源 - 系统开销
创建、撤销以至于切换进程时付出的系统开销显著大于创建、撤销、切换线程时的系统开销
- 调度
-
线程的实现机制
- 用户级线程
仅存在于用户级中,对于这种线程的创建、撤销和切换,都不利用系统调用来实现,因而这种线程与内核无关。相应地,内核也并不知道有用户级线程的存在 - 内核支持线程
依赖于内核,它们的创建、撤销和切换都由内核实现。在内核中保留了一张线程控制块,内核根据该控制块而感知该线程的存在并对线程进行控制。
- 用户级线程
-
用户级线程和内核支持线程的比较
- 线程的调度与切换速度
用户级线程的调度切换速度高于内核支持线程的速度 - 系统调用
用户级线程的系统调用将看作整个进程的行为,该进程将被阻塞;内核支持线程的系统调用看作该线程的行为,仅仅阻塞该线程 - 线程执行时间
对于只设置了用户级线程的系统,调度是以进程为单位进行的 ;设置的内核支持线程的系统,其调度是以线程为单位进行的
- 线程的调度与切换速度