本章要点:

  基础:进程描述及控制

  策略:进程调度

  实现:互斥与同步

  避免:死锁与饥饿

进程定义:

  可并发执行的程序,在一个数据集合上的运行过程;

  申请/拥有资源的最小单位;

 程序定义:静态概念,是指令和数据的集合,可长期存储;

 进程与程序对应关系:

    一个程序可以对应一个进程或者多个进程;

    一个进程可以对应一个程序,或者一段程序;

进程的特征:

  1、动态性;

  2、并发性;

  3、独立性;

  4、异步性;

引入进程带来的问题:

  增加了空间开销:为进程建立数据结构,

  额外的时间开销:管理和协调、跟踪、填写和更新有关数据结构、切换进程、保护现场;

  更难控制:

   协调多个进程竞争和共享资源如何预防;

   解决多个进程因为竞争资源而出现故障

处理机的竞争尤为突出;

 进程的结构:

  组成:程序、数据集合、进程控制块PCB(Process Control Block)

PCB是进程存在的唯一标志,创建进程时,创建PCB,进程结束时,系统将撤销其PCB; 

PCB:

  进程标识信息:进程的内部和外部标识符;

  处理机状态信息:通常寄存器值,指令计数器值、程序状态字PSW值,用户栈指针值;

  进程调度信息:进程状态,进程优先权,进程调度的其他信息;

  其他信息:程序及数据地址、进程同步和通讯机制、资源清单、链接指针;

PCB的组织方式之一-------单一队列

    所有进程的PCB通过链表组织成为一个队列。适用于进程数目不多的系统。如:windows操作系统;

PCB的组织方式二---------表格结构

  PCB按进程状态不同,组织成不同的表格:就绪进程表。执行进程表(多处理机系统中)及阻塞进程表;

  系统分别记载各PCB表的起始地址;

PCB的组织方式三---------多级队列

  即:就绪队列(作为一个链表)

    某阻塞队列(另一个链表)

    。。。

    执行指针(另一个链表,仅一个节点)

进程执行轨迹:

  进程的轨迹:进程执行的指令序列,用以观察处理机的执行过程;

例如:假设内存中有3个进程A、B、C,他们的程序代码已全部装入内存,若A、B

两进程需要执行12条指令,C进程需要执行4条指令。且C进程执行到底4指令处必须等待I/O

  操作系统之进程管理_执行时间

  进程进入内存中,分配器程序给该进程建立PCB以及其他运行的必要信息,并加入就绪队列;

此时该程序只差处理机就可以执行了;

   ”未执行“ 可分为 “就绪” 和  “阻塞”(读写文件,磁盘操作台面了)

就绪队列中的进程都是只差处理机就可以执行了;

”阻塞“结束之后就进入就绪队列;

  进程的5个状态,之间的转换关系:新建/就绪/执行/阻塞/终止/

 新建状态:进程已经创建,但未被os接纳为可执行进程;(PCB已存在,即进程标识符,该进程的父进程,该进程的所属用户,进程状态情况; 但是该进程的某些资源未存在);

 等新建状态得到了某些必要的资源得到之后就转换为就绪状态;

操作系统之进程管理_时间片_02

 

 

 操作系统之进程管理_进程调度_03

 

 

解决内存资源紧张问题: 

采用交换技术:换出一部分进程到外存,以腾出内存空间;

采用虚拟存储技术:每个进程只能装入一部分程序和数据;

 

交换技术(swapping ):将内存中暂时不能运行的进程,或暂时不用的数据和程序,换出内存,移到外存中,以便滕出足够的内存空间,把以具备运行条件的进程,或进程所需要的数据和程序,换入内存;

包括swapping out / swapping in

进程被交换到外存,此时进程处于挂起状态;进程PCB仍然保持在内存,程序和数据移到外存;

  进程挂起的原因:

 1、进程全部阻塞,处理机空闲;

 2、系统负荷过重,内存空间紧张

 3、操作系统的需要,操作系统可能需要挂起后台进程或一些服务进程,或者某些可能导致系统故障的进程;

 4、终端用户的请求;

 5、父进程的需求;

使之挂起的进程为:自身、其父进程、os

