在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下程序,其中:
[程序1]:实现两个变量值互换;
[程序2]:完成某功能C语言程序;
[程序3]和[程序4]:是P、V操作形式化定义,设S为信号量。在多道程序系统中,进程是并发执行。这些进程间存在着不同相互制约关系,主要表现为同步和互斥两个方面。信号量是解决进程间同步与互斥有效方法。[程序1]void swap (int n1, int n2){int tmp=n1;n1=n2;n2=tmp;}[程序2]#include image.pngstdio.h>int fun (int n){int f0=0, f1=1, f, i;if (n==0) return 0;if (n==1) return 1;for(i=2; iimage.png=n; i++){f=f0+f1;f0=f1;f1=f;}return f;}void main(){int n=5;printf ("fun(%d)=%d\n", n, fun(n));n=7;printf ("fun(%d)=%d\n", n, fun(n));n=9;printf ("fun(%d)=%d\n", n, fun(n));}[程序3]P操作形式化定义:P (S){__1____;if(__2____){阻塞该进程;将该进程插入信号量S等待队列;}}[程序4]V操作形式化定义:V(S){__3____;if(___4___){从信号量S等待队列中取出队首进程;将其插入就绪队列;}}
问题1:执行[程序1]后,没有能够实现两个变量值交换,为什么?请修改上述函数,实现两个变量值交换,要求函数无返回值,形式为:void swap(...)。
问题2:请问[程序2]运行结果是什么?
问题3:请简述什么是临界资源?什么是临界区? 请完成[程序3]和[程序4]形式化定义。
正确答案及解析
正确答案
解析
问题1:两个变量不能交换值原因:因为函数是传值,函数形参值交换,并不影响到实参值变化。正确函数编写如下(下面只是范例,变量名称不作要求):void swap (int *pn1, int *pn2){int tmp=*pn1;*pn1=*pn2;*pn2=tmp;}
问题2:第一次输出:fun(5)=5 第二次输出:fun(7)=13 第三次输出:fun(9)=34
问题3:临界资源:一次只能使一个进程访问资源称为临界资源。 临界区:进程中访问临界资源那段代码称为临界区。 (1)S-- (2)S<0 (3)S++ (4)S<=0
问题1本题考查嵌入式C/C++语言编程基础知识。函数swap采用值传递,虽然将形参n1和n2交换了,但是并不影响到实参,所以执行[程序1]后,实参变量并没有完成数据交换。
将值传递改成指针传递就可以了。对应swap函数应修改如下:swap (int *pn1, int *pn2){int tmp;tmp=*pn1;*pn1=*pn2;*pn2=tmp;}
问题2当n=5时,初始:f0=0,f1=1; for循环计算如下: i=2: f=0+1=1; f0=1; f1=1; i=3: f=1+1=2; f0=1; f1=2; i=4: f=1+2=3; f0=2; f1=3; i=5: f=2+3=5; f0=3; f1=5; 所以,调用fun(5),得到返回值5; 同理,可计算出fun(7)=13; fun(9)=34。
问题3在多道程序系统中,进程是并发执行,这些进程之间存在着不同相互制约关系。进程之间这种制约关系来源于并发进程合作以及对资源共享。进程在运行过程中,一般会与其他进程共享资源,而有些资源使用具有排他性。系统中多个进程可以共享系统各种资源,然而其中许多资源一次只能为一个进程所使用,通常把一次仅允许一个进程使用资源称为临界资源。
许多物理设备都属于临界资源,如打印机、绘图机等。除物理设备外,还有许多变量、数据等都可由若干进程所共享,它们也属于临界资源。进程中访问临界资源那段代码称为临界区,也称为临界段。
访问临界资源应遵循如下原则:①空闲让进(或有空即进):当没有进程处于临界区时,可以允许一个请求进入临界区进程立即进入自己临界区;②忙则等待(或无空则等):当已有进程进入其临界区时,其他试图进入临界区进程必须等待;③有限等待:对要求访问临界资源进程,应保证能在有限时间内进入自己临界区;④让权等待:当进程不能进入自己临界区时,应释放处理机。
信号量是荷兰著名计算机科学家Dijkstra于1965年提出一个同步机制,其基本思想是在多个相互合作进程之间使用简单信号来同步。在操作系统中,信号量是表示资源实体,除信号量初值外,信号量值仅能由P操作(又称Wait操作)和V操作(又称Signal操作)改变。设S为一个信号量,P(S)执行时主要完成:先执行S=S-1;若S≥0则进程继续运行;若S<0则阻塞改进程,并将它插入该信号量等待队列中。V(S)执行时主要完成:先执行S=S+1;若S>0则进程继续执行;若S≤0则从该信号量等待队列中移出第一个进程,使其变为就绪状态并插入就绪队列,然后再返回原进程继续执行。PV操作过程如下图所示:
你可能感兴趣的试题
在几种不同类型的软件维护中,通常情况下()所占工作量最大。
-
- A.更正性维护
- B.适应性维护
- C.完善性维护
- D.预防性维护
- 查看答案
在()中,项目经理的权力是最小的。
-
- A.强矩阵型组织
- B.平衡矩阵组织
- C.弱矩阵型组织
- D.项目型组织
- 查看答案
在项目实施的过程中,项目经理通过项目周报中的项目进度分析图表发现机房施工进度有延期风险。项目经理立即组织相关人员进行分析,下达了关于改进措施的书面指令。该指令属于( )
-
- A.检查措施
- B.缺陷补救措施
- C.预防措施
- D.纠正措施
- 查看答案
-
- A.见图A
- B.见图B
- C.见图C
- D.见图D
- 查看答案
-
- A.见图A
- B.见图B
- C.见图C
- D.见图D
- 查看答案