计算机操作系统(二)--进程管理

在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。操作系统所具有的四大特征也都是基于进程而形成的,并可从进程的观点来研究操作系统。

在为配置OS的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行;

在多道程序环境下,则允许多个程序并发执行。也正是程序并发执行时的这种特征,才导致了在操作系统中引入进程的概念。

程序顺序执行时的特征:

1)顺序性:处理机的操作严格按照程序所规定的顺序执行,即每一操作必须在上一个操作结束之后开始。

2)封闭性:程序是在封闭的环境下执行的,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它。程序一旦开始执行,其执行结果不受外界因素影响。

3)可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都将获得相同的结果。

 

前趋图(Precedence Graph)是一个有向无循环图,记为DAG(Directed Acyclic Graph),用于描述进程之间执行的前后关系。

程序并发执行时的特征

1)间断性      程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。相互制约将导致并发程序具有“执行-暂停-执行”这种间断性的活动规律。

2)失去封闭性     程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性。

3)不可再现性     程序在并发执行,由于失去了封闭性,也将导致其失去可再现性。程序在并发执行时,由于失去了封闭性,其计算结果已与并发程序的执行速度有关,从而使程序的执行失去了可再现性。

 

在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性及不可再现性的特征。这决定了通常的程序是不能参与并发执行的,因为程序执行的结果是不可再现的。为此人们引入“进程”的概念。

进程的特征:

1)结构特征    为使程序(含数据)能独立运行,应为之配置一进程控制块,即PCB(Process Control Block);而由程序段相关的数据段PCB三部分构成了进程实体。

注意:所谓创建进程,实质上是创建进程实体中的PCB;而撤消进程,实质上是撤销进程的PCB。

2)动态性     进程的实质是进程实体的一次执行过程,因此,动态性是进程的最基本的特征。动态性还表现在:“它由创建而产生,由调度而执行,由撤消儿消亡”。

进程实体有一定的生命期,而程序则只是一组有序指令的集合,并存放于某种介质上,其本身并不具有运动的含义,因而是静态的。

3)并发性     多个进程实体同存于内存中,且能在一段时间内同时运行。并发性是进程的重要特征,同时也成为OS的重要特征。引入进程的目的也正是为了使其进程实体能和其它进程实体并发执行;而程序(没有建立PCB)是不能并发执行的。

4)独立性     独立性是指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。

5)异步性     指进程按各自独立的、不可预知的速度向前推进,或说进程实体按异步方式运行。

进程的定义:

1)进程是程序的一次执行。

2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

 

进程的三种基本状态:

1)就绪状态     当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行时的状态。

2)执行状态     进程已获得CPU,其程序正在执行。

3)阻塞状态     正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即进程的执行受到阻塞,这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。

PS:致使进程阻塞的典型事件:请求I/O、申请缓冲空间等。

 

挂起状态

在不少系统中进程只有上述三种状态,但在另一些系统中又增加了一些新状态。

引入挂起状态的原因

1)终端用户的请求      当终端用户在自己的程序运行期间发现有可疑问题时,希望暂时使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。这种静止状态称为挂起状态。

2)父进程请求     有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。

3)负荷调节的需要     当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。

4)操作系统的需要     操作系统有时希望挂起某些进程,以便检查运行中德资源使用情况或进行记账。

 

进程状态的转换

在引入挂起状态后,又将增加从挂起状态(又称为静止状态)到非挂起状态(又称为活动状态)的转换。

1)活动就绪->静止就绪     当进程处于未被挂起的就绪状态时,称此为活动就绪状态,表示为Readys。当用挂起原语Suspend将该进程挂起后,该进程便转变为静止就绪状态,表示为Readys,处于Readys状态的进程不再被调度执行。

2)活动阻塞->静止阻塞     当进程处于未被挂起的阻塞状态时,称它是处于活动阻塞状态,表示为Blockeda。当用Suspend原语将它挂起后,进程便转变为静止阻塞状态,表示为Blocked。处于该状态的进程在其所期待的事件出现后,将从静止阻塞变为静止就绪。

3)静止就绪->活动就绪     处于Readys状态的进程,若用激活原语Active激活后,该进程将转变为Readys状态。‘

4)静止阻塞->活动阻塞     处于Blocked状态的进程,若用激活原语Active激活后,该进程将转变为Blockeda状态。

 

创建状态和终止状态

引入创建状态是为了保证进程的调度必须在创建工作完成后进行,以确保对进程控制块操作的完整性。同时也增加了管理的灵活性,根据系统性能或主存容量的限制,推迟创建状态进程的提交。

1)创建状态,创建一个进程一般通过两个步骤:为新进程创建PCB,填写必要的管理信息;其次,把该进程转入就绪状态并插入就绪队列中。

2)终止状态,进程的终止也通过两个步骤:等待操作系统进行善后处理,然后将其PCB清零,并将PCB空间返还系统。进入终止态的进程以后不能再执行,但操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其它进程收集。

 

为了描述和控制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB(Process Control Block)。

PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。OS是根据PCB来对并发执行的进程进行控制和管理的。进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也都需要访问PCB。当进程由于某种原因而暂停执行时,又须将其断点的处理机环境保存在PCB中。

PCB可以被操作系统中的多个模块读或修改,如被调度程序、资源分配程序、中断处理程序以及监督和分析程序等读或修改。由于PCB经常被系统访问包含一些频率很高的进程及分派程序访问,故PCB应常驻内存。系统将所有的PCB组织成若干个链表(或队列),存放在操作系统中专门开辟的PCB区内。

Linux系统中用task_struct数据结构来描述每个进程的进程控制块,Windows操作系统中则使用一个执行体进程块(EPROCESS)来表示进程对象的基本属性。

PCB进程控制块中,主要包括四方面信息:进程标识符、处理机状态、进程调度信息、进程控制信息。

1)进程标识符,用于唯一地标识一个进程。一个进程通常有两种标识符:内部标识符、外部标识符。

     内部标识符,在所有的操作系统中,都为每一个进程赋予了一个唯一的数字标识符,方便系统使用。

     外部标识符,有创建者提供,通常由字母、数字组成。往往由用户(进程)在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识以及子进程标识等。

2)处理机状态,主要由处理机的各种寄存器中的内容组成的。主要四个寄存器:通用寄存器、指令计数器、程序状态字PSW、用户栈指针

     通用寄存器,又称用户可视寄存器,它们是用户程序可以访问的,用于暂存信息。

     指令计数器,存放了要访问的下一条指令的地址。

     程序状态字PSW,含有状态信息如条件码、执行方式、中断屏蔽标志等

     用户栈指针,每一个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶。

3)进程调度信息,存放一些与进程调度和进程对换有关的信息。

     进程状态,指明进程的当前状态,作为进程调度和对换时的依据。

     进程优先级,用一个整数描述进程使用处理机的优先级别。

     进程调度所需的其他信息,这些信息与所采取的进程调度算法有关。比如进程已等待CPU的时间总和等。

     事件,指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。

4)进程控制信息

     程序和数据的地址,指进程的程序和数据所在的内存或外存地址,以便再调度到该进程执行时,能从PCB中找到其程序和数据。

     进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等。

     资源清单,一张列出除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单。

     链接指针,给出本进程PCB所在队列中的下一个进程的PCB的首地址。

 

进程控制块的组织方式

     常用的组织方式有两种:链接方式、索引方式。

     链接方式,把具有同一状态的PCB,用链接指针字段链接成一个队列。由此形成就绪队列指针、阻塞队列指针等。

     索引方式,根据所有进程的状态建立几张索引表。由此形成就绪索引表、阻塞索引表等。

 

 

进程控制是进程管理中最基本的功能,一般由操作系统内核中的原语来实现。

原语(Primitive)是由若干条指令组成的,用于完成一定功能的一个过程

原子操作(Action Operation),指该操作中的所有动作要么全做,要么全不做。因此原子操作在执行过程中不允许被中断。原子操作在管态下执行,常驻内存

原语的作用是为了实现进程的通信和控制

 

进程的创建:进程图、引起创建进程的事件、进程的创建

     进程图是用于描述一个进程的家族关系的有向树,进程间的关系是十分重要的。子进程可以继承父进程所拥有的资源,如继承父进程打开的文件,继承父进程所分配到的缓冲区等。在PCB中都设置了家族关系表项。

 

     一个进程去创建另一个进程的典型事件有四类:用户登录、作业调度、提供服务、应用请求

     1)用户登录,在分时系统中,用户在终端键入登录命令通过后,系统将为该终端建立一个进程,并插入就绪队列中。

     2)作业调度,在批处理系统中,当作业调度程序按一定的算法调度到某作业时,便将该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中。

     3)提供服务,当运行中的用户程序提出某个请求后,系统将专门创建一个进程来提供用户所需的服务。例如文件打印,操作系统将为它创建一个打印进程,可使打印进程与该用户进程并发执行,还便于计算出打印所需时间等。

     4)应用请求,上述三种情况都是系统内核创建新进程,该类型则是基于应用进程的需求,由它自己创建新进程,用于并发运行。

 

     进程的创建,操作系统接受到创建新进程事件后,便调用进程创建原语Creat()来创建新进程。流程如下

     1)申请空白PCB——为新进程申请唯一的数字标识符,并从PCB集合众索取空白PCB。

     2)为新进程分配资源——为新进程的程序和数据以及用户栈分配必要的内存空间。对于批处理作业,内存大小在创建时提供。对于交互型作业,用户可以不给出内存要求而由系统分配一定的空间。如果新进程要共享某个已在内存的地址空间(即已装入内存的共享段),则必须建立相应的链接。

     3)初始化进程控制块。PCB的初始化包括:初始化标识信息,将系统分配的标识符和父进程标识符填入新PCB中。初始化处理机状态信息,是程序计数器指向程序的入口地址,使栈指针指向栈顶。初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是设置为最低优先级,除非用户显式方式提出高优先级要求。

     4)将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

 