只有挂起它的进程才能使之由挂起状态转换为其他状态;

 

是否只能挂起阻塞进程;  阻塞进程可能挂起;

如何激活一个挂起进程;

4种状态组合:

就绪: 进程在内存,准备执行(缺时间片)

阻塞:进程在内存,等待实践

就绪/挂起:进程在外存,只要调入内存即可放入就绪队列;

阻塞/挂起:进程在外存,等待时间

处理机可调度执行的进程有两种:

  1、新创建的进程;

  2、或换入一个以前挂起的进程;

通常为了避免增加系统负载,系统会换入一个以前挂起的进程执行;

操作系统之进程管理_时间片_04

                        具有挂起状态的进程模型

 进程控制,两种执行模式

系统模式(又称为系统态),控制模式,或内核模式:

  1、具有较高的特权

  2、运行系统特定的指令,包括读/写控制寄存器的指令、基本I/O指令以及与存储器管理有关的指令,及一些特定的内存区;

  3、内核模式下的处理机及其指令、寄存器和内存读受到完全控制和保护;

用户模式(或用户态)

  1、具有较低的特权;

  2、用户程序一般运行的用户模式;

两者切换是由

操作系统内核:操作系统的核心,是基于硬件的第一层软件扩充,提供操作系统最基本的功能,是操作系统工作的基础;

现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序,设备驱动程序),基本的,公共的,运行频率较高的模块(时钟管理,进程调度等)以及关键性数据结构独立开来,使之常驻内存,并为它们紧凑特殊保护,通常把这一部分称为操作系统内核;

 

操作系统内核的功能可以概括地划分为 资源管理功能 和支撑功能;

  资源管理: 进程管理、 存储管理 和I/O设备管理;

  支撑功能: 中断处理,统计、监测、时钟管理、原语操作;

资源管理功能:

  进程管理: 进程创建和终止 、调度、状态转换、同步和通信、管理PCB

  存储管理:  为进程分配地址空间、 对换、 段\页管理;

  I/O设备管理: 缓存管理、为进程分配I/O通道和设备;

支撑功能:

  中断处理(没有中断就没有多道程序设计的实现)、 时钟管理 、  原语操作、 统计 、  检测;

进程控制原语:(原子操作) 进程切换、 创建和终止、 阻塞与唤醒、  挂起与激活

进程创建:原因

  1、提交新的批处理作业;

  2、交互式用户注册;

  3、操作系统提供服务;

  4、父进程创建子进程;

进程创建的步骤:(主进程表:记载所有进程信息)

  1、为进程分配一个唯一标识号ID: 主进程表中增加一个新的表项(每个进程有一个表项);

  2、为进程分配空间: 用户地址空间、用户栈空间、PCB空间。若共享已有空间。则应建立相应的链接;

  3、初始化PCB:进程标识、处理机状态信息,进程状态;

  4、建立链接;若调度队列是链表,则将新进程拆入到就绪或就绪/挂起链表;

  5、建立或扩展其他数据结构;

进程终止:原理

  批处理作业执行到“结束”语句

  交互式用户注销

  停止进程(应用程序)的执行;

  遇到错误或故障;

进程终止:具体原因

  正常结束;

  超时终止,执行时间超过预计时间;

  内存不足,无法为进程分配所需的内存空间;

  越界访问;

  企图使用未允许用的数据,或操作方式错误;

  超时等待某时间发生;

进程终止:步骤

  1、根据被终止进程的标识符ID,找到其PCB,读出该进程的状态;

  2、若该进程为执行状态,则终止其执行,调度新进程执行;

  3、若该进程有子孙进程,或归还给其父进程,或归还给系统;

  4、将该进程的全部资源,或归还给其父进程,或归还给系统;

  5、将被终止进程(PCB)从所在的队列中移出,等该其他程序来收集信息;

 

进程切换vs模式切换:

  1、进程切换,作用于进程之间的一种操作,当分派程序收回当前进程的cpu并准备把它分派给某个就绪进程时;该操作将被引用;、

  2、模式切换:是进程内部所引用的一种操作,当用户程序转入系统调用,或相反时,该操作将被引用;

进程切换一定引发模式切换,反之则不然;

 

