操作系统 实验指导书综述.docx
- 文档编号:800815
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:38
- 大小:41.90KB
操作系统 实验指导书综述.docx
《操作系统 实验指导书综述.docx》由会员分享,可在线阅读,更多相关《操作系统 实验指导书综述.docx(38页珍藏版)》请在冰豆网上搜索。
操作系统实验指导书综述
《操作系统》课程实验
实验1BACI环境下进程的并发执行
【实验目的】
1)了解BACI并发运行环境。
2)使用BACI设计并发程序,深入理解并发概念。
【条件要求】
1)认真阅读和掌握预备知识。
2)上机操作。
【预备知识】
一、BACI简介
并行和同步是计算机科学中的重要课题。
由于对并行和分布式计算的日益重视,理解并行和同步变得愈发重要。
为了获得对于这些概念的感性认识,编写并行程序的实践经验将是必不可少的。
BACI是帮助学生获得需要的“第一手”并行程序设计经验的选项之一。
BACI是Ben-AriConcurrentInterpreter(Ben-Ari并行解释器)的缩写。
编译器和解释器最初由M.Ben-Ari设计完成,主要基于NiklausWirth的Pascal编译器。
最初版本的BACI编译器和解释器基于这些代码,并运行于一个PRIME大型机。
经过大量的修改和扩充,目前版本已经移植到了PC上,支持的语言包括TurboPascal,SunPascal以及C。
此外,编译器和解释器被分成了两个独立的程序。
后来,BACI中还加入了C--编译器,这是一个有限的C++子集,它可以编译C--程序为解释器能够解释的中间代码(PCODEobjectcode)。
与其他并行语言相比,BACI在学生熟悉的语法框架内提供了多种并行技术,所有具有C或Pascal程序设计经验的学生都可以在几小时内掌握BACI的使用,BACI已经被成功地运用于很多大学的课堂教学。
二、C--编译器语法
BACI的C--是C++的一个子集。
换言之,C--符合C++语法,此外,它包括一些限制和新的数据类型,例如:
1)除了标准输入输出(cout,cin,endl)之外不支持其他文件操作。
2)C--BACI只支持简单的C/C++类型:
int和char。
简单类型的常量修饰符(const)也被支持,所有的变量必须在代码块的开头定义。
3)支持字符串类型(string)。
BACI同时包括内建的字符串处理函数,例如stringCopy,stringCompare,stringConcat等等。
4)支持简单类型和字符串数组,数组定义遵循常见的C语法。
5)支持过程和函数,采用标准的作用域规则,参数定义可以使用传值和传递引用的方式,执行开始于对“main()”的调用。
6)过程控制语句包括if-else,switch/case,for,while,do-while,break和continue,这些语句的句法和标准的C/C++相同。
三、并行结构
1.cobegin
cobegin块包括一组并发执行的进程列表,这样的块不允许嵌套,而且只能出现在主程序中。
列表中的PCODE语句将被解释器以任意、随机的顺序执行,于是多次执行包括cobegin块的相同程序的结果将呈现不可预测性。
主程序将挂起,直到cobegin块终结,此时主程序将恢复执行紧随块后的下一条语句。
下面是一个例子:
cobegin
{
proc1(...);proc2(...);...;procN(...);
}
2.semaphore
semaphore是一个BACI预定义类型,它是一个非负的整数变量,并且只能通过受限的方式访问。
BACI也提供了一个它的子类型——binarysem,这是一个二元信号量,它的值只能是0或1。
信号量函数包括:
●initialsem(semaphores,integer_expression):
能够初始化BACI中两种信号量s的唯一的函数。
●p(semaphores)和wait(semaphores):
如果semaphore>0,则递减1并返回,从而调用者能够继续运行;如果semaphore=0,则递减1,p的调用者将休眠。
●v(semaphores)和signal(semaphores):
如果semaphore=0并且存在等待它的进程,则将随机地唤醒一个,并且semaphore递增1。
无论如何v的调用者将继续。
3.monitors
BACI也支持有限的Hoaremonitor概念,monitor是包括附加属性的C--块,所有monitor变量中的函数都对外可见,但monitor变量不可以在块外访问,而只能由monitor函数访问。
在BACI中,monitor只能在全局域中定义,并且不能嵌套。
任意时刻只能有一个monitor块中的过程或函数被执行。
这一特性使得能够使用monitor来实现互斥。
有三个可以被过程或函数使用的monitor机制:
condition变量,waitc(条件等待)以及signalc(条件信号)。
●condition变量:
只能被monitor的函数访问。
这种变量不能有实际的值,它是进行P操作或V操作的标志。
●voidwaitc(conditioncond,intprio):
monitor进程将被阻塞,并赋予指定的优先级(prio)以备重新唤醒。
这个阻塞动作允许就绪的其他进程继续执行。
●voidwaitc(conditioncond):
与waitc调用语义相同,但这一P操作将被赋予优先级10。
●voidsignalc(conditioncond):
如果存在的话,唤醒等待cond的优先级最高的进程。
●voidempty(conditioncond):
当没有等待cond的进程时返回“1”,反之返回“0”。
4.其他并行结构
●atomic(原子的)关键字:
如果某个函数被定义为“atomic”,则函数将是不可剥夺的。
解释器将不会在进程切换时中断atomic函数。
●voidsuspend(void):
将调用进程置为休眠状态。
●voidrevive(intprocess_id):
激活给定id的进程。
●intwhich_proc(void):
返回当前进程的线程数。
●intrandom(intrange):
返回0到“range-1”之间,包括端点的伪随机数。
四、怎样使用BACI
BACIC--编译器源文件的扩展名必须是“.cm”,在BACI中运行程序的步骤是:
1)编译“.cm”文件以获得PCODE文件(.pco)。
命令格式为:
bacc[参数]源文件名
常见的参数包括:
●–h:
显示帮助信息。
●–c:
产生“.pob”目标文件,以便进行后续的连接操作。
2)使用解释器解释执行PCODE(.pco)文件。
命令格式为:
bainterp[参数]PCODE文件名
常见的参数包括:
●–d:
调试模式,单步执行,可以设置断点。
●–e:
在每一进程项旁边显示活动记录(AR)。
●–x:
每一进程退出时显示AR。
●–t:
通知进程结束。
●–h:
显示帮助信息。
●–p:
执行时显示PCODE指令。
【实验内容】
1)设包含可执行文件bacc,bainterp的目录名为“balnxxe”,进入该目录。
#cdbalnxxe
2)使用Vi编辑一个新文件“exam8a.cm”。
#viexam8a.cm
其内容如下:
voidfunc1()
{
cout<<"**************"< cout<<"AAAAAAAAAAAAAA"< cout<<"BBBBBBBBBBBBBB"< } voidfunc2() { cout<<"$$$$$$$$$$$$$$"< cout<<"CCCCCCCCCCCCCC"< cout<<"DDDDDDDDDDDDDD"< } main() { cobegin{func1();func2();} } 3)保存退出“exam8a.cm”。 4)在Linux下编译“exam8a.cm”。 #./baccexam8a.cm 5)解释执行“exam8a.pco”。 #./bainterpexam8a.pco 记录执行结果。 6)再次解释执行“exam8a.pco”。 #./bainterpexam8a.pco 比较这次结果与上次结果有何不同,试说明原因。 7)使用Vi编辑一个新文件“exam8b.cm”。 #viexam8b.cm 其内容如下: intx=0; inty=0; voidfunc1() { x=4; cout< y=y+x; } voidfunc2() { y=3; cout< x=x+2; } main() { cobegin{func1();func2();} cout<<"x=="< } 8)保存退出“exam8b.cm”。 9)在Linux下编译“exam8b.cm”。 #./baccexam8b.cm 10)解释执行“exam8b.pco”。 #./bainterpexam8b.pco 记录执行结果。 11)再次解释执行“exam8b.pco”。 #./bainterpexam8b.pco 比较这次结果与上次结果有何不同,试说明原因。 并解释每种结果的语句执行次序。 12)使用Vi编辑一个新文件“exam8c.cm”。 #viexam8c.cm 其内容如下: intx=0; voidfunc1() { inti=0; for(i=0;i<50;i=i+1) {x=x+1;} } voidfunc2() { inti=0; for(i=0;i<50;i=i+1) {x=x+1;} } main() { cobegin{func1();func2();} cout<<"x=="< } 13)保存退出“exam8c.cm”。 14)在Linux下编译“exam8c.cm”。 #./baccexam8c.cm 15)解释执行exam8c.pco ./bainterpexam8c.pco 记录执行结果。 看看x的结果是否等于100。 试说明原因。 16)使用Vi编辑一个新文件“exam8d.cm”。 #viexam8d.cm 其内容如下: intx=0; intturn=0; voidfunc1() { inti=0; for(i=0;i<50;i=i+1) { while(turn! =0); x=x+1;/*临界区*/ turn=1; } } voidfunc2() { inti=0; for(i=0;i<50;i=i+1) { while(turn! =1); x=x+1;/*临界区*/ turn=0; } } main() { cobegin{func1();func2();} cout<<"x=="< } 17)保存退出“exam8d.cm”。 18)在Linux下编译“exam8d.cm”。 #./baccexam8d.cm 19)解释执行“exam8d.pco”。 #./bainterpexam8d.pco 记录执行结果。 看看x的结果是否等于100。 试说明原因。 20)使用Vi编辑一个新文件“exam8e.cm”。 #viexam8e.cm 其内容如下: intx=0; semaphores; voidfunc1() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验指导书综述 实验 指导书 综述