操作系统原理实验报告.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[键入文字] 操作系统原理 实验报告 学 院: 专 业: 班 级: 学 号: 姓 名: 2011-2012学年 第2学期 PAGE PAGE 30 目录 TOC 实验1 进程管理 2 实验2 进程通信 9 实验3 存储管理 15 实验4 文件系统 24 实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。 四、程序说明和程序流程图 实验1管道通信——所涉及的流程图: 实验2软中断信号——所涉及的流程图: 五、程序代码 /*expe1_1.c*/ #include stdio.h void main( ) { int i, r, p1, p2, fd[2]; char buf[50], s[50]; pipe(fd); /* 父进程建立管道 */ while ((p1=fork())==-1); /* 创建子进程P1,失败时循环 */ if (p1==0) /* 由子进程P1返回,执行子进程P1 */ { lockf(fd[1], 1, 0); /* 加锁锁定写入端 */ sprintf(buf, Child process P1 is sending messages! \n); printf(Child process P1! \n); write(fd[1], buf, 50); /* 把buf中的50个字符写入管道 */ sleep(5); /* 睡眠5秒,让父进程读 */ lockf(fd[1], 0, 0); /* 释放管道写入端 */ exit(0); /* 关闭P1*/ } else /* 从父进程返回,执行父进程 */ { while ((p2=fork())==-1); /* 创建子进程P2,失败时循环 */ if (p2==0) /* 从子进程P2返回,执行子进程P2 */ { lockf(fd[1], 1, 0); /* 锁定写入端 */ sprintf(buf, Child process P2 is sending messages! \n); printf(Child process P2! \n); write(fd[1], buf, 50); /* 把buf中的字符写入管道 */ sleep(5); /* 睡眠5秒,让父进程读 */ lockf(fd[1], 0, 0); /* 释放管道写入端 */ exit(0); /* 关闭P2*/ } wait(0); if ((r=read(fd[0], s, 50))== -1) printf(cannot read pipe! \n); else printf(%s, s); wait(0); if ((r=read(fd[0], s, 50))== -1) printf(cannot read pipe! \n); else printf(%s, s); exit(0); } } /*exp1-2

文档评论(0)

annylsq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档