进程调度:

什么是调度?

  调度是指,在一个队列中,按照某种方法(算法),选择一个合适的个体的过程;

  调度的关键是需要某种方法或算法,好的调度算法有利于选择到合适的个体;

如何判断、设计一个好的调度算法呢;

调度目标:

  公平性,防止进程长期不能获得调度而出饥饿;

  处理机利用率,尽量提高处理机的利用率;

  提高系统吞吐量;

  尽量减少进程的响应时间;

调度原则:

  满足用户的要求:响应时间、周转时间、截至时间;

满足系统的需求:

调度模式:

  优先级保存在进程PCB中

  1、多就绪队列(根据不同的优先级),单阻塞队列;

  2、多就绪队列 , 多阻塞队列;

几乎所有操作系统的调度算法都可考虑优先权原则;

当然,仅考虑优先权,某些低优先级的进程可能会出现饥饿,对低优先级的进程不公平;

可以将进程排队的等待时间等因素纳入优先权的计算,随着进程等待时间的增长,其优先权也不断提高,进程也会在不久的将来得到调度;(优先级是动态改变的)

进程调度方式:

  根据执行进程的处理机是由进程自己释放,还是被强行剥夺,可以将进程调度方式分为:非剥夺方式  和  剥夺方式 两种;

非剥夺方式:

  执行进程只有在执行完毕,或因申请I/O阻塞自己时,才中断其执行,释放处理机,调度新的进程执行;

  这种方式不利于“即时性”要求高的分时和实时系统,主要用于批处理系统;

剥夺方式:

  os可以在新进程到来时,或者某个具有较高优先权的被阻塞进程插入就绪队列时,或在基于时间片调度的系统中,时间片用完而中断当前进程的执行,调度新的进程的执行;

  这种方式会产生较多的中断,主要用于实时性要求较高的实时系统及性能要求较高的批处理系统和分时系统;

调度的类型

  批处理调度,分时调度、实时调度、和多处理机调度;

  长程调度(把作业有外存调入内存,即创建新进程,在作业队列)、中程调度(外存中的挂起进程被激活进入内存,在进程队列)、短程调度(进程调度,进程队列)、  I/O调度(等待磁盘读写的队列);

  长程调度:高级调度或作业调度,它为被调度作业或用户程序创建进程,分配必要的系统资源,并将新创建的进程插入就绪队列,等待短程调度;

  某些采用交换技术的系统将新创建的进程插入到就绪/挂起队列,等待中程调度;

  在批处理系统中,作业进入系统中,先驻留在磁盘上,组织称批处理队列,称为后备队列;长程调度从该队列中选择一个或多个作业,为之创建进程;

长程调度考虑两个问题:

  1、选择多少个作业进入内存,为之创建进程?

    取决与多道程序的度,即允许同行在内存中运行的进程数;

  2、选择哪些作业?

    取决于长程调度算法;

中程调度:

  当内存空间非常紧张时,或处理机找不到一个可执行的就绪进程时,需要选择一个进程(阻塞或就绪状态)换出到外存,释放出内存空间给别的进程使用;当内存空间较充裕时,从外存选择一个挂起状态的进程调度到内存;

    

  

短程调度:

  也称进程调度,或低级调度,决定就绪队列中的哪个进程将获得处理机;

  短称调度运行频率最高;

  现代操作系统几乎都具有短称调度功能;

 

 进程切换的原因:

   1、时钟中断

   2、I/O中断

   3、内存访问出错

   ----虚拟存储中,需要的指令或数据不在内存中;

  4、陷阱

    ------执行遇到错误

    -----可能使进程转换到终止状态;

进程A切换到进程B的步骤:

  1、保持进程A的现场    将进程A的当前运行信息,如程序执行到的当前位置,程序状态字,所以的寄存器值等保存到进程A的PCB中;

  2、恢复进程B的现场   从进程B的PCB中取其执行信息,将这些信息写入相应的寄存器中,程序计数器执行进程B将执行的下一条指令,进程B可能第一次开始执行,也可能被中断过的进程,恢复执行,不论是哪一种情况,进程B的执行信息都能在其PCB中找到;

  

