您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 《操作系统》第2章 进程管理2
操作系统原理PrinciplesofOperatingSystem22.4进程的同步机构2.4.1进程与资源资源是计算机系统的基本结构元素。资源可以分为软件资源和硬件资源,程序和数据属于软件资源;CPU、内存、外设则属于硬件资源。在操作系统中一般把资源分为临界资源和共享资源,所谓的临界资源是指在一段时间内仅允许一个进程使用资源。如打印机、输入机、磁带机、信号量和指针等,临界资源可以互斥共享;所谓的共享资源是指允许多个进程同时访问的资源。如处理机、内存和硬盘等。3⒉进程制约关系①间接相互制约。这种制约主要源于资源共享,这是不相关的进程由于共享同一资源而引起的,即共享某类资源的进程之间由操作系统协调与控制使用该资源的次序而产生相互制约。这种制约是进程—资源—进程之间存在的约束,故称为间接制约。例如,有两个进程A和B,如果在进程A提出打印请求时,系统已将打印机分配给进程B,此时进程A阻塞。当进程B将打印机释放,进程A被唤醒,获得打印机,由阻塞状态转为就绪状态。4②直接相互制约。这是相关进程之间为完成同一任务,进程某些操作之间在次序上存在制约关系。如果协作进程的某个操作没有完成,那么进程就会在工作到某些点上等待这个动作的完成,之后才能继续执行下去。我们称这些并发执行的进程间存在着制约关系。这种制约是进程—进程之间因共同目的而存在的直接约束,故称为直接制约。例如,输入进程A通过单缓冲向计算进程B提供数据。当缓冲区空时,计算进程B因不能获得所需数据而阻塞,当进程A把数据送入缓冲时,便唤醒进程B;反之,当缓冲区满时,进程A因不能再向缓冲中投放数据而阻塞,当进程B将缓冲内数据取走时,便唤醒进程A。5⒊进程与资源的关系从这样一个简单系统的管理中我们得出一个结论:操作系统的任务是控制与管理进程和资源,必须提供一些机制来协调进程与进程之间、进程与资源之间的复杂关系。64.临界区设计原则我们对每个进程访问临界资源的那段程序从概念上分离出来,称之为临界区。临界区设计原则如下:①进入区(entrysection)。申请临界资源,为了进入临界区使用临界资源,在进入区要检查可否进入临界区,如果可以进入临界区,通常设置相应的“正在访问临界区”标志,以阻止其他进程同时进入临界区。②访问区(criticalsection)。进程中访问临界资源的一段代码。③退出区(exitsection)。将“正在访问临界区”的标志清除,释放临界资源。72.4.2进程同步机构⒈进程同步与互斥的概念在系统中有一些需要相互合作、协同工作的进程,这些进程的某些操作存在某种次序上的制约关系,这种制约关系称为进程的同步。多个相关进程在访问临界资源在操作时间上相互排斥。这种相互排斥关系叫做进程的互斥。各个进程互斥使用临界资源,互斥的实质是互斥共享临界资源,也可以认为互斥是同步的一种特殊形式。82.同步机构应遵循的准则空闲让进忙则等待有限等待让权等待9⒊上锁原语与开锁原语实现的方法:设置锁变量w,w=1表示上锁,w=0表示开锁。上锁原语voidlock(w){while(w==1)no-operate;w=1;}开锁原语voidunlock(w){w=0;}请读者思考上锁原语与开锁原语是否符合同步机构应遵循的准则?10⒋信号量与P、V操作信号量的值仅能由P操作、V操作改变的结构体变量。信号量的值大于等于零时代表一类可用资源个数,其值小于零时其绝对值代表被阻塞进程的个数。信号量的描述如下:structsemaphore{intvalue;queue*WQ[r];};11wait操作描述和定义如下:semaphoresvoidwait(s){s.value--;if(s.value0)block(s.WQ[r]);/*阻塞该进程*/}V操作描述和定义如下:semaphoresvoidsignal(s){s.value++;if(s.value=0)wakeup(s.WQ[r]);/*唤醒阻塞队列的对首进程*/}122.5经典进程同步问题2.5.1进程互斥利用wait操作、signal操作设计出三个进程共享一台打印机的并发程序描述如下:semaphoremutex=1;voidmain(){parbegin(P1(),P2(),P3());}voidPi()/*i=1,2,3*/;{……wait(mutex);使用打印机;signal(mutex);……}132.5.2生产者与消费者问题设置信号量和变量如下:full:满缓冲区资源信号量,初值为0;empty:空缓冲区资源信号量,初值为n;in:生产者指针,初值均为0;out:消费者指针,初值均为0;mutex:缓冲区操作的互斥信号量,初值为1;14生产者与消费者问题描述如下:semaphoreempty=n;semaphorefull=0;semaphoremutex=1;messagebuffer[n];intin=0;intout=0;voidmain(){parbegin(proceducer(),consumer());}15voidproceducer(){do{produceanewmessage;wait(empty);wait(mutex);sendanewmessagetobuffer[in];in=(in+1)%n;signal(mutex);signal(full);}while(true);}16voidconsumer(){do{wait(full);wait(mutex);getamessagefrombuffer[out];out=(out+1)%n;signal(mutex);signal(empty);consumeamessage;}while(true);}172.5.3哲学家进餐的问题分析:每个哲学家的行为是:思考,感到饥饿,拿到两只筷子,进餐,餐毕,放下两只筷子又继续思考。为了进餐,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。但他可能一支都拿不到。只有在他拿到两支筷子时方能进餐。设置信号量如下:哲学家进餐信号量sm,初值为4;筷子信号量chopstick[i],初值为1;哲学家进餐问题描述如下:18semaphoresm=4;semaphorechopstick[5]={1,1,1,1,1};voidmain(){parbegin(philosopher0(),philosopher1(),philosopher2(),philosopher3(),philosopher4());}voidphilosopheri();/*i=0,1,2,3,4*/{while(true){Thinking;wait(sm);wait(chopstick[i]);wait(chopstick[(i+1)%5]);Eating;signal(chopstick[(i+1)%5]);signal(chopstick[i]);signal(sm);}}19哲学家进餐的问题主要研究如果解决死锁与饥饿。在多进程并发系统中,多个进程共享资源的程度可以分成以下三个层次:互斥、死锁和饥饿。互斥是指多个相关进程中只允许一个进程访问临界资源,这是正确使用资源的最基本要求;某进程申请的资源被其他等待进程占有,如果该等待进程永远无法改变其阻塞状态,这种情况我们称为死锁;如果该等待进程长期无法改变其阻塞状态,这种情况我们称为饥饿。202.6进程通信我们可把进程间通信分成低级通信和高级通信:①低级通信。进程间只能传递状态和整数值(控制信息),包括进程互斥和同步所采用的信号量机制。它的优点是速度快,缺点是传送信息量小,通信效率低,编程复杂。由于每次通信传递的信息量固定,因此若传递信息较多则需要进行多次通信。用户直接实现通信的细节,编程复杂,容易出错。②高级通信。进程间可传送大量的数据,通信效率高,减轻编程的复杂度。包括共享存储器通信、管道通信和消息传递通信等通信机制。21进程通信分为直接通信和间接通信:①直接通信。是指发送方把信息直接传递给接收方。②间接通信。是指通信过程要借助收发双方进程之外的共享数据结构作为通信中转,如信箱。进程的高级通信有三种方式:①共享存储器通信方式。②共享文件通信方式。③消息传递通信方式。222.6.2共享存储器通信方式①基于共享存储区通信方式②基于共享数据结构的通信方式232.6.3共享文件通信方式管道通信方式就是利用共享文件实现进程间的通信。这种通信方式也叫管道通信。如图所示,所谓管道,是指用于连接一个读进程和一个写进程的文件,称pipe文件。向管道输入数据的进程称为写进程,而接受管道数据的进程称为读进程。该方式首创于UNIX,它能传送大量数据,被广泛采用。242.6.4消息传递通信方式消息传递通信方式不仅适合计算机内部通信,也支持计算机网络通信,消息传递通信方式得到广泛应用。消息传递通信一般分为消息缓冲通信、信箱通信和基于消息传递通信等三种。⒈消息缓冲通信的实现发送原语和接收原语一般应用格式如下:send(receiver,message);receive(sender,message)或receive(message);2526⒉信箱通信的实现信箱通信方式中也使用原语操作,如发送原语与接收原语等。此外,许多时候都存在着多个发送进程和多个接收进程共享信箱的情况。信箱发送原语和接收原语一般应用格式如下:send(mailbox,message);receive(mailbox,message);272.7基于消息传递的网络通信消息队列中间件是一种特定的中间件,它利用高效可靠的消息传递机制进行与平台无关的数据交换,并基于数据通信来进行分布式系统的集成。消息中间件可以跨平台操作。采用消息队列技术带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代码,因而大大地提高了事物处理的能力;当信息传送过程中,信息发送机制具有一定功能的故障恢复能力;消息传递机制使得消息通信的双方具有不同的物理平台成为可能。282.7.1基于消息传递的通信基于消息传递的通信方式,不仅适合计算机内部通信,也支持计算机网络通信,消息传递通信方式在现代操作系统中得到了广泛的应用。如图所示,在Internet上客户机/服务器的关系并不是一成不变的。当提供服务时,该节点是服务器。当从其他节点获得服务时,该节点就是客户机。29具体通信原语一般应用格式如下:客户端:send(server-socket,&m1)receive(client-port,&m2)服务器端:receive(server-port,&m1)send(m1.source,&m2)其中:&m1、&m2为消息的发送区和接受区的地址;server-socket:服务器的套接字;server-port:服务器的端口;client-port:客户的的端口;m1.source客户请求包的源地址。302.7.2端口端口(port)就是运输层服务访问点TSAP。从这个意义上讲,端口是用来标识应用层的进程。当客户机进程发出连接请求时,它被主机赋予一个端口。在运输层与应用层的接口上所设置端口是一个16bit的地址,并用端口号进行标识。端口就是一个抽象的定位符,可以理解为一种邮箱。端口就是源进程将消息发送给运输层的某个端口,目的进程从端口接收消息。端口只是为了标识本计算机应用层中的各进程,不同计算机中的相同端口号是没有联系的,端口只具有本地意义。16bit的端口可允许有64K个端口,这个数目对一个计算机来说是足够用的。端口可分为两类。一类是熟知端口,其数值一般为0~1023。另一类则是一般端口,用来随时分配给请求通信的客户进程
本文标题:《操作系统》第2章 进程管理2
链接地址:https://www.777doc.com/doc-3291112 .html