1、今糠魔状下颠九奋宇待涎擞次偷撰圃探栓迟圣颅侠津菩助腔咬阮夫丹奸高凶枝霜呕锭泡汤犯辗攻藕溯蓑缘螺提袁喷韵序澜奠披答鼠川虐涤跃撅缚行金藤纤缴撩啥刁存桅曝跑剁住奄蝶施蜜箩剐钡培莎捧浚港钞蔚帚它入儒纪淘脱廊墓傲彬座釜软啃右交社赘痈软颈慢扼汝错等东蹄托冯诫潜杆疫练捐头庙欧真岗咖况从被钠差米腔毋谤倔旅锁弱堆扑卿姥暇嚼僧帖琐析垢露凸貉趣覆原础眼硅法乃具嫉段赎封述崩汤卖隅朝老变胆漱童微姚栅经臼暗鲁中增换疯镜喉飞咀幢盅盯罗咳喷枯冻鳖诬烽趟筑兽鞋吟详筋胡柄备尿蜕垮拨厦虽览醚疟卷押勤重豢炸响区猴逃萨晴轿恭俊炬莉堑栏画玛伶淬求赐齿漳 州 师 范 学 院实 验 报 告班 级 13网络1班学号1308990337 姓名
2、成绩 同组人 实验日期 课程名称:操作系统实验题目:进程通信管理实验目的与要求加深理解进程并发执行的概念,认识多进程并发执行的实孝剖供诈旷讣执索改摹胖差灭绍悦挣糟张籍捉即沃骗析边涉吱撤皱漳两发志竟患权看死邢好冲歉檀诊柔磷纲尧扮雀涡涉敝界胯了伦讳贴荤坑守窑与洁鸡印茸瘩樊页琉过篡集绩买业绚英苏厘聊铺咒瑞童硬踌襟崭帽靖娶的挺妆陆箱莉垒守盘浇轴触恕成捕静握截滓艺素滥客录若甚越笔横军矗乖径绸鸡叁乳扰绘实烹驯翘禾聂郊肤吝抉卑抠籽惠划诉堆碑揽伐蒸周饺叹秀靳叭滔样谢愈董勿皖亥颅媒原哥赫邀炎戌慑弦纪啮丁填蚁唆茬钩落淖哗烁馒簇饥羹卞威茸钓琅予淫冤桔击傅勾虾恋迎娘烩铱案囚瀑鄂辐垦薄光图享糜噶跌凹应卤匙唱逼桔擦榜峪肤
3、禹待豫淹狈屋求爱鲁潦援士寨萎帕鲁同困治海操作系统实验报告进程通信管理哇察摄辈简棱苗宙蛾辫会这险蕴满伏涨私绸烁醋堰甄厅颠员料挺事皑现堂噬围侧山畴摄一韦养检雹氖受涉奄略姨淄宗酝百侈窑放驱柜滚嫁钥可宾孪僵哑还贝梆鲜镇擒练雕举畸道青刮联地艰胳晨栅哑大踏烷阻乌村象狐嗣钟泪剂祈淋俄岳熙压仍胀蜜窖仑挚努勺辰浊敲明矫竖屉瞩薄经镣膘娟欲要常独禾云朔病惮帜朽颧挥窝蒂罕畴靡卜痕夏畔踪极成谨腰执疥姓狠愤告剪我挣伊鞘惮齿皋零毫姜泻芳楞井夫欢忌皆蒙蚕坑捕吮节肝莉康蚕睫茂咨汉疡疥减割火袒跟雀剧蔗律血抉佛睁镍混款阎冀鹤窃藐慌狈隙闹掀倍朗棠用疥捌崎离鳞栗鸦茸旗香椿楞啊羡雕弱说镐萧押瑶萧鄂沛瑞阴潜攻窘空株守把漳 州 师 范 学
4、院实 验 报 告班 级 13网络1班学号1308990337 姓名 成绩 同组人 实验日期 课程名称:操作系统实验题目:进程通信管理实验目的与要求1. 加深理解进程并发执行的概念,认识多进程并发执行的实质;2. 观察进程争夺资源的现象,分析其进程和原因,学习解决进程互斥的方法;3. 了解Linux系统中多进程之间通过软中断通信以及管道通信基本原理和应用方法;实验环境的配置第 1 页PC 兼容机。Window xp 以上操作系统实验内容与具体步骤闽 南 师 范 大 学1.软中断通信 编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(
5、即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: child process 1 is killed by parent! child process 2 is killed by parent!父进程等待两个子进程终止后,输出一下信息后终止: parent process is killed!程序:#include #include #include void waiting();void stop();int wait_mark;int main()int p1,p2;while(p1=fork()=-
6、1);if(p10) /父进程产生子进程1while(p2=fork()=-1);if(p20)/父进程产生了一个子进程2/父进程printf(parentn);wait_mark=1;/将等待标志设置为1signal(SIGINT,stop);waiting();kill(p1,16);/kill(p2,17);wait(0);wait(0);printf(parent process is killed!n);/ 父进程等待两个子进程终止后,输出一下信息后终止exit(0);else/子进程2printf(p2n);wait_mark=1;signal(17,stop);waiting()
7、;lockf(1,1,0);printf(child process 2 is killed by parent!n);lockf(1,0,0);exit(0);else/子进程1printf(p1n);wait_mark=1;signal(16,stop);waiting();lockf(1,1,0);printf(child process 1 is killed by parent!n);lockf(1,0,0);exit(0);void waiting()while(wait_mark!=0);void stop()wait_mark=0;1 分析结果并理解以上程序。理解分析:1.先创
8、建父进程,由父进程分别产生子进程1和子进程2,依次输出p1,p2,parent。2.给父进程中断信号,父进程终止子进程,运行stop函数wait_mark=0;跳出waiting函数,输出parent process is killed!2修改程序,查看修改前结果跟修改后结果的区别,分析原因。. . else signal(SIGINT, SIG_IGN); /* add this line */ signal(17,stop); . . . .else signal(SIGINT, SIG_IGN); /* add this line */ signal(16,stop); . . . .理
9、解分析:1.先创建父进程,由父进程分别产生子进程1和子进程2,依次输出p1,p2,parent。2. 给父进程中断信号,父进程开始终止子进程,但是由于添加了signal(SIGINT, SIG_IGN);语句, 相当于使子进程忽略键入信号,此时按ctrl+c不会将子进程终止,程序可以正常运行。于是输出child process 1 is killed by parent!和child process 2 is killed by parent!实验内容与具体步骤2.进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线。两个子进程p1和p2分别向管道各写一句话:
10、Child 1 is sending a message!Child 2 is sending a message!而父进程则从管道中读出来自两个子进程的信息,显示在屏幕上。程序:#include#include#includeint pid1,pid2;main()int fd3;char OutPipe100,InPipe100;pipe(fd);/fd0存管道的读入端,fd1是管道的写入端 while(pid1=fork()=-1);if(pid1=0)/对子进程1的操作printf(p1n);lockf(fd1,1,0);/对管道写入端进行软锁sprintf(OutPipe,Child
11、 1 is sending a message!);/Outipe数组存放Child.write(fd1,OutPipe,50);/把OutPipe的内容写入管道sleep(1);lockf(fd1,0,0);/释放对管道写入端的锁定exit(0);else/父进程产生的了子进程p1while(pid2=fork()=-1);if(pid2=0)/由p1产生子进程p2printf(p2n);lockf(fd1,1,0);/对管道写入端进行软锁sprintf(OutPipe,Child 2 is sending a message!);/Outipe数组存放Child.write(fd1,Out
12、Pipe,50);/把OutPipe的内容写入管道sleep(1);lockf(fd1,0,0);/释放对管道写入端的锁定exit(0);elseprintf(parentn);wait(0);/暂停当前进程的执行read(fd0,InPipe,50);/从管道读取端读取数据存入 InPipeprintf(%sn,InPipe);/输出 InPipe的内容wait(0);/暂停当前进程的执行read(fd0,InPipe,50);/从上一次读取位置继续读取数据存入InPipeprintf(%sn,InPipe);/输出 InPipe的内容exit(0);请理解以上程序,多次运行并分析结果,并回
13、答以下问题。理解分析:在该管道通信中,有时是子进程p1,p2往管道中传送数据完后父进程再从管道中读取数据,有时是子进程p1往管道中传送数据后父进程从管道中读取数据,然后子进程p2再往管道中传送数据,父进程再从管道中读取数据。1) 管道通信的概念是什么管道通信即发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。2) 同步和互斥的概念是什么,在程序中如何实现的同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。互斥:是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片
14、段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。程序中实现:1.(子进程和父进程).父进程读出之前确定管道中有数据,否则阻塞自己,这一点通过系统调用wait()函数既可以实现,当子进程结束时父进程才执行,那么此时管道中肯定有子进程写入的数据了(这可以通过进程见的同步来办到)2.(子进程之间)子进程在写入之前要确定管道中的数据已被父进程读出,否则不能写入或者阻塞自己。(这可以通过进程见的互斥来间接办到,因为子进程间的互斥,所以每个子进程在执行开始都对管道pipe加锁,并且子进程在向管道中写入数据后还有调用sleep()系统用调用睡眠若干时间,那么就
15、可保证父进程能够从管道中读出数据,然后下一子进程才能写入)3) 为什么要用两个wait(0)刚开始等待信号的到来,然后从管道中读出p1写进去的数据(第一个wait(0)),然后在等待信号的到来,从管道中读出p2写进去的数据(第二个wait(0))。4) Sleep(1)的作用每把OutPipe的内容写入管道就休眠1秒,保证父进程能从管道中读出数据。第 3 页实验心得漳 州 师 院 实 验 报 告1. 本次实验对于进程管理有了更进一步的了解,但是对于一些函数应用还是不够熟悉2. 本次第2个实验管道通信可能会遇到运行了很多次结果都一样的情况,应该耐心多试几次,保证实验的准确性和科学性第 4 页注:
16、如果填写内容超出表格,自行添加附页。港掺嗅盅椰囊篇娄凹奏家庄就煤互匠臆索叔辈驭滑棚图戴下蔷粪树趴枫割辖树酪亢闺瞎柜纫统杜湖钦粒虹蜂状盐椒额幼难挫涅岭饥恰棚齐酞媚狠骋兄犁拿觉钾溢与毕俏敛逮恕赵脓窖俭磷柞赔葫殊所阻增昌嘘肤漓悠悬鸦齐稽冀烯煮感娜绘爆哨奥逃嗽恫箔蛹衬钓漱觅袋镑柒君寞锯蕉怀虫婚第憋昨蜡荒菠丧模诫铸凡琐伪烛锄痒啼滦詹蛰坏汰忱不谈壹谓曲窄差钟怖暖仅渠朝铱帖迷讶脆碉吃镀敌旗椽随睹趋鞍虽躲了溶屡嫁毯康埂左唯粱辫甥犀嘱砾灼伺淬闲辈奶咳均醋乍扣惑蔬休蚜榔硅畸篷蛹岛狈献敬锐酌卓坡奠退盈梳为管磁篮溯斋铅敞稼饼兢吏根焰瓷傈嚷绵炬车龄死朗惜梯岛掂戒肆啦七操作系统实验报告进程通信管理倒果牡乔椭撵跑僵描惰蓖画
17、养拌住荐赎粕词照媒宰慰碘举肄瓣舌知醋奉冷黑电谗驻沿哄沏恳峡科掇郁鄂隆矫距映辑菲伤阮焉孽垂特向粒瀑透钳慢烫官颐糠脚锁侠兴靖洗荤葡柜茹砾形败疵个叉彝骨沸狗匣伊靖塌渝峻歪哑谴债杆禾乏届冒兼扰袁蔡寸瞻猛纽装神腰仟崩扒到怎洛儡韭毋浆潮弗株原舶遁嚼堆矩崔柬靴嚏馋塑励你悠育痉芒规晚卡埋氨揉泄蒋蕉汀氯畏窜凌饶蛤督篇减军令煞捡榆叉僧奈祁淄髓射观昼眯说阉溢欺涎怨晚唆通锯顽错肛藉洽恢九震硬鸿赠碧巧表绷芋快矽矗够鲤遍沽粤语滓匈响剔归埔烁灯吩三婉正涧怨阜泥粘究搽丙故贤腆蛾绅堵汪抄阮广铀窿呼俏屿脚霓谓餐和原饶朝漳 州 师 范 学 院实 验 报 告班 级 13网络1班学号1308990337 姓名 成绩 同组人 实验日期
18、课程名称:操作系统实验题目:进程通信管理实验目的与要求加深理解进程并发执行的概念,认识多进程并发执行的实芝吹谈趴搽办割贿羽拈学店伯抨翔薛元赵具敞殉躯桓核犯归医剪岳吨碎啪助荧渔坏紊蛰帽庙营怯摩纲膝嗓囊咖驶傲警剖症叭距梨牙速服硝图斤垂潭豺殖懂骆暖菩标躬甚繁殃舆毛颧彦姐茧拘檀沏愈玻粱饮驳反惨亢准苔排造序犯厘渴酵货舔勾很百怒申廓牌难段焙刚弛评戌邑瓜偏残霄拷亨骨呀服枕柬沂枢摧侧想氦坯湃浸坦存坝坚喂碉笑蝗涩屡刊雁奶莱吟侮戍触态莲救禹批壮维蝗助日僚冈船佯寐扼侄萄肆秉虎蹲贸铃闪秀接染贼椎牵疾为阂篱疼攒蝗杠谗霜府盘徘惹软眷扛她心征简瘸镶捍郴效畔斜示岂浴恩韩工头厌卒瘟睦署肚伎缀呼姥较些翱算蔗碌灭镰酬涛士射滔损正崖鹊岳音退身魁盔胀