中程调度:

  目的:为了提高内存的利用率和系统的吞吐量;

  只有支持进程挂起的操作系统才具有中程调度功能;

进程调度算法:

  先来先服务:FCFS first  come  first server

该方法按照进程到达的先后顺序排队,每次调度对首的进程;

FCFS算法属于非剥夺调度方式,实现简单,看似公平;

但是,对于那些后进入队列而言运行时间较短的进程,或I/O型的进程而言,可能需要常时间等待;

缺点:

  对短进程不公平;

  不利于I/O型进程;

一般地,FCFS与其他调度算法混合使用,例如,系统可以按照不同的优先级维护多个就绪队列,

 每个队列内部按照FCFS算法调度;

  FCFS算法同时适合于长程、中程、短程调度三种调度类型;

短进程优先算法:

  当需要调度进程(或作业)时,通过计算判断就绪进程队列中哪个进程的预期执行时间最短,或后备作业队列中哪一个或几个作业的预期执行时间最短,就调度谁;

缺点:很难准确预测进程的执行时间;

  可能导致长进程饥饿,这对长进程不公平;

  采用非剥夺调度方式,未考虑进程的紧迫程度;不适合分时系统和事务处理系统;

 

基于时间片轮转调度法(非常经典方法)

  采用基于时间片论转调度法,进程的周转实际那和平均周转时间并不比采用FCFS和短进程优先调度算法小;

  加上进程切换所需的系统开销时间,该算法的平均周转时间还会增长;

  该法常用于分时系统及事务处理系统,合理的时间片大小将带来满意的响应时间;通常,合理的时间片是指,能让80%左右的进程在一个时间片内完成;

对于短的,计算型的进程比较有利;

不适合于批处理系统的进程调度;

不利于I/O型的进程;改进的方法之一,可以将I/O阻塞事件完成的进程单独组织一个就绪列,该队列进程的时间片可以设置的小一些,且优先调度;

 

基于优先级的调度算法:

  基于时间片论转调度法循环式地为每个被调度的进程呢个分配一个时间片,对每个进程都是公平的;

然而,实际应用中,进程的性质可能是不同的。例如,一个与用户交互的前台进程急迫地需要对用户的输入作出响应,而一个后台打印进程的迫切性也许就不那么重要;

因此,可以为每个进程定义一个优先级,优先级越高,越先被处理机调度;

  如何设定进程的优先级?

    进程完成功能的重要性;

    进程完成功能的急迫性;

    为均衡系统资源的使用,指定进程优先级;

    进程对资源的占用程度,例如,可以为短进程(作业)赋予较高的优先级;

静态与动态优先级:

  静态优先级:一旦确定,则进程运行期间优先级一直不改变;

  动态优先级:系统首先赋予进程一个初始优先级,该优先级将随着进程的运行而改变;

动态优先级:

  典型的动态优先级变化方式为:

    方式一:优先级随着进程运行的剩余时间的减少而上升,使将要执行结束的进程尽快完成;

    方式二:随着进程排队等待时间的增长而上升,使等待时间越长的进程优先得到调度,不至于长时间饥饿;

  具体实现方法:

    可以在每个时钟中断时,或需要进程切换时,重新计算就绪队列中各进程的优先级,并优先调度高优先级的进程;

  采用动态优先级的两种调度算法:剩余时间最短者优先(对应 方式一), 和响应比高者优先;

  剩余时间最短者优先:

    与短进程优先调度算法一样,该调度算法很难准确估计进程的额剩余执行时间;

  响应比高者优先:

    将进程的等待时间和进程的预期执行时间纳入优先级的计算,进程(预期执行时间)越长优先级越低,而随着进程的等待时间增长优先级

  上升,即进程的优先级与等待时间成正比,与进程执行时间成反比,w表示等待时间,s表示预期执行时间,则响应比:

      R =(w+s)/s = w/s  + 1

如何选择进程调度算法与系统设计的目标有关,交互式多任务系统,主要考虑联机用户对响应时间的要求

 

实时系统Real-Time System  :  实时控制系统(实时采集数据,并自动处理。炼钢控制), 实时信息处理系统:飞机订票系统  

  指能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行的计算机系统;