当前位置:文档之家› 操作系统-进程管理

操作系统-进程管理

操作系统----进程管理引言:处理机管理是操作系统的基本管理功能之一,它所关心的是处理机的分配问题。

也就是说把CPU (中央处理机)的使用权分给某个程序,通常把这个正准备进入内存的程序称为作业,当这个作业进入内存后我们把它称为进程。

处理机管理分为作业管理和进程管理两个阶段去实现处理机的分配,常常又把直接实行处理机时间分配的进程调度工作作为处理机管理的主要内容。

进程通常具有三种状态:运行状态(正在使用CPU)、阻塞状态(等待输入/输出)和就绪状态(等待分配CPU)。

进程的引入:1,程序的顺序执行(1)顺序性(2)封闭性程序执行得到的最终结果由给定的初始条件决定,不受外界因素影响;(3)可再现性2,资源共享3,程序的并发执行及其特性(1)什么是并发执行尽管多道程序的并发执行在宏观上是同时进行的,但在微观上仍是顺序执行的。

第二种并发执行是在某到程序的几个程序段中,包含着一部分可以同时执行或顺序颠倒执行的代码。

所谓并发执行,是为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术。

程序的并发执行总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即是一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。

3.1.2进程的定义需要一个能描述程序的执行过程且能用来共享资源的基本单位,这个基本单位被称为进程。

可以这样定义进程:并发执行的程序在执行过程中分配和管理资源的基本单位。

进程和程序是两个既有联系又有区别的概念,它们的区别和联系可简述如下:(1)进程是一个动态的概念,而程序是一个静态概念。

程序时指令的有序集合,没有任何执行的含义。

而进程则强调执行过程,它动态地被创建,并被调度执行后消亡;(2)进程具有并发特征,而程序没有。

(3)进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。

(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。

进程与程序的区别和相互关系:(1)动态性和静态性。

(2)从结构上看每个进程的实体都是由程序段和相应的数据段两部分构成的,这一特征与程序的含义相近。

(3)一个进程可以涉及到一个或几个程序的执行;反之一程序可以对应多个进程,即同一程序段可在不同数据集合上运行,可构成不同的进程。

(4)并发性。

(5)进程具有创建其他进程的功能。

(6)操作系统中的每一个程序都是在一个进程现场中运行的。

3.2进程的描述一个进程是一个程序对某个数据集描述,是分配资源的基本单位。

进程的静态描述由三个部分组成:进程控制块PCB、有关程序段、该程序段对其进行操作的数据结构集;PCB包含一个进程的描述信息、控制信息及资源信息;进程的程序部分描述进程所要完成的功能;数据结构集是程序在执行时必不可少的工作区和操作对象;进程控制块的作用:进程控制块是进程存在的标志,当系统或父进程创建一个进程时,实际上就是为其建立一个进程控制块。

进程控制块既能标识进程的存在,又能刻画出进程的动态特征,它是一个进程仅有的被系统真正感知的部分。

对操作系统而言,所有进程控制块将构成并发执行控制和维护系统工作的依据。

3.3进程状态及其转换3.3.1进程状态在进程的生命周期内,一个进程至少具有5中基本状态,它们是:初始态、执行状态、等待状态、就绪状态、终止状态;(1)运行状态:进程正在处理机上运行的状态,该进程已获得必要的资源,也获得了处理机,用户程序正在处理机上运行。

(2)阻塞状态:进程等待某种事件完成(例如,等待输入/输出操作的完成)而暂时不能运行的状态,处于该状态的进程不能参加竞争处理机,此时,即使分配给它处理机,它也不能运行。

(3)就绪状态:该进程运行所需的一切条件都得到满足,但因处理机资源个数少于进程个数,所以该进程不能运行,而必须等待分配处理机资源,一旦获得处理机就立即投入运行。

在单CPU系统中,任一时刻处于执行状态的进程只能有一个。

只有处于就绪状态的进程经调度选中之后才可以进入执行状态;状态变化:(1)就绪状态变化到运行状态。

(2)运行状态变化到就绪状态。

(3)运行状态变化到阻塞状态。

(4)阻塞状态变化到就绪状态。

3.4进程控制进程控制:就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各个状态的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的;原语:把系统状态下执行的某些具有特定功能的程序段称为原语;原语分为两类:一类是机器指令级的,其特点是执行期间不允许中断,它是一个不可分割的单位;另一类是功能级的,其特点是作为原语的程序段不允许并发执行;通常把进程控制用程序做成原语:用于进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语;3.7进程通信3.7.1 临界资源和临界区把不允许多个并发进程交叉执行的一段程序称为临界部分或临界区临界区是由属于不同并发进程的程序段共享公用数据或共用变量而引起的。

因此,临界区也可以被称为访问公用数据(临界资源)的那段程序。

3.7.2 进程的通信方式之一——同步与互斥互斥:一组并发进程中的一个或多个程序段,因共享某一公有资源而导致他们必须以一个不允许交叉的单位执行,也就是说,不允许两个以上的共享资源的并发进程同时进入临界区称为互斥;一组并发进程互斥执行时必须满足如下四条准则:(1)不能假设各并发进程的相对执行速度;(2)并发进程中的某个进程不在临界区是,它不阻止其他进程进入临界区;(3)并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入;(4)并发进程中的某个进程申请进入临界区时开始,应在有限时间内得以进入临界区;一、互斥的加锁实现对临界区加锁以实现互斥,当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区为止;二、信号量和P、V原语1,信号量管理相应临界区的公有资源,它代表可用资源实体;在操作系统中,信号量sem是一整数,在sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时表示正在等待使用临界区的进程数;2,P、V原语p原语的主要动作:(1)sem减1;(2)若sem减1后仍大于或等于零,则P原语返回,该进程继续执行;(3)若sem减1后小于零,则该进程被阻塞后加入到与该信号相应的队列中,然后转进程调度;v原语的主要动作:(1)sem加1;(2)若相加结果大于零(表示没有等待调用的进程),v原语停止执行,该进程返回调用处,继续执行;(3)若相加结果小于或等于零,则从信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度;注意:P,V操作都必须以原语实现,且在P,V原语执行期间不允许中断发生;例题解析:问:使用p,v原语和加锁法都可以实现并发进程的互斥(1)p,v原语和加锁法实现互斥有何异同?加锁法实现互斥是这样的:当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区为止。

并发进程在申请进入临界区时,首先测试该临界区是否是上锁的,如果该临界区已经被锁住,则该进程要等待该临界区开锁之后才有可能获得临界区。

而p,v原语实现互斥是这样的:为临界资源设置一初值为1的信号量,该信号量只能由p,v 原语操作改变。

并发进程在申请进入临界区时,首先执行p操作,如果临界区已经被占用,则进程阻塞等待被一个v操作唤醒;否则允许进入进入临界区。

在退出临界区时,则执行v操作,若有其他进程等待使用该临界资源,则唤醒队首的进程;加锁操作与p,v原语实现互斥的不同主要有:1)加锁操作咋临界资源已经被占用的情况下,仍要循环测试锁的状态,这将耗费大量的CPU时间2)加锁操作部将等待临界资源的进程按申请次序排队,故有可能造成不公平的现象;(2)使用加锁法实现互斥时,有可能在进程使用临界区时造成不公平现象(即是某个进程一直占有临界区,其他进程永远无法使用)是找出一个不公平现象的例子,并分析产生不公平现象的原语;例子如下:如果有P1进程已通过加锁操作进入临界区内执行,则当p2进程申请进入对应的临界区时,将因临界区已上锁而处于忙等状态,即p2并不会阻塞排队。

