第2章进程管理(2)(1)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/1/1912.2进程控制进程控制就是对系统中的所有进程实施管理,进程控制一般用原语来实现。一般由OS内核来实现。所谓原语是一种特殊的系统功能调用,它可以完成一个特定的功能,其特点是原语执行时不可被中断,既具有“原子性”。2020/1/192因为:为了对进程进行有效的管理和控制,操作系统要提供若干基本的操作,以便能创建进程、撤消进程、阻塞进程和唤醒进程。这些操作对于操作系统来说是最为基本、最为重要的。为了保证执行时的绝对正确,要求它们以一个整体出现,不可分割。也就是说,一旦启动了它们的程序,就要保证做完,中间不能插入其他程序的执行序列。这就是所谓的原语。2020/1/193常用的进程控制原语创建原语终止原语阻塞原语、唤醒原语2020/1/1942.2.1进程的创建进程图(ProcessGraph)进程图是用于描述一个进程的家族关系的有向树(子进程,父进程)子进程可以继承父进程所拥有的资源DEFGHBCIJKLMA2020/1/1952.2.1进程的创建引起进程创建的事件用户登录作业调度提供服务应用请求进程创建的过程为新进程分配唯一的进程标识符,并从PCB队列中申请一个空闲PCB。为新进程的程序和数据,以及用户栈分配相应的内存空间及其它必要分配资源。初始化PCB中的相应信息,如标识信息、处理器信息、进程控制信息等。如果就绪队列可以接纳新进程,便将新进程加入到就绪队列中。2020/1/1962.2.2进程的终止引起进程终止的事件正常结束异常结束外界干预进程终止的过程根据被终止进程的标识符,从PCB集合中检索该进程的PCB,读出进程状态。若该进程处于执行状态,则立即终止该进程的执行。若该进程有子孙进程,还要将其子孙进程终止,并准备重新分配CPU。将该进程所占用的资源回收,归还给其父进程或操作系统。将被终止进程的PCB从所在队列中移出,并撤消该进程的PCB。2020/1/1972.2.3进程的阻塞与唤醒阻塞:当一个进程所期待的某一事件尚未出现时,该进程调用阻塞原语将自己阻塞。进程阻塞是进程的自身的一种主动行为。唤醒:处于阻塞状态的进程是绝不可能叫醒它自己的,它必须由它的合作进程用唤醒原语唤醒它。2020/1/198进程的阻塞引起进程阻塞的事件请求系统服务启动某种操作新数据尚未到达无新工作可做进程阻塞的过程立即停止执行该进程。修改PCB中的相关信息。把进程控制块中的运行状态由“执行”状态改为“阻塞”状态,并填入等待的原因,以及进程的各种状态信息。把PCB插入到阻塞队列。根据阻塞队列的组织方式,把阻塞进程的进程控制块插入到阻塞队列中。转调度程序重新调度,运行就绪队列中的其他进程。2020/1/199进程的唤醒引起进程唤醒的事件请求系统服务得到满足启动某种操作完成新数据已经到达有新工作可做进程唤醒的过程从阻塞队列中找到该进程。修改该PCB的相关内容。把阻塞状态改为就绪状态,删除等待原因等等。把进程控制块插入到就绪队列。按照就绪队列的组织方式,把被唤醒的进程的PCB插入到就绪队列中。2020/1/1910进程的唤醒Block原语和wakeup原语是一对作用刚好相反的原语,因此,如果在进程中调用了阻塞原语,则必须在与之相合作的另一进程中或其他相关进程中安排唤醒原语,以能唤醒阻塞进程。2020/1/19112.2.4进程的挂起与激活引起进程挂起的事件(suspend)用户进程请求将自己挂起父进程请求挂起子进程进程挂起的过程检查进程状态:有活动就绪转为静止就绪有活动阻塞转为静止阻塞把该进程的PCB复制到某指定的内存区域若进程正在执行,则转调度程序重新调度,运行就绪队列中的其他进程。2020/1/1912进程的激活(active)引起进程激活的事件父进程或用户进程请求将挂起进程激活进程激活的过程将进程调入内存检查进程状态:有静止就绪转为活动就绪有静止阻塞转为活动阻塞在抢占策略中,有可能转调度程序重新调度。2020/1/1913练习为使进程由活动就绪转变为静止就绪,应用()原语;为使进程由执行状态转变为阻塞状态,应利用()原语;为使进程由静止就绪变为活动就绪,应利用()原语;为使进程从阻塞状态变为就绪状态,应利用()原语。对进程的管理和控制使用_____。A、指令B、原语C、信号量D、信箱2020/1/1914练习下面所述步骤中,____不是创建进程所必需的。A、由调度程序为进程分配CPUB、建立一个进程控制块C、为进程分配内存D、将进程控制块链入就绪队列下述哪一项体现了原语的主要特点A、并发性B、异步性C、共享性D、不可分割性2020/1/1915练习一个进程被唤醒意味着____。A、该进程重新占有了CPUB、它的优先权变为最大C、其PCB移至等待队列队首D、进程变为就绪状态2020/1/19162.3进程同步2.3.1基本概念2.3.2信号量机制2.3.3信号量机制的应用2020/1/19172.3.1基本概念与时间有关的错误:一飞机订票系统,两个终端,运行T1、T2进程T1:T2:......Read(x);Read(x);ifx=1thenifx=1thenx:=x-1;x:=x-1;write(x);write(x);......2020/1/1918hibdcegfa并发环境下程序间的制约关系2020/1/19192.3.1基本概念进程同步的主要任务:是使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性2020/1/1920多道程序间有两种制约关系:间接制约:多个操作不能同时执行,如:操作A和操作B不能在同时执行。(资源共享关系)直接制约:对于进程操作的时间顺序所加的某种限制,如操作A应在B之前执行。(相互合作关系)2020/1/1921临界资源(criticalresource):一次仅允许一个进程访问的资源。如:进程AB共享一台打印机,若让它们交替使用则得到的结果肯定不是我们希望的。临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。并发进程对临界资源的访问必须作某种限制,否则就可能出与时间有关的错误,如:联网售票。诸进程之间用互斥的方式,实现对这种资源的共享2020/1/1922生产者-消费者(producer-consumer)问题是一个著名的进程同步问题。它描述的是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品;也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。2020/1/1923我们可利用一个数组来表示上述的具有n个(0,1,…,n-1)缓冲区的缓冲池。用输入指针in来指示下一个可投放产品的缓冲区,每当生产者进程生产并投放一个产品后,输入指针加1;用一个输出指针out来指示下一个可从中获取产品的缓冲区,每当消费者进程取走一个产品后,输出指针加1。由于这里的缓冲池是组织成循环缓冲的,故应把输入指针加1表示成in∶=(in+1)modn;输出指针加1表示成out∶=(out+1)modn。当(in+1)modn=out时表示缓冲池满;而in=out则表示缓冲池空。此外,还引入了一个整型变量counter,其初始值为0。每当生产者进程向缓冲池中投放一个产品后,使counter加1;反之,每当消费者进程从中取走一个产品时,使counter减1。生产者和消费者两进程共享下面的变量:2020/1/1924Varn,integer;typeitem=…;varbuffer:array[0,1,…,n-1]ofitem;in,out:0,1,…,n-1;counter:0,1,…,n;指针in和out初始化为1。在生产者和消费者进程的描述中,no-op是一条空操作指令,whileconditiondono-op语句表示重复的测试条件(condication),重复测试应进行到该条件变为false(假),即到该条件不成立时为止。在生产者进程中使用一局部变量nextp,用于暂时存放每次刚生产出来的产品;而在消费者进程中,则使用一个局部变量nextc,用于存放每次要消费的产品。2020/1/1925producer:repeat…produceaniteminnextp;…whilecounter=ndono-op;buffer[in∶=nextp;in∶=in+1modn;counter∶=counter+1;untilfalse;consumer:repeatwhilecounter=0dono-op;nextc∶=buffer[out];out∶=(out+1)modn;counter∶=counter-1;consumertheiteminnextc;untilfalse;2020/1/1926虽然上面的生产者程序和消费者程序,在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发执行时,就会出现差错,问题就在于这两个进程共享变量counter。生产者对它做加1操作,消费者对它做减1操作,这两个操作在用机器语言实现时,常可用下面的形式描述:register1∶=counter;register2∶=counter;register1∶=register1+1;register2∶=register2-1;counter∶=register1;counter∶=register2;2020/1/1927假设:counter的当前值是5。如果生产者进程先执行左列的三条机器语言语句,然后消费者进程再执行右列的三条语句,则最后共享变量counter的值仍为5;反之,如果让消费者进程先执行右列的三条语句,然后再让生产者进程执行左列的三条语句,counter值也还是5,但是,如果按下述顺序执行:register1∶=counter;(register1=5)register1∶=register1+1;(register1=6)register2∶=counter;(register2=5)register2∶=register2-1;(register2=4)counter∶=register1;(counter=6)counter∶=register2;(counter=4)解决此问题的关键,是应把变量counter作为临界资源处理。令生产者进程和消费者进程互斥地访问变量。2020/1/1928互斥关系互斥互斥就是若干进程竞争进入临界段时,相互之间所形成的排它性关系。对临界段的实现,表现为对互斥关系的实现。当一个进程处于临界段时,其他的进程必须等待,直到临界段中的进程数为零。临界段的设计原则:(1)每次至多只允许一个进程处于临界段中。(2)对于请求进入临界段的多个进程,在有限时间内只让一个进入。(3)进程只应在临界段中停留有限时间。要实现临界段,就是要寻找某一种手段来实现临界段的三条设计原则。2020/1/1929互斥关系进程A:X=1;Y=2;M=X;X=Y;Y=M;printf(A:X=%d,Y=%d\n,X,Y);了解临界段进程B:K=3;L=4;M=K;K=L;L=M;printf(B:K=%d,L=%d\n,K,L);不同的执行顺序有不同的结果!进程A→进程B、或者进程B→进程A结果:A:X=2,Y=1B:K=4,L=3或者B:K=4,L=3A:X=2,Y=1如果两个进程交替运行,形式如:进程A:X=1;Y=2;进程B:K=3;L=4;进程A:M=X;X=Y;Y=M;进程B:M=K;K=L;L=M;进程A:printf(A:X=%d,Y=%d\n,X,Y);进程B

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功