




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重要的知识点:进程与程序的差异。(1)进程是动态的,而程序是静态的。(2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。(3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系进程的三种基本状态及其状态转换。P.383.P、V操作的概念及如何用其实现同步和互斥。4处理机调度的概念。在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机这一重要的资源。处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。处理机调度是把处理机分配给就绪队列中的一个进程。在许多系统中,这个调度活动分成三个层次:高级调度、中级调度和低级调度。5操作系统的基本特征和功能特征:1.并发性:平行性、引入进程、引入线程2.共享性:是指系统中的资源可供内存中多个并发执行的进程共同使用。互斥共享、同时访问方式3.虚拟技术:是指通过某种技术把一个物理实体变为若干个逻辑上的对应物。分为时分复用和空分复用技术。4.异步性:进程是以人们不可预知的速度向前推进,此即进程的异步性。功能:1.处理机管理功能:进程控制,进程同步,进程通信,调度2.存储器管理功能:内存分配、内存保护、地址映射、内存扩充3.设备管理功能:缓冲管理、设备分配、设备处理4.文件管理功能:文件存储空间的管理、目录管理、文件的读/管理和保护。操作系统与用户之间接口用户接口、程序接口6当前的高级通信机制有哪些?进程通信分类:低级通信:特点:交换的信息量少,仅仅是一些数据和状态的变化;通信由程序员完成。如P,V原语实现的进程互斥与同步。2、高级通信;特点:每次交换的信息量可以很大;系统提供高效、简捷的信息传输命令。1、共享存储器系统(Shared-MemorySystem)共享数据结构的通信方式:公用数据结构的设置及对进程间同步的管理,都是由程序员完成,效率低,传递数据量少;共享存储区的通信方式:进程可随时向系统申请一块存储区,并指定该区的关键字,用于进程通信。2、管道通信(PipeCommunication)用以连接一个读进程和写进程以实现他们之间的通信的一个共享文件3、消息传递系统(MassagePassingSystem)格式化的消息为单位7在生产者和消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)和signal(full)互换位置,结果会如何?在生产者—消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。若signal(mutex)和signal(full)互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。8操作系统中采用缓冲技术的目的是什么?//操作系统中采用缓冲技术的目的是为了增强系统并行操作的能力.1.缓和CPU与I/O设备间速度不匹配的矛盾(如打印机缓冲区)。2.减少对CPU的中断频率,放宽对CPU中断响应时间的限制。3.提高CPU和I/O设备之间的并行性(加了打印机缓冲后打印机和CPU并行工作)。9SPOOLing系统由哪几部分组成?以打印机为例说明如何利用SPOOLing技术实现多个进程对打印机的共享。SPOOling系统的组成:SPOOLIng系统是对脱机I/O工作的模拟,其必须有高速随机外存(通常采用磁盘)的支持SPOOLING系统有以下四个部分:1.输入井和输出井,为磁盘上开辟的两大存储空间,分别模拟脱机输入/出时的磁盘并用于收容I/O设备输入的数据和用户程序的输出数据2.输入缓冲区和输出缓冲区,在内存中开辟,分别用于暂停由输入设备和输出井送来的数据3.输入进程SPi和输出进程SP0分别模拟脱机输入/出时的外围控制机,用于控制I/O过程4.I/O请求队列,由系统为各个I/O请求进程建立的I/O请求表构成的队列.廉价磁盘冗余阵列:利用一台磁盘阵列控制器,来统一管理和控制一组磁盘驱动器,组成一个高度可靠的快速的大容量磁盘系统??1输入井和输出井2输入缓冲区和输出缓冲区3输入进程SPi和输出进程SPo4I/O请求队列10外存文件区的管理应以什么为主要目标?对外存对换区的管理应以提高换入换出速度为主要目标,对外存文件区的管理应以提高存储空间的利用率为主要目标。11什么是FCB,它包含哪些信息,作用?操作系统为管理文件而设置的数据结构,存放了为管理文件所需的所有有关信息。文件与文件控制块一一对应。文件控制块是文件存在的标志。一个FCB就是目录表中的一个目录项。基本信息文件名:标识一个文件的符号名。文件物理位置:文件在外存上的存储位置,包括存放文件的设备名、起始盘块号、占用的盘块数文件逻辑结构:流式文件还是记录式文件、记录数;定长记录还是变长记录等。文件的物理结构:指示文件是顺序文件,还是链接式文件或索引文件等。存取控制信息类:文件主的存取权限、核准用户的存取权限以及一般用户的存取权限。使用信息类:文件的建立日期和时间、文件上一次修改的日期和时间及当前使用信息(如已打开该文件的进程数、是否被其它进程锁住、文件在内存中是否已被修改但尚未拷贝到盘上。)12什么是地址变换?如是是操作系统的存储器管理,则是(1)保护方式的地址转换:处理器内部的分段单元将逻辑地址转换为线性地址,再由分页单元将线性地址转换为物理地址,物理地址通过地址总线输出选择存储器芯片中的具体存储单元。(2)实地址方式的地址转换:实地址方式采用实地址存储模型,注意其的主存空间只有1MB=220字节),仅使用地址总线的低20位,其物理地址范围为00000H~FFFFFH。实地址存储模型也进行分段管理,但有两个限制:•每个段最大为64KB•段只能开始于低4位地址全为0的物理地址处实地址方式的段寄存器直接保存20位段基地址的高16位,段内的偏移地址也用16位表示。这样将逻辑地址转换为物理地址的方法是:将段寄存器中的数值左移二进制4位(十六进制一位),加上偏移地址就得到20位物理地址。基本地址变换机制块表地址变换机制13设备和内存间的数据传送控制方式有几种?程序I/O方式中断驱动I/O控制方式直接存储器访问控制方式I/O通道控制方式14银行家算法某系统中有10台打印机,有三个进程P1P2P3分别需要8台7台4台若P1P2,P3已申请到4台,2台和2台。试问:按银行家算法能安全分配吗?答:申请后系统把2台机分配给p3,p3完成后释放所有的资源4,再分配给p1,p1完成后释放8,再分配给p2安全状态:指体统能按着某种进程顺序(p1,p2,...pu)来为每个进程pi分配其所需资源,知道满足每个进程对资源的最大需求,是每个进程都可顺利的完成15分页和分段存储管理方式的地址转换(逻辑地址转换为物理地址),见PPT中的内容。16给出一个进程序列,会计算采用先来先服务、时间片轮转(q为轮转的时间片)调度算法的平均周转时间、平均带权周转时间。(见教材92的表)17会计算FIFO、LRU两种置换算法的缺页次数。18死锁产生的必要条件是什么?互斥条件;2.请求和保持条件;3.不剥夺条件;4.环路等待条件。生产者—消费者问题1.利用记录型信号量解决生产者—消费者问题假定在生产者和消费者之间的公用缓冲池中,具有n个缓冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。Varmutex,empty,full:semaphore∶=1,n,0;buffer:array[0,…,n-1]ofitem;in,out:integer∶=0,0;beginparbeginproceducer:beginrepeat…produceranitemnextp;…wait(empty);wait(mutex);buffer(in)∶=nextp;in∶=(in+1)modn;signal(mutex);signal(full);untilfalse;endconsumer:beginrepeatwait(full);wait(mutex);nextc∶=buffer(out);out∶=(out+1)modn;signal(mutex);signal(empty);consumertheiteminnextc;untilfalse;endparendend在生产者—消费者问题中应注意:首先,在每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现;其次,对资源信号量empty和full的wait和signal操作,同样需要成对地出现,但它们分别处于不同的程序中。例如,wait(empty)在计算进程中,而signal(empty)则在打印进程中,计算进程若因执行wait(empty)而阻塞,则以后将由打印进程将它唤醒;最后,在每个程序中的多个wait操作顺序不能颠倒。应先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait操作,否则可能引起进程死锁。利用管程解决生产者——消费者问题(1)put(item)过程。生产者利用该进程将自己生成的产品投入到缓冲池中,并用整型变量count来表示在缓冲池中已有的产品数目,当count>=n时,表示缓冲池已满。生产者等待。(2)get(item)过程。消费者利用该进程从缓冲池中取出一个产品,当count<=0时,表示缓冲池中已无可取用的产品,消费者等待。PC管程可描述如下:typeproducer-consumer=monitorvarin,out,count:integer;buffer:array[0,….,n-1]ofitemnotfull,notempty:condition;procedureentryput(item)beginifcount>=0thennotfull.wait;buffer(in):=nextp;in:=(in+1)modn;count:=count+1;ifnotempty.queuethennotempty.signal;endprocedureentryget(item)beginifcount<=0thennotempty.wait;nextc:=buffer(out);out:=(out+1)modn;count:=count-1;ifnotfull.queuethennotfull.signalendbeginin:=out:=0count:=0end利用管程解决生产者——消费者问题时。produce:beginrepeatproduceaniteminnextpPC.put(item)unitlfalse;endconsumer:beginrepeatPC.get(item)consumertheiteminnextcunitlfalse;endPV原语的含义
P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时则表示正在等待使用临界区的进程数。
P原语操作的动作是:
(1)sem减1;
(2)若sem减1后仍大于或等于零,则进程继续执行;
(3)若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。
V原语操作的动作是:
(1)sem加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。
PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。
用PV原语实现进程的互斥
由于用于互斥的信号量sem与所有的并发进程有关,所以称之为公有信号量。公有信号量的值反映了公有资源的数量。只要把临界区置于P(sem)和V(sem)之间,即可实现进程间的互斥。就象火车中的每节车厢只有一个卫生间,该车厢的所有旅客共享这个公有资源:卫生间,所以旅客间必须互斥进入卫生间,只要把卫生间放在P(sem)和V(sem)之间,就可以到达互斥的效果。以下例子说明进程的互斥实现。
例1
生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:
(1)进程A专门拣黑子,进程B专门拣白子;
(2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣子;
分析:
第一步:确定进程间的关系。由功能(2)可知进程之间是互斥的关系。
第二步:确定信号量及其值。由于进程A和进程B要互斥进入箱子去拣棋子,箱子是两个进程的公有资源,所以设置一个信号量s,其值取决于公有资源的数目,由于箱子只有一个,s的初值就设为1。
实现:
begin
s:semaphore;
s:=1;
cobegin
processA
begin
L1:P(s);
拣黑子;
V(s);
gotoL1;
end;
processB
begin
L2:P(s);
拣白子;
V(s);
gotoL2;
end;
coend;
end;
判断进程间是否互斥,关键是看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。确定信号量的值是一个关键点,它代表了可用资源实体数。如下实例:
例2
某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。每个购票者可看成一个进程。
分析:第一步:确定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待。所以进程间是互斥的关系。第二步:确定信号量及其值。只有一个公有资源:售票厅,所以设置一个信号量s。售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。
实现:
begin
s:semaphore;
s:=20;
cobegin
processPI(I=1,2,……)
beginP(s);
进入售票厅;
购票;
退出;
V(s);
end;
coend
当购票者进入售票厅前要执行P(s)操作,执行后若s大于或等于零,说明售票厅的人数还未满可进入。执行后若s小于零,则说明售票厅的人数已满不能进入。这个实现中同时最多允许20个进程进入售票厅购票,其余进程只能等待。
用PV原语实现进程的同步
与进程互斥不同,进程同步时的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关,所以称该信号量为私有信号量。利用PV原语实现进程同步的方法是:首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。下面我们将例1增添一个条件,使其成为进程间是同步的。
例3
在例1的基础之上再添加一个功能:
(3)当一个进程拣了一个棋子(黑子或白子)以后,必让另一个进程拣一个棋子(黑子或白子)。
分析:
第一步:确定进程间的关系。由功能(1)(2)(3)可知,进程间的关系为同步关系。第二步:确定信号量及其值。进程A和B共享箱子这个公有资源,但规定两个进程必须轮流去取不同色的棋子,因而相互间要互通消息。对于进程A可设置一个私有信号量s1,该私有信号量用于判断进程A是否能去拣黑子,初值为1。对于进程B同样设置一个私有信号量s2,该私有信号量用于判断进程B是否能去拣白子,初值为0。当然你也可以设置s1初值为0,s2初值为1。
实现:
begin
s1,s2:semaphore;
s1:=1;s2:=0;
cobegin
processA
begin
L1:P(s1);
拣黑子;
V(s2);
gotoL1;
end;
processB
begin
L2:P(s2);
拣白子;
V(s1);
gotoL2;
end;
coend;
end;
另外一个问题就是P原语是不是一定在V原语的前面?回答是否定的。下面看一个例子。
例4
设在公共汽车上,司机和售票员的活动分别是:司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用PV操作对其控制。
分析:
第一步:确定进程间的关系。司机到站停车后,售票员方可工作。同样,售票员关车门后,司机才能工作。所以司机与售票员之间是一种同步关系。
第二步:确定信号量及其值。由于司机与售票员之间要互通消息,司机进程设置一个私有信号量run,用于判断司机能否进行工作,初值为0。售票员进程设置一个私有信号量stop,用于判断是否停车,售票员是否能够开车门,初值为0。
实现:
beginstop,run:semaphore
stop:=0;run:=0;
cobegin
driver:begin
L1:P(run);
启动车辆;
正常行车;
到站停车;
V(stop);
goto
L1;
end;
conductor:begin
L2:上乘客;
关车门;
V(run);
售票;
P(stop);
开车门;
下乘客;
gotoL2;
end;
coend;
end;
用PV操作还可以实现进程同步与互斥的混合问题,典型的如:多个生产者和多个消费者共享容量为n的缓存区。这个例子在很多书中都有介绍,在这里就不说了。PV原语PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2)semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问。初始化可指定一个非负整数,即空闲资源总数。P原语:P是荷兰语Proberen(测试)的首字母。为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;V原语:V是荷兰语Verhogen(增加)的首字母。为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。具体PV原语对信号量的操作可以分为三种情况:1)把信号量视为一个加锁标志位,实现对一个共享变量的互斥访问。
实现过程:
P(mutex);//mutex的初始值为1访问该共享数据;
V(mutex);
非临界区2)把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访问。
实现过程:
P(resource);//resource的初始值为该资源的个数N使用该资源;
V(resource);非临界区3)把信号量作为进程间的同步工具
实现过程:
临界区C1;
P(S);
V(S);
临界区C2;PV原语操作信号量
信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作。
本节将从以下几个方面进行介绍--
--------------------------------------------------------------------------------一.信号量的概念
1.信号量的类型定义
2.PV原语--------------------------------------------------------------------------------二.实例
1.生产者-消费者问题(有buffer)
2.第一类读-写者问题
3.哲学家问题--------------------------------------------------------------------------------一.信号量的概念
1.信号量的类型定义
每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述)semaphore=recordvalue:integer;queue:^PCB;end;其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。s.value>=0时,s.queue为空;s.value<0时,s.value的绝对值为s.queue中等待进程的个数;
返回--------------------------------------------------------------------------------2.PV原语
对一个信号量变量可以进行两种原语操作:p操作和v操作,定义如下:procedurep(vars:samephore);{s.value=s.value-1;if(s.value<0)asleep(s.queue);}procedurev(vars:samephore);{s.value=s.value+1;if(s.value<=0)wakeup(s.queue);}其中用到两个标准过程:asleep(s.queue);执行此操作的进程的PCB进入s.queue尾部,进程变成等待状态wakeup(s.queue);将s.queue头进程唤醒插入就绪队列s.value初值为1时,可以用来实现进程的互斥。p操作和v操作是不可中断的程序段,称为原语。如果将信号量看作共享变量,则pv操作为其临界区,多个进程不能同时执行,一般用硬件方法保证。一个信号量只能置一次初值,以后只能对之进行p操作或v操作。由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。
返回--------------------------------------------------------------------------------二.实例
1.生产者-消费者问题(有buffer)
问题描述:一个仓库可以存放K件物品。生产者每生产一件产品,将产品放入仓库,仓库满了就停止生产。消费者每次从仓库中去一件物品,然后进行消费,仓库空时就停止消费。解答:进程:Producer-生产者进程,Consumer-消费者进程共有的数据结构:buffer:array[0..k-1]ofinteger;in,out:0..k-1;—in记录第一个空缓冲区,out记录第一个不空的缓冲区s1,s2,mutex:semaphore;—s1控制缓冲区不满,s2控制缓冲区不空,mutex保护临界区;初始化s1=k,s2=0,mutex=1producer(生产者进程):Item_Typeitem;{while(true){produce(&item);p(s1);p(mutex);buffer[in]:=item;in:=(in+1)modk;v(mutex);v(s2);}}consumer(消费者进程):Item_Typeitem;{while(true){p(s2);p(mutex);item:=buffer[out];out:=(out+1)modk;v(mutex);v(s1);consume(&item);}}例程演示
返回--------------------------------------------------------------------------------2.第一类读-写者问题
问题描述:一些读者和一些写者对同一个黑板进行读写。多个读者可同时读黑板,但一个时刻只能有一个写者,读者写者不能同时使用黑板。对使用黑板优先级的不同规定使读者-写者问题又可分为几类。第一类问题规定读者优先级较高,仅当无读者时允许写者使用黑板。解答:进程:writer-写者进程,reader-读者进程共有的数据结构:read_account:integer;r_w,mutex:semaphore;—r_w控制谁使用黑板,mutex保护临界区,初值都为1reader-(读者进程):{while(true){p(mutex);read_account++;if(read_account=1)p(r_w);v(mutex);read();p(mutex);read_account--;if(read_account=0)v(r_w);;v(mutex);}}writer-(写者进程):{while(true){p(mutex);write();v(mutex);}}例程演示
返回--------------------------------------------------------------------------------3.哲学家问题
问题描述:一个房间内有5个哲学家,他们的生活就是思考和进食。房间里有一张圆桌,中间放着一盘通心粉(假定通心粉无限多)。桌子周围放有五把椅子,分别属于五位哲学家每两位哲学家之间有一把叉子,哲学家进食时必须同时使用左右两把叉子。解答:进程:philosopher-哲学家共有的数据结构&过程:state:array[0..4]of(think,hungry,eat);ph:array[0..4]ofsemaphore;—每个哲学家有一个信号量,初值为0mutex:semaphore;—mutex保护临界区,初值=1proceduretest(i:0..4);{if((state[i]=hungry)and(state[(i+1)mod5]<>eating)and(state[(i-1)mod5]<>eating)){state[i]=eating;V(ph[i]);}}philosopher(i:0..4):{while(true){think();p(mutex);state[i]=hungry;test(i);v(mutex);p(ph[i]);eat();p(mutex);state[i]=think;test((i-1)mod5);test((i+1)mod5);v(mutex);}}PV原语-2004上半年上午试题
若有一个仓库,可以存放P1、P2两种产品,但是每次只能存放一种产品.要求:
①w=P1的数量-P2的数量
②-i<w<k(i、k为正整数)
若用PV操作实现P1和P2产品的入库过程,至少需要__(23)__个同步信号量及__(24)__个互斥信号量,其中,同步信号量的初值分别为__(25)__,互斥信号量的初值分别为__(26)__。
(23)A.0B.1C.2D.3
(24)A.0B.1C.2D.3
(25)A.0B.i,k,0C.i,kD.i-1,k-1
(26)A.1B.1,1C.1,1,1D.i,k答案是CBDA系分考试知识:PV操作释疑信号量
信号量是最早出现的用来解决进程同步与互斥问题的机制,
包括一个称为信号量的变量及对它进行的两个原语操作。
一.信号量的概念
1.信号量的类型定义
每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述)
semaphore=record
value:integer;
queue:^PCB;
end;
其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。
s.value>=0时,s.queue为空;
s.value<0时,s.value的绝对值为s.queue中等待进程的个数;
2.PV原语
对一个信号量变量可以进行两种原语操作:p操作和v操作,定义如下:
procedurep(vars:samephore);
{
s.value=s.value-1;
if(s.value<0)asleep(s.queue);
}
procedurev(vars:samephore);
{
s.value=s.value+1;
if(s.value<=0)wakeup(s.queue);
}其中用到两个标准过程:
asleep(s.queue);执行此操作的进程的PCB进入s.queue尾部,进程变成等待状态wakeup(s.queue);将s.queue头进程唤醒插入就绪队列
s.value初值为1时,可以用来实现进程的互斥。
p操作和v操作是不可中断的程序段,称为原语。如果将信号量看作共享变量,则pv操作为其临界区,多个进程不能同时执行,一般用硬件方法保证。一个信号量只能置一次初值,以后只能对之进行p操作或v操作。
由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。
V原语的主要操作是:
(1)sem加1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则唤醒一阻塞在该信号量上的进程,然后再返回原进程继续执行或转进程调度。
典型理解偏差:
一,以V原语的1、2步来做,Sem不就永远大于0,那进程不就一直循环执行成为死循环了?
二,Sem大于0那就表示有临界资源可供使用,为什么不唤醒进程?
三,Sem小于0应该是说没有临界资源可供使用,为什么还要唤醒进程?
析疑:一,P操作对sem减1的。P、V原语必须成对使用!从而不会造成死循环。二,Sem大于0的确表示有临界资源可供使用,而且这个时候没有进程被阻塞在这个资源上,也就是说没有进程因为得不到这类资源而阻塞,所以没有被阻塞的进程,自然不需要唤醒。三,V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使Sem加1,以通知其它的进程,这个时候如果Sem<0,表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“转手”该类资源。比如,有2个某类资源,三个进程A、B、C、D要用该类资源,最开始Sem=2,当A进入,Sem=1,当B进入Sem=0,表明该类资源刚好用完,当C进入时Sem=-1,表明有一个进程被阻塞了,D进入,Sem=-2。当A用完该类资源时,进行V操作,Sem=-1,释放该类资源,而这时Sem<0,表明有进程阻塞在该类资源上,于是唤醒一个。
为了进一步加深理解,再引入二个问题:四,如果是互斥信号量的话,应该设置信号量Sen=1,但是当有5个进程都访问的话,最后在该信号量的链表里会有4个在等待,也是说S=-4,那么第一个进程执行了V操作使S加1,释放了资源,下一个应该能够执行,但唤醒的这个进程在执行P操作时因S〈0,也还是执行不了,这是怎么回事呢?五,Sem的绝对值表示等待的进程数,同时又表示临界资源,这到底是怎么回事?析疑:四,当一个进程阻塞了的时候,它已经执行过了P操作,并卡在临界区那个地方。当唤醒它时就立即进入它自己的临界区,并不需要执行P操作了,当执行完了临界区的程序后,就执行V操作。五,当信号量Sem小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目.S大于0时表示可用的临界资源数。注意在不同情况下所表达的含义不一样。当等于0时,表示刚好用完。吸烟者问题(Patil,1971)
三个吸烟者在一间房间内,还有一个香烟供应者。为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴。供应者有丰富的货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸,第三个有自己的火柴。供应者将两样东西放在桌子上,允许一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再放两样东西(随机地)在桌面上,然后唤醒另一个吸烟者。试为吸烟者和供应者编写程序解决问题。分析思想:
1)供应者seller随即产生两样东西,提供它们,这里用普通变量来表示
2)吸烟者进程smoker根据其排号不同,拥有不同的一件东西。假设1号吸烟者拥有烟草tobacco,2号吸烟者拥有纸paper,3号吸烟者拥有火柴match。其他号码错误返回。
3)吸烟者的序号代表他们拥有的东西,用他们的序号和供应者产生的两样东西比较,如果都不相等,则说明他拥有的东西和供应者产生的东西匹配,它可以吸烟。如果其中一个相等,则推出,继续排队。
4)mutex信息量代表一个只能进入的门,每次只有一个吸烟者可以进入进行比较和吸烟。
5)每个吸烟者在吸烟完毕之后出门之前要叫醒供应者,调用seller进程。信息量:
mutex:=1——互斥信息量,表示吸烟者进入的门解法:
#typedefintsemaphore
semaphoremutex=1;
intthing1,thing2;voidseller(){
Randomize;
inti=random(2);
//产生0-2的随机数
thing1=((i-1)%3)+1;//将thing赋值为0-2种不等于i的两个数+1
thing2=((i+1)%3)+1;
}
voidsmoker(inti){
if((i<=0)||(i>3))
//i值应为1-3
returnfalse;
while(true){
P(mutex)
if((i!=thing1)&&(i!=thing2)){//所拥有的物品与供应者放出的物品不一样
吸烟;
seller();
//唤醒供应者
V(mutex);
}
else{
V(mutex)
}//endif
}//
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川文化传媒职业学院单招职业适应性考试题库带答案
- 2025年宜宾职业技术学院单招职业适应性考试题库附答案
- 2025年安徽国际商务职业学院单招职业技能测试题库审定版
- 2025年合肥幼儿师范高等专科学校单招职业适应性测试题库新版
- 2025年西昌民族幼儿师范高等专科学校单招职业倾向性考试题库汇编
- 2025年淮南联合大学单招职业倾向性考试题库及答案一套
- 2025年四川卫生康复职业学院单招职业倾向性考试题库及答案一套
- 2025年哈尔滨传媒职业学院单招职业倾向性考试题库及答案1套
- 2025年辽宁省丹东市单招职业适应性测试题库及参考答案1套
- 2025年清远职业技术学院单招职业技能测试题库含答案
- 公务用车申请表
- 分层过程审核(LPA)检查表
- 学生信息登记表
- 标准作业指导书模板(SOP)
- 四川省抗菌药物临床应用分级管理目录2022年版
- 五年级道德与法治下册 (我参与我奉献)新课件
- 我的家乡湖北宜昌介绍宜昌城市介绍课件
- 2023年陕西西安市曲江第二中学招聘笔试备考试题及答案解析
- 高一年级上期班主任教育叙事
- 精神医学案例习题集
- 甘蔗种植技术
评论
0/150
提交评论