软件设计师考试试题分析.docx
《软件设计师考试试题分析.docx》由会员分享,可在线阅读,更多相关《软件设计师考试试题分析.docx(18页珍藏版)》请在冰豆网上搜索。
软件设计师考试试题分析
操作系统:
在某超市里有一个收银员,且同时最多允许有n个顾客购物,我们可以将顾客和收银员看成是两类不同的进程,且工作流程如下图所示。
为了利用PV操作正确地协调这两类进程之间的工作,设置了三个信号量S1、S2和Sn,且初值分别为0、0和n。
这样图中的a应填写__(24)__,图中的b1、b2应分别填写__(25)__,图中的c1、c2应分别填写__(26)__。
(24)A.P(S1)B.P(S2)C.P(Sn)D.P(Sn)、P(S1)
(25)A.P(Sn)、V(S2)B.P(Sn)、V(S1)C.P(S2)、V(S1)D.V(S1)、P(S2)
(26)A.P(S1)、V(S2)B.P(Sn)、V(S1)C.P(S2)、V(S1)D.V(S1)、P(S2)
答案:
(1)C
(2)D(3)A
解析:
这是一道考查PV操作的题,所以首先得弄清楚那些地方需要互斥、那些地方需要同步。
题目中给出了两类进程:
顾客进程与收银元进程,由于超市是顾客进程之间的公有资源,而且超市里限制最多允许有n个顾客购物,所以要设置一个公有信号量Sn,初值是n,顾客进程在进入超市时要执行P(Sn),离开超市时要执行V(Sn)操作。
顾客购物后要到收银员处付款,因此顾客进程与收银员进程之间是同步的关系,一次只允许一个顾客进程付款,整个超市只有一个收银员进程收费,所以需要为顾客进程设置一个私有信号量S2,为收银员进程设置一个私有信号量S1,由于开始时没有顾客去付款,收银员也没有收费,所以S1和S2的初值为0。
当有顾客买完东西去付款时执行V(S1),通知收银员进程有顾客付款,此时收银员进程执行P(S1)操作后就可进入收费,收费完成后收银元进程执行V(S2),以通知顾客收费完毕,此时顾客执行P(S2)就可离开收银台,在离开超市时需执行V(Sn),释放资源。
复习提示:
PV操作在操作系统中处于很重要得地位,要想合适的运用PV操作,必须很好的理解进程之间的互斥与同步,即那些进程之间是互斥的,那些进程之间是同步的。
并发进程由于共享系统内部资源,因此导致进程执行速度上的制约,这种制约分为:
间接制约与直接制约。
间接制约引起进程之间的互斥执行,直接制约引起进程间的同步执行。
例如一个家里如果只有一个卫生间,卫生间这个公有资源使得每个人只能互斥使用它,这就是间接制约。
而直接制约是指并发进程各自执行的结果互为对方的执行条件,例如司机与售票员的关系,当司机到站停车后,售票员才能开门,而只有售票员关门后,司机才能开车,他们之间是同步的。
进程的互斥与同步可以很好的通过信号量和PV原语来实现。
通过读一些同步与互斥的例子,你会体会到PV原语的精妙,也会感到一种乐趣。
并发进程的资源竞争不当还会导致死锁现象。
如何用PV原语实现进程间的互斥与同步
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
软考考试大纲汇总:
软考过关完全攻略:
软考历年试题汇总:
软考资料下载:
提交资料赚希赛币:
免费赚取希赛币:
PV原语的含义
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;
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
软考考试大纲汇总:
软考过关完全攻略:
软考历年试题汇总:
软考资料下载:
提交资料赚希赛币:
免费赚取希赛币:
判断进程间是否互斥,关键是看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。
确定信号量的值是一个关键点,它代表了可用资源实体数。
如下实例:
例2
某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。
每个购票者可看成一个进程。
分析:
第一步:
确定进程间的关系。
售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待。
所以进程间是互斥的关系。
第二步:
确定信号量及其值。
只有一个公有资源:
售票厅,所以设置一个信号量s。
售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。
实现:
begin
s:
semaphore;
s:
=20;
cobegin
processPI(I=1,2,……)
begin
P(s);
进入售票厅;
购票;
退出;
V(s);
end;
coend
当购票者进入售票厅前要执行P(s)操作,执行后若s大于或等于零,说明售票厅的人数还未满可进入。
执行后若s小于零,则说明售票厅的人数已满不能进入。
这个实现中同时最多允许20个进程进入售票厅购票,其余进程只能等待。
用PV原语实现进程的同步
与进程互斥不同,进程同步时的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关,所以称该信号量为私有信号量。
利用PV原语实现进程同步的方法是:
首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。
下面我们将例1增添一个条件,使其成为进程间是同步的。
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
软考考试大纲汇总:
软考过关完全攻略:
软考历年试题汇总:
软考资料下载:
提交资料赚希赛币:
免费赚取希赛币:
例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原语的前面?
回答是否定的。
下面看一个例子。
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
软考考试大纲汇总:
软考过关完全攻略:
软考历年试题汇总:
软考资料下载:
提交资料赚希赛币:
免费赚取希赛币:
例4
设在公共汽车上,司机和售票员的活动分别是:
司机:
启动车辆,正常行车,到站停车。
售票员:
上乘客,关车门,售票,开车门,下乘客。
用PV操作对其控制。
分析:
第一步:
确定进程间的关系。
司机到站停车后,售票员方可工作。
同样,售票员关车门后,司机才能工作。
所以司机与售票员之间是一种同步关系。
第二步:
确定信号量及其值。
由于司机与售票员之间要互通消息,司机进程设置一个私有信号量run,用于判断司机能否进行工作,初值为0。
售票员进程设置一个私有信号量stop,用于判断是否停车,售票员是否能够开车门,初值为0。
实现:
begin
stop,run:
semaphore
stop:
=0;run:
=0;
cobegin
driver:
begin
L1:
P(run);
启动车辆;
正常行车;
到站停车;
V(stop);
gotoL1;
end;
conductor:
begin
L2:
上乘客;
关车门;
V(run);
售票;
P(stop);
开车门;
下乘客;
gotoL2;
end;
coend;
end;
用PV操作还可以实现进程同步与互斥的混合问题,典型的如:
多个生产者和多个消费者共享容量为n的缓存区。
这个例子在很多书中都有介绍,在这里就不说了。
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
软考考试大纲汇总:
软考过关完全攻略:
软考历年试题汇总:
软考资料下载:
提交资料赚希赛币:
免费赚取希赛币:
数据库
数据库基础知识包括数据库模型,关系数据库的基础知识,数据库系统的结构,SQL的使用,常用数据库管理系统的知识。
考生在复习时除了看教材相关部分外,还应该多做历届相关真题,同时可参考《数据库系统概论》萨师煊(第三版),因为该书中有更详细的一些概念说明,而教材中有些地方没有讲到。
1.在数据库逻辑结构的设计中,将E-R模型转换为关系模型应遵循相关原则。
对于三个不同实体集和它们之间的多对多联系m:
n:
p,最少可转换为____个关系模式。
A.2B.3C.4D.5
答案:
C
解析:
书本上讲过两个不同实体集和它们之间的多对多联系时,可把两个不同实体集转换成两个关系模式,多对多的联系可以转换成一个关系模式。
对于三个不同实体集和它们之间的多对多联系m:
n:
p,也是把三个不同实体集转换成三个关系模式,其中的两个多对多的联系最少可以转换成一个关系模式,所以共4个关系模式。
2.给定关系模式R(U,F),U={A,B,C,D,E},F={B→A,D→A,A→E,AC→B},其属性AD的闭包为__
(1)__,其候选关键字为__
(2)__。
(1)A.ADEB.ABDC.ABCDD.ACD
(2)A.ABDB.ADEC.ACDD.CD
答案:
(1)A
(2)D
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
软考考试大纲汇总:
软考过关完全攻略:
软考历年试题汇总:
软考资料下载:
提交资料赚希赛币:
免费赚取希赛币:
解析:
(1)闭包的定义在教材中没有给出,具体的闭包定义考生可参考《数据库系统概论》萨师煊(第三版),第184页。
求属性集的闭包可由固定的算法推出:
设X(0)=AD;计算X
(1);逐一扫描F集合中各个函数依赖,找左部是A、D或AD的函数依赖,得到:
A→E,D→A。
于是X
(1)=X(0)∪EA=ADE。
由于X(0)≠X
(1),所以再逐一扫描F集合中各个函数依赖,找左部是ADE的子集的那些函数依赖,得到A→E,D→A。
于是X
(2)=X
(1)∪EA=ADE。
由于X
(2)=X
(1),所以算法到此为止,其属性AD的闭包为X
(2),即ADE。
(2)对于键和函数依赖的关系,有两个条件:
设关系模式R(A1,A2...An),F是R上的函数依赖集,X是R的一个子集,①X→A1A2...An∈F+(它的意思是X能够决定唯一的一个元组)②不存在X的真子集Y,使得Y也能决定唯一的一个元组,则X就是R的一个候选键(它的意思是X能决定唯一的一个元组但又没有多余的属性集)。
可以利用Armstrong的推理规则,求出X使得X→ABCDE。
由D→A和AC→B,可得:
DC→B,由B→A得:
DC→A,又由A→E得:
DC→E。
而DC→C,DC→D。
所以由上可知:
DC→ABCDE。
故候选关键字为CD。
3.若有关系模式R(A,B,C)和S(C,D,E),对于如下的关系代数表达式:
E=∏A,D(σB<'2003'∧R.C=S.C∧E='80'(R×S))
E=∏A,D(σR.C=S.C(σB<'2003'(R)×σE='80'(S)))
E=∏A,D(σB<'2003'(R)σE='80'(S))
E=∏A,D(σB<'2003'∧E='80'(RS))
正确的结论是__(20)__,表达式__(21)__的查询效率最高。
(1)A.E1≡E2≡E3≡E4B.E3≡E4但E1≠E2
C.E1≡E2但E3≠E4D.E3≠E4但E2≡E4
(2)A.E1C.E3B.E2D.E4
答案:
(1)A
(2)C
解析:
(1)这道题的查询含义是:
找出R.C=S.C时,其中B<'2003'且E='80',只含A、D属性的这些记录。
从E1、E2、E3、E4式子中看出它们是等价的。
(2)查询优化的目的就是为了系统在执行时既省时间又能提高效率。
优化的策略主要有以下几点:
①在关系代数表达式中尽可能早地执行选择操作(早选择)(这是最总要最基本的一条)②把笛卡尔积和随后的选择操作合并成F联接运算(F联接)③同时计算一连串的选择和投影操作(同时算)④保留同一子表达式的结果⑤适当对关系文件进行预处理⑥计算表达式之前先估计一下怎么计算合算。
根据第一条可知E3是查询效率最高的。
4.集合A={d.b.c}上的二元关系R为:
R={,,)},则二元关系R是____。
A.自反的B.反自反的C.对称的D.传递的
答案:
D
08年软考需要做什么?
如何快捷通过软考?
软考时间安排:
软考视频教程:
软考各科指定教材:
http:
//boo