当p1退出临界区时,它只需将临界区解锁,并不像v操作那样按次序唤醒等待进程;而且系统也不一定要立即进程调度;如果p1进程继续运行并再次申请进入临界区,则因临界区已解锁,它又可顺利进入临界区。

这将是p1进程一直占用临界区,而p2进程则长期等待,从而造成不公平的现象;习题:设有n个进程共享一个资源,对于如下两种:(1)如果每次只允许一个进程使用该资源;(2)如果每次允许m个进程(m<n)同时使用该资源;解析:两种情况下所采用的互斥信号量的初值不同,在前一种情况下,信号量的初值应设置为1,互斥信号量的实现与资源的使用有关,这种情况是一次只能一个进程使用该临界资源;此时信号量的变化范围是:[1-n,1];后一种情况是,信号量的初值应设置为m,而信号量的变化范围为【m—n,m】感悟:因此进程间的互斥关键在于公有信号量的设计上,这与进程同步不一样,在进程同步中是进程间的协作关系,这时我们考虑的是各个私有进程间的通信问题,此时设置的信号量是私有的;因此在对并发程序的设计时,对于公有变量(即是公有数据)一定要加锁实现,以期实现进程的互斥操作进程同步:异步环境下的一组并发进程,因直接制约而相互发送消息而进行互相合作,互相等待,使得各进程按一定的速度执行的过程称为进程间的同步;具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件;描述进程同步的实现方法:wait(消息名)表示进程等待合作进程发来的消息signal(消息名)表示向合作进程发送消息;例题:试从物理观念上来说明记录性信号量wait与signal操作?从物理观念上来看,一个记录型信号量S可以用来表示一类临界资源的使用情况,S.value的初值表示系统中该类资源的总数;在使用过程中,若S.value>0,则表示系统中还有S.value个该类资源处于空闲状态。

对它每次wait操作,意味着进程请求一个单位的该类资源,因此描述为S.value--;当S.value<0表示资源已经分配完毕,因此进程应将自己插入S.L队列中,并调用block 原语将自己阻塞,此时S.value的绝对值表示因申请该种资源而被阻塞的进程的个数。

对信号量的每次signal操作,表示执行进程释放一个单位的资源,因此要执行S.value++操作将资源数目加一;若果加1后仍是S.value<=0,则表示仍有等待资源的进程处于阻塞状态,故应调用wakeup 原语唤醒S.L队列中的一个进程;私用信号量一般来说,也可以把各进程之间发送的消息作为信号量看待。

这里的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关;因此,称该信号量为私有信号量。

相关主题