进程的终止:引起进程终止的事件、进程的终止过程

     引起进程终止的事件分三类:正常结束、异常结束、外界干预

     在任何计算机系统中,都应有一个用于表示进程已经运行完成的指示。

     在进程运行期间,由于出现某些错误和故障而迫使进程终止(Termination of Process)。常见异常事件如下

     1)越界错误,指程序所访问的存储区已越出该进程的区域。

     2)保护错,指进程试图去访问一个不允许访问的资源或文件,或者以不恰当的方式进行访问。如试图去写一个只读文件。

     3)非法指令,指程序试图去执行一条不存在的指令。该错误原因可能是程序错误地转移到数据区,把数据当成了指令。

     4)特权指令错,指用户进程试图去执行一条只允许OS执行的指令。

     5)运行超时,指进程的执行时间超过了指定的最大值。

     6)等待超时,指进程等待某事件的时间超过了规定的最大值。

     7)算术运算错,指进程试图去执行一个被禁止的运算,例如  被0除。

     8)I/O故障,指在I/O过程中发生了错误等。

    

     外界干预并非指在本进程运行中出现异常 事件,而是指进程应外界的请求而终止运行。

     主要干预有三类:操作员或操作系统干预、父进程请求、父进程终止。

     由于某种原因,例如发生死锁,由操作员或操作系统终止该进程。由于父进程具有终止自己的任何子孙进程的权力,因而当父进程提出请求时,系统将终止该进程。当父进程终止时,OS也将它的所有子孙进程终止。

 

     如果系统中发生了上述要求终止进程的某事件,OS便调用进程终止原语,按部就班终止指定的进程。过程如下:

     1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。

     2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。

     3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程。

     4)将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。

     5)将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来收集信息。

 

进程的阻塞与唤醒:引起进程阻塞和唤醒的事件、进程阻塞过程、进程唤醒过程。

     四类事件会引起进程阻塞或被唤醒:请求系统服务、启动某种操作、新数据尚未到达、无新工作可做。

     1)请求系统服务,由于某种原因,操作系统并不立即满足该进程的要求时,该进程只能转变为阻塞状态来等待。例如请求使用某资源,如打印机,由于系统已将打印机分配给其他进程,这时请求者进程只能被阻塞,仅在其他进程在释放出打印机的同时,才将请求进程唤醒。

     2)启动某种操作,当进程启动某种操作后,如果该进程必须在该操作完成之后才能继续执行,则必须先使该进程阻塞,以等待该操作完成。如启动了某I/O设备,如果只有在I/O设备完成指定的I/O操作任务后才能继续执行,则该进程在启动I/O操作后,便自动进入阻塞状态去等待。在I/O操作完成后,再由中断处理程序或中断进程将该进程唤醒。

     3)新数据尚未到达,对于相互合作的进程,如果其中一个进程需要先获得另一(合作)进程提供的数据后才能对数据进行处理,则只要其所需数据尚未到达,该进程只有(等待)阻塞。

     4)无新工作可做,系统往往设置一些具有某特定功能的系统进程,每当这种进程完成任务后,便把自己阻塞起来以等待新任务到来。

 

     进程的阻塞是进程自身的一种主动行为。正在执行的进程,当发生上述某事件时,由于无法继续执行,进程便通过阻塞原语block()把自己阻塞。进入block过程后,由于此时该进程还处于执行状态,先立即停止执行,把进程控制块中的现行状态由“执行”改为“阻塞”,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程并进行切换,保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU的环境。

 

     进程唤醒过程,当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如用完并释放该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

 

     block原语和wakeup原语是一对作用相反的原语。如果在某进程中调用了阻塞原语,则必须在与之相合作的另一进程中或其他相关的进程中安排唤醒原语,以能唤醒阻塞进程;否则,被阻塞进程将会因不能被唤醒而长久地处于阻塞状态,从而再无机会继续运行。

 

进程的挂起与激活:进程的挂起、进程的激活过程

     进程的挂起,当出现引起进程挂起的事件时,比如,用户进程请求将自己挂起,或父进程请求将某子进程挂起,系统将利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起。

     过程:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则改为静止阻塞。为了方便用户或父进程考查该进程的运行情况而把该进程的PCB复制到某指定的内存区域。最后,若被挂起的进程正在执行,则转向调度程序重新调度。

    

     进程的激活过程,当发生进程激活进程的事件时,例如,父进程或用户进程请求激活指定进程,若该进程驻留在外存而内存中已有足够的空间时,则将在外存上处于静止就绪状态的该进程换入内存。系统利用激活原语active()将指定进程激活。

     过程:将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,改为活动就绪;若为静止阻塞,改为活动阻塞。假如采用的是抢占调度策略,则每当有新进程进入就绪队列时,应检查是否要进行重新调度,即有调度程序将被激活进程与当前进程进行优先级的比较,如果被激活进程的优先级更低,就不必重新调度;否则,立即剥夺当前进程的运行,把处理机分配给刚被激活的进程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值