P,V操作的问题,某php读取数据库库中有一个写进程,多个读进程。写时不能读;读时不能写,但能同时读。

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
【精品】操作系统习题(F.L)答案
下载积分:860
内容提示:【精品】操作系统习题(F.L)答案
文档格式:DOC|
浏览次数:7|
上传日期: 21:55:57|
文档星级:
该用户还上传了这些文档
【精品】操作系统习题(F.L)答案.DOC
官方公共微信操作系统复习题
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
操作系统复习题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
2014年中央电大操作系统形考答题库.doc14页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:72 &&
你可能关注的文档:
··········
··········
一、单项选择题
注意:蓝色的选项为正确答案。
在计算机系统中,控制和管理各种资源、有效地组织多道程序运行的系统软件称为(
A.文件系统
B.操作系统
C.网络管理系统
D.数据库管理系统
按照所起的作用和需要的运行环境,操作系统属于( D
A.用户软件
B.应用软件
C.支撑软件
D.系统软件
操作系统的基本职能是( D
A. 提供功能强大的网络管理工具
B. 提供用户界面,方便用户使用
C. 提供方便的可视化编辑程序
D. 控制和管理系统内各种资源,有效地组织多道程序的运行
操作系统负责管理计算机系统的( C
在计算机系统中,操作系统是(
A.处于裸机之上的第一层软件
B.处于硬件之下的低层软件
C.处于应用软件之上的系统软件
D.处于系统软件之上的用户软件
为用户分配主存空间,保护主存中的程序和数据不被破坏,提高主存空间的利用率。这属于(
A.处理器管理
B.存储管理
C.文件管理
D.作业管理
操作系统对缓冲区的管理属于( B
)的功能。
A.处理器管理
B.设备管理
C.文件管理
D.存储器管理
以下不属于操作系统关心的主要问题的是( D
A.管理计算机裸机
B.设计、提供用户程序与计算机硬件系统的界面
C.管理计算机系统资源
D.高级程序设计语言的编译器
以下不属于操作系统具备的主要功能的是( C
A.内存管理
B.中断处理
正在加载中,请稍后...一道关于操作系统中读者-写者的问题_百度知道
一道关于操作系统中读者-写者的问题
允许写进程写*/
}}我感觉writer()有点毛病;*当第一个读进程读数据库时;
}}writer(){
p(wmutex);
count ++,写时是否还能读呢;
writer();&#47int rmutex=1;
v(wmutex);
int wmutex=1;
if(count==0) p(wmutex);
p(rmutex);
写数据库? 麻烦各位高人费心看看;
if(count==0) v(wmutex),阻止写进程写*/
v(rmutex);
v(rmutex),我操作系统不是很强的;
count--;*当最后一个读进程读完数据库时;
int count=0;}
多个读进程,请用p该题题目,v操作描述这一组进程工作过程,它们之间读写操作的互斥要求为:写时不能读;读进程之间不互斥,也不能允许其它写进程写:某数据库一个写进程
我有更好的答案
那这么简单的问题还问人?竟然这样评价自己,那就是一般强咯?我操作系统不是很强
其他类似问题
为您推荐:
您可能关注的推广
操作系统的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁4373人阅读
经典例题:
1.P1、P2、P3、P4、P5、P6为一组合作进程,其前趋图如图1所示,试用P、V
操作描述这6个进程的同步。
分析:本题用P、V操作描述前趋关系。若干进程为了完成一个共同任务而并发执行。然而,这些并发进程之间根据逻辑上的需要,有的操作可以没有时间上的先后次序,即不论谁先做,最后的计算结果都是正确的。但有的操作有一定的先后次序,也就是说它们必须遵循一定的同步规则;只有这样,并发执行的最后结果才是正确的。我们可以用前趋图来描述进程在执行次序上的先后关系。
图1描述进程执行先后次序的去,前趋图
解: 图1说明任务启动后P1先执行,当它结束后P2、P3可以开始执行,P2完成后P4、P5可以开始执行,仅当P3、P4、P5都执行完后,P6才能力始执行。为了确保这一执行顺序,设置5个同步信号量f1、f2、f3、f4、f5分别表示进程P1、P2、P3、P4、P5是否执行完成,其初值均为0。这6个进程的同步描述如下:
int f1=0; /*表示进程P1是否执行完成 */
int f2=0; /* 表示进程P2是否执行完成*/
int f3=0; /*表示进程P3是否执行完成 */
int f4=0; /* 表示进程P4是否执行完成*/
int f5=0; /*表示进程P5是否执行完成 */
2.为下图所示的多生产者-多消费者问题进行描述
图2 多生产者-多消费者问题
分析:生产者-消费者问题是最著名的进程同步问题。它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。生产者。消费者问题是许多相互合作进程的一种抽象。例如,在输入时,输入进程是生产者,计算进程是消费者;在输出时,计算进程是生产者,打印进程是消费者。因此,该问题具有很大实用价值。
& 我们把一个长度为n的有界缓冲区(n&0)与一群生产者进程P1、P2、…、Pm和一群消费者进程C1、C2、…、Ck联系起来。假定这些生产者和消费者是互相等
效的。只要缓冲区未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。
解:为解决这一类生产者、消费者问题,应该设置两个同步信号量,一个说明空缓冲单元的数目,用empty表示,其初值为有界缓冲区的大小n,另一个说明满缓冲单元的数目,用full表示,其初值为0。在本例中有P1、P2、…、Pm个生产者和C1、C2、…、Ck个消费者,它们在执行生产活动和消费活动中要对有界缓冲区进行操作。由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需设置一个互斥信号量mutex,其初值为1。这个多生产者-多消费者问题的同步描述如下:
int full=0;&& /*满缓冲单元的数目
int empty=n;/*
空缓冲单元的数目 */
int mutex=1; /* 对有界缓冲区进行操作的互斥信号量*/
&&& produceri();/*
i=1, 2,…,m */
&&& consumerj(); /* j=1,2,…,k */
produceri()& /*i=1,2,…,m */
& while(生产未完成)
&&& 生产一个产品;
&&& p(empty);
&&& p(mutex);
&&& 送一个产品到有界缓冲区;
&&& v(mutex);
&&& v(full);
consumeri()& /* j=1,2,…,k */
& while(还要继续消费)
&&& p(full);
&&& p(mutex);
&&& 送到从有界缓冲区取走一个产品;
&&& v(mutex);
&&& v(empty);
&&& 消费一个产品;
3.在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。
分析及相关知识:在本题中采集任务与计算任务共用一个单缓冲区。当采集任务采集到一个数据后,只有当缓冲区为空时才能将数据送入缓冲区中存放,否则应等待缓冲区腾空;当缓冲区中有数据时,计算任务才能从缓冲区中取出数据进行计算,否则也应等待。
& 本题实际上是一个生产者一消费者问题。将生产者-消费者问题抽象出来,以另外一种形式描述是一种常见的试题形式。只要对生产者一肖费者问题有了深入的理解,就不难解决此类试题。
解:在本题中,应设置两个信号量Sf、Se,信号量Sf表示缓冲区中是否有可供打印的计算结果,其初值为0;信号量Se用于表示缓冲区有无空位置存放新的信息,其初值为1。本题的同步描述如下:
&&& get();
&&& compute();
& while(采集工作未完成)
&&& 采集一个数据;
&&& &p(Se);
&&& 将数据送入缓冲区中;
&&& V(Sf);
& while(计算工作未完成)
&&& p(Sf);
&& &从缓冲区中取出数据;
&&& v(Se\ 进行数据计算;
4.已知一个求值公式(A2+3B)/(B+5A),若A、B已赋值,试画出该公式求值过程的前趋图。
解:在该公式的求值过程中,有些运算分量的执行是可以并行进行的。为了描述方便起见,我们设置了一些中间变量保存中间结果,并给每个语句命名,其求值过程及前趋图如图3所示。
图3求值公式的执行流程及前趋图
5.图27给出了四个进程合作完成某一任务的前趋图,试说明这四个进程间的同步关系,并用P、V操作描述它。
图4 四个合作进程的前趋图
解:图4说明任务启动后S1先执行。当m结束后,S2、S3可以开始执行。S2、S3 完成后,S4才能开始执行。为了确保这一执行顺序,设三个同步信号量b2、b3、b4分别表示进程S2、S3、S4是否可以开始执行,其初值均为0。这四个进程的同步描述如下:
int b2=0;/*
表示进程S2是否可以开始执行*/
/* 表示进程S3是否可以开始执行 */
/* 表示进程S4是否可以开始执行 */
& p(b4); /* 因在S2及S3完成时均对b4做了v操作,因此这里要用两个p操作 */
PS:本人认为这种方法不可取,若S2执行两次,S3未执行,也将会执行V(b4)两次,所以S4也能执行,但现实情况是,只有S2和S3都执行之后,S4才可以执行。所以本人认为这种方法不对,应该将b4改为两个信号量,分别由S2和S3控制。
6.某系统的进程状态转换图如图5所示,请说明:
图5 某系统的进程状态转换图
(1)引起各种状态转换的典型事件有哪些?
(2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1?
(3)试说明是否会发生下述因果转换:
(1)在本题所给的进程状态转换图中,存在四种状态转换。当进程调度程序从就绪队列中选取一个进程投入运行时引起转换1;正在执行的进程如因时间片用完而被暂停执行就会引起转换2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引起转换3;当进程等待的事件发生时(如I/O完成)则会引起转换4。
(2)如果就绪队列非空,则一个进程的转换3会立即引起另一个进程的转换1。这是因为一个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态,这时 处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投人运行,因此只要就绪队列非空,一个进程的转换3能立即引起另一个进程的转换1。
(3)所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转换称为因,后一个转换称为果,这两个转换称为因果转换。当然这种因果 关系并不是什么时候都能发生,而是在一定条件下才会发生。
<span style="font-size:14 color:#→1:当某进程发生转换2时,就必然引起另一进程的转换1。因为当发生转换2时,正在执行的进程从执行状态变为就绪状态,进程调度程序必然会从 就绪队列中选取一个进程投入运行,即发生转换1。
<span style="font-size:14 color:#→2:某个进程的转换3决不可能引起另一进程发生转换2。这是因为当前执行进程从执行状态变为阻塞状态,不可能又从执行状态变为就绪状态。
<span style="font-size:14 color:#→1: 当处理机空闲且就绪队列为空时,某一进程的转换4就会引起该进程的转换1。因为此时处理机空闲,一旦某个进程发生转换4,就意味着有一个进程从阻塞状态变为就绪状态,因而调度程序就会将就绪队列中的此进程投入运行。
7.在单处理机的分时系统中,分配给进程P的时间片用完后,系统进行切换,结果调度到的仍然是进程P。有可能出现上述情形吗?如果可能请说明理由。
解:有可能出现上述情况。例如,若在进程P时间片用完后,被迫回到就绪队列时,就绪队列为空,这样进程P就是就绪队列中惟一的一个进程,于是调度程序选中的进程必然是进程P;又如在按优先级调度的系统中,就绪队列按进程优先级排列,在进程P时间片用完之后回到就绪队列时,若其优先级高于当前就绪队列中的其他进程,则它将排在就绪队列之首,从而再次被调度程序选中并投入运行。
8.桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
分析及相关知识:在本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者问题的一种变形、这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。
解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初&#20540;为1;信号量So表示盘中是否有桔子,其初&#20540;为0;信号量Sa表示盘中是否有苹果,其初&#20540;为0。同步描述如下:
&& &faher();
&& &son();
&& &daughter();
& while(1)
&& &将水果放入盘中;
&&& if(放入的是桔子) v(So);
&&& else v(Sa);
& while(1)
&& &p(So);
&&& 从盘中取出桔子;
&&& 吃桔子;
daughter()
& while(1)
&& &p(Sa);
&&& 从盘中取出苹果;
&& &吃苹果;
9.(上海交通大学1996年试题)哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论:在讨论的间隙四位哲学家进餐,每人进餐时都需使用刀、又各一把,餐桌上的布置如图6所示。请用信号量及P、V操作说明这四位哲学家的同步、互斥过程。
图6 哲学家进餐问题(b表示刀,ψ表示叉)
分析及相关知识:在本题中这四位哲学家在讨论问题期间的生活方式为交替地进行讨论和进餐、由于刀、叉资源均为2,而哲学家有四位,这就会出现资源竞争,为此应对他们的进餐进行同步控制。在本题解法中规定:所有哲学家先申请使用刀,中请到刀后再中请使用叉,刀、叉都拿到后才能进餐。本题是标准的哲学家进餐问题。只是在哲学家人数、进餐用具方面与经典哲学家进餐问题略有不同。
解:在本题中,应设置四个信号量fork1、fork2、knife1、knife2,其初&#20540;均为1,分别表示资源叉l、叉2、刀1、刀2是否可用。同步描述如下:
int fork1=1;
int fork2=1;
int knife1=1;
int knife2=1;
&&& Pa(); /* 分别用进程Pa、Pb、Pc、Pd代表哲学家甲、乙、丙、丁的活动 */
& while(1)
&& &p(knife1);
&&& p(fork1);
&&& v(knife1);
&&& v(fork1);
&& &讨论问题;
& while(1)
&& &p(knife2);
&&& p(fork1);
&&& v(knife2);
&&& v(fork1);
&& &讨论问题;
& while(1)
&& &p(knife2);
&&& p(fork2);
&&& v(knife2);
&&& v(fork2);
&& &讨论问题;
& while(1)
&& &p(knife1);
&&& p(fork2);
&&& v(knife1);
&&& v(fork2);
&& &讨论问题;
10. 某数据库有一个写进程,多个读进程,它们之间读、写操作的互斥要求是:写进程正在写该数据库时不能有其他进程读该数据库,也不能有其他进程写该数据库;读进程之间不互斥,可以同时读该数据库。请用信号量及P、V操作描述这一组进程的工作过程。
解:在本题中,允许该进程同时读数据库,但写进程正在写数据库时不允许其他进程读数据库,也不允许其他进程写该数据库。为了解决读、写进程之间的同步,应设置两个信号量和一个共享变量:读互斥信号量rmutex,用于使读进程互斥地访问共享变量count,其初&#20540;为1;写互斥信号量wmutex,用于实现写进程与读进程的互斥及写进程与写进程的互斥。其初&#20540;为1;共享变量count,用于记录当前正在读数据库的读进程数目,初&#20540;为0。其工作过程如下:
int wmutex=1;
int count=0;
&&& readr();
&&& writer();
& while(1)
&& &p(rmutex);
&&& if(count==0) p(wmutex);/*
当第一个读进程读数据库时,阻止写进程写 */
&&& count &#43;&#43;
&& &v(rmutex);
&&& 读数据库;
&&& p(rmutex);
&&& count --;
&& &if(count==0)v(wmutex);
/* 当最后一个读进程读完数据库时,允许写进程写 */
&& &v(rmutex);
& while(1)
&& &p(wmutex);
&& &写数据库;
&&& v(wmutex);
&在本题中,要注意对信号量rmutex意义的理解。rmutex是一个互斥信号量,用于使该进程互斥地访问共享变量count。该信号量并不表示该进程的数目,表示读进程数目的是共享变量count。当一个读进程要读数据库时,应将读进程计数cunnt增加1;如果此前(conut加1以前)数据库中无读进程,还应对写互斥信号量wmutex做p操作,这样,若数据库中无写进程,则通过p操作阻止写进程写,若数据库中有写进程,则通过p操作让读进程等待。同理,当一个读进程完成读数据库操作时,应将读进程计数count减少1;如果此时
(count减1以后)数据库中己无读进程,还应对写互斥信号量wmutex做v操作,以允许写进程写。
11.(华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别是:
司机的活动:启动车辆;
&&&&&&&&&& 正常行车;
&&&&&&&&&& 到站停车;
售票员的活动:关车门;
&&&&&&&&&&&& 售票;
&&&&&&&&&&&& 开车门;
&在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P、V操作实现它们的同步。
解:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。因此司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步,在本题中,应设置两个信号量:s1、s2,s1表示是否允许司机启动汽车,其初&#20540;为0;
s2表示是否允许售票员开门,其初&#20540;为0。用P、V原语描述如下:
&& &driver();
&&& busman();
& while(1)
&& &p(s1);
&& &启动车辆;
&& &正常行车;
&& &到站停车;
&& &v(s2);
& while(1)
&& &关车门;
&&& p(s2);
&&& 开车门;
&&& 上下乘客;
12.设有一个发送者进程和一个接收者进程,其流程图如图7所示。S是用于实现进程同步的信号量,mutex是用于实现进程互斥的信号量。试问流程图中的A、B、C、D四框中应填写什么?假定缓冲区有无限多个,s和mutex的初&#20540;应为多少?
图7 发送者及接收者工作流程图
分析及相关知识:由图7可以看出,发送者进程与接收者进程之间的同步关系是:发送者进程生成的信息送入消息链中,接收者从消息链中接收信息;
由于发送者进程产生一个消息并链入消息链后用V操作增加消息计数并唤醒接收者进程,这表示发送者进程和接收者进程是通过信号量s实现同步的,因此接收者进程应该再取信息之前先使用一个p操作来查看消息链上是否有消息,若无消息则阻塞自己;另外,发送者和接收者对消息链的访问应使用信号量进行互斥,即在访问前使用p操作,在访问后使用v操作。
解:由上述分析可知,A、B、C、D四框应分别填入:
B框& V(mutex)
D框 &P(mutex)
13.(北京大学1990年试题)
&①写出P、V操作的定义。
&②有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内客复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。请用P、V操作来保证文件的正确打印。
分析及相关知识:信号量是一个确定的二元组(s,q),其中s是一个具有非负初&#20540;的整型变量,q是一个与s相关联的初始状态为空的队列。整型变量s示系统中某类资源的数目,当其&#20540;大于0时,表示系统中当前可用资源的数目;
当其&#20540;小于0时,其绝对&#20540;表示系统中因请求该类资源而被阻塞的进程数目。除信号量的初&#20540;外;信号量的&#20540;仅能由P操作和V操作改变。
解:①P、V操作是两条原语,它们的定义如下:
P操作P操作记为P(S),其中S为一信号量,它执行时主要完成下述动作:
若S≥0,则进程继续运行。
若S<O,则该进程被阻塞,并将它插入该信号量的等待队列中。
V操作 V操作记为V(S),S为一信号量,它执行时主要完成下述动作:
若S>O,则进程继续执行。
若S≤0,则从信号量等待队列中移出队首进程,使其变为就绪状态。
&②在本题中,进程PA、PB、PC之间的关系为:PA与PB共用一个单缓冲区,而PB又与PC共用一个单缓冲区,其合作方式可用图8表示。当缓冲区1为空时,进程PA可将一个记录读入其中;若缓冲区1中有数据且缓冲区2为空,则进程PB可将记录从缓冲区1复制到缓冲区2中;若缓冲区2中有数据,则进程PC可以打印记录。在其他条件下,相应进程必须等待。事实上,这是一个生产者一消费者问题。
图8 进程间的合作方式
& 为遵循这一同步规则。应设置四个信号量empty1、empty2、full1、full2,信号量empty1 及empty2分别表示缓冲区1及缓冲区2是否为空,其初&#20540;为1;信号量full1及full2分别表示缓冲区1及缓冲区2是否有记录可供处理,其初&#20540;为0。其同步描述如下:
int empty1;
int empty2;
int full1=0;
int full2=0;
& while(1)
&&& 从磁盘读一个记录;
&&& p(empty1);
&&& 将记录存入缓冲区1;
&&& v(full1);
& while(1)
&&& p(full1);
&& &从缓冲区1中取出记录;
&&& v(empty1);
&&& p(empty2);
&& &将记录存入缓冲区2;
&&& v(full2);
& while(1)
&& &p(full2);
&& &从缓冲区2中取出记录;
&&& v(empty2);
&&& 打印记录;
&本题也是一个典型的生产者-消费者问题。其中的难点在于PB既是一个生产者又是一个消费者。
14.设有8个程序progl、prog2、…、prog8。它们在并发系统中执行时有如图9所示的制约关系,试用P、V操作实现这些程序间的同步。
图9 进程并发执行的制约关系
解:由图9表明开始时,prog1及prog2先执行。当ptog1和prog2都执行完后,prog3、prog4、pfog5才可以开始执行。ptog3完成后,ptog6才能开始执行。prog5完成后,prog7
才能开始执行。prog6、prog4、prog7都结束后,prog8才可以开始执行。为了确保这一执行顺序,设7个同步信号量fi、…、f7分别表示程序prog1、…、prog7是否执行完,其初&#20540;均为0。这8个进程的同步描述如下:
int f1=0;/*
表示程序 prog1是否执行完 */
&&& prog1();
&&& prog2();
&&& prog3();
&&& prog4();
&&& prog5();
&&& prog6();
&&& prog7();
&&& prog8();
15.(北京大学1991年试题)有一个仓库,可以存放A和B两种产品,但要求:
(1)每次只能存入一种产品A或B);
(2)-N&A产品数量-B产品数量&M。
&其中,N和M是正整数。试用P、V操作描述产品A与产品B的入库过程。
分析及相关知识: 本题给出的第一个条件是临界资源的访问控制,可用一个互斥信号量解决该问题。第二个条件可以分解为:
-N<A产品数量-B产品数量
A产品数量-B产品数量<M
&也就是说,A产品的数量不能比E产品的数量少N个以上,A产品的数量不能比B产品的数量多M个以上。
解:在本题中,我们可以设置两个信号量来控制A、B产品的存放数量,sa表示当前允许A产品比B产品多入库的数量,即在当前库存量和B产品不入库的情况下,还可以允许sa个A产品人库;sb表示当前允许B产品比A产品多入库的数量,即在当前库存量和A产品不入库的情况下,还可以允许sb个B产品入库。初始时,sa为M-1,sb为N-1。当往库中存放入一个A产品时,则允许存入B产品的数量也增加1:当往库中存放入一个B产品时,则允许存入A产品的数量也增加1。
&产品A、B的入库过程描述如下:
intmutex=1;
/*互斥信号量 */
int sa=M-1;
int sb=N-1;
& while(1)
&& &取一个产品;
&&& if(取的是A产品)
&&&&&& &p(sa);
&&&&&& &p(mutex);
&&&&&& &将产品入库;
&&&&&& &v(mutex);
&&&&&& &v(sb);
&&& else /* 取的产品是B */
&&&&&& &p(sb);
&&&&&& &p(mutex);
&&&&&& &将产品入库;
&&&&&& &v(mutex);
&&&&&& &v(sa);
#define M 20
#define N 30
int mutex=1; /* 互斥信号量 */
int counta=0;
int countb=0;
& while(1)
&&& 取一个产品;
&&& if(取的是A产品&&-N&counta-countb&M)
&&& { counta&#43;&#43;;
&&&&& p(mutex);
&&&&& 将产品入库;
&&&&& v(mutex);
&&& else if(取的是B产品&&-N&counta-countb&M)
&&&&& p(sb);
&&&&& p(mutex);
&&&&& 将产品入库;
&&&&& v(mutex);
& 从本题的解法可以看出,当有比较复杂条件出现时,可以把复杂条件分解成一组简单条件,这样就能很容易地写出对应的程序流程了。
16.(北京大学1994年试题)进程A1,A2,…,An1通过m个缓冲区向进程B1,B2,…,
Bn2不断地发送消息。发送和接收工作遵循如下规则:
①每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度;
②对每一个消息,B1,B2,…,Bn2都须各接收一次,读入各自的数据区内;
③m个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待。
&试用P、V操作组织正确的发送和接收工作。
分析及相关知识:本题是生产者一消费者问题的一个变形,一组生产者A1,A2,...,An1和一组消费者B1,B2、...、Bn2;共用m个缓冲区,每个缓冲区只要写一次,但需要读n2次。因此,我们可以把这一组缓冲区看成n2组缓冲区,每个发送者需要同时写n2组缓冲区中相应的n2个缓冲区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。
解:在本题中,应设置一个信号量mutex实现诸进程对缓冲区的互斥访问;两个信号量数组empty[n2]和full[n2]描述n2组缓冲区的使用情况。mutex的初&#20540;为1;数组empty中的元素初&#20540;为m;数组full中的元素初&#20540;为0。其同步关系描述如下:
intmutex,empty[n2],full[n2];
for(i=0;i&=n2-1;i&#43;&#43;)
& empty[i]=m;
& full[i]=0;
&& &Bn2();
send()& /*发送消息 */
& for(i=0; i&=n2-1; i&#43;&#43;)
&&&&& p(empty[i]);
&&& p(mutex);
&& &将消息放入缓冲区;
&&& v(mutex);
&&& for(i=0;i&=2*n2-1;i&#43;&#43;)
&&&&& v(full[i]);
receive(i)& /* 进程Bi接收消息 */
& p(full[i]);
& p(mutex);
& 将消息从缓冲区取出;
& v(mutex);
& v(empty[i]);
Ai() /*因发送进程A1,A2,…,An1的程序类&#20284;,这里只给出进程A的描述。*/
& while(1)
&&& send();
Bi()& /* 因接收进程B1,B2,...,Bn2的程序类&#20284;,这里只给出进程B的描述
& while(1)
&&& receive(i);
17.(南开大学1997年试题)在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但其中有一个小的安全岛M(同时允许两辆自行车停留),可供两辆自行车已从两端进人小路情况下错车使用,如图10所示。试设计一个算法使来往的自行车均可顺利通过。
图10 小路示意图
分析及相关知识:在本题中,需要控制路段T到L,路段S到K及安全岛M的使用。路段T到L及路段S到K同时只允许一辆自行车通过。而安全岛M允许两辆自行车使用,因此可以用三个信号量来管理它们、另一方面,同一方向上的自行车最多只能有一辆通过这段路(两个方向上有两辆),因此还应该用两个信号量来控制。
解:在本题中,应设置5个信号量ST,TS K,L,M,信号量ST表示是否允许自行车从南开大学去天津大学,其初&#20540;为1;信号量TS表示是否允许自行车从天津大学去南开大学,其初&#20540;为1;信号量K表示是否允许自行车通过路段S到K,其初&#20540;为1;信号量L表示是否允许自行车通过路段T到L,其初&#20540;为1;信号量M表示安全岛上还可停放自行车的数目;其初&#20540;为2。其控制过程描述如下:
totian() /* 从南开大学去天津大学 */
& 从S走到K;
& 进入安全岛;
& 从L走到T;
tonan() /* 从无津大学去南开大学 */
& 从T走到L;
& 进入安全岛;
& 从K走到S;
18.(中国科学院软件研究所 1995年试题)多个进程共享一个文件,其中只读文件的称为读者,只写文件的称为写者。读者可以同时读,但写者只能独立写。请:
①说明进程间的相互制约关系,应设置哪些信号量?
②用P、V操作写出其同步算法。
③修改上述的同步算法,使得它对写者优先;即一旦有写者到达,后续的读者必须等待。而无论是否有读者在读文件。
解:本题前两问是经典读者写者问题,第三问对读者写者问题加了一些限制,即使算法对写者优先。
①进程间的相互制约关系有三类:一是读者之间允许同时读;二是读者与写者之间须互斥;三是写者之间须互斥。
&为了解决读者、写者之间的同步,应设置两个信号量和一个共享变量:读互斥信号量rmutex,用于使读者互斥地访问共享变量count,其初&#20540;为1;写互斥信号量
wmutex,用于实现写者与读者的互斥及写者与写者的互斥,其初&#20540;为1;共享变量count,用于记录当前正在读文件的读者数目,初&#20540;为0。
②进程间的控制算法如下所示:
intrmutex=1;
int wmutex=1;
int count=0;
& &reader();
& &writer();
& while(1)
&&& p(rmutex);
&& &if(count==0) p(wmutex);/*
当第一个读者读文件时,阻止写者写 */
&&& count &#43;&#43;;
&&& v(rmutex);
&& &读文件;
&& &p(rmutex);
&&& count --;
&& &if(count==0)v(wmutex);
/* 当最后一个读者读完文件时,允许写者写 */
&&& v(rmutex);
& while(1)
&&& p(wmutex);
&&& 写文件;
&& &v(wmutex);
③为了提高写者的优先级,增加一个信号量s,用于在写进程到达后封锁后续的读者。其控制流程如下:
intrmutex=1;
int wmutex=1;
int count=0;
& &reader();
& &writer();
& while(1)
&&& p(rmutex);
&& &if(count==0) p(wmutex);/*
当第一个读者读文件时,阻止写者写 */
&&& count &#43;&#43;;
&&& v(rmutex);
&& &读文件;
&& &p(rmutex);
&&& count --;
&& &if(count==0)v(wmutex);
/* 当最后一个读者读完文件时,允许写者写 */
&&& v(rmutex);
& while(1)
&&& p(wmutex);
&&& 写文件;
&& &v(wmutex);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:305819次
积分:2820
积分:2820
排名:第5897名
原创:58篇
转载:33篇
评论:65条
(4)(4)(1)(26)(6)(15)(9)(1)(2)(23)

我要回帖

更多关于 asp读取access数据库 的文章

 

随机推荐