2012os实验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中级部分 (操作系统原理和linux操作系统相结合的实验) 实验一 进程的创建 一 实验目的 1 学会使用vi编辑器编辑C语言程序 2 学会Linux环境下gcc的使用 3 学会调试工具GDB的使用 二 实验原理 1 利用系统调用设计程序,加深对进程概念的理解。 2 体会系统进程调度的方法和效果。 三 实验环境 PC机1台,Windows操作系统和其上的虚拟Linux操作系统。 四 实验步骤 1 实验预备知识:使用编辑器vi 编辑文件 A)进入linux的文本模式之后,在命令行键入vi filename.c 然后回车。 下面作一些简单的解释:首先vi命令是打开vi编辑器。后面的filename.c是用户即将编辑的c文件名字,注意扩展名是.c;当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。 最基本的命令I :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I键(insert),插入的意思,就可以进入编辑模式了。如下图所示: 使用vi编辑器的编辑界面 a与i是相同的用法。 当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的Esc 键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。如果不想保存退出,则在第二步键入冒号之后,键入:q(不带w,只退出不保存)。如下图6.2所示: 退出vi界面 退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc [–o outputfilename] filename.c,其中gcc是c的编译器。参数:filename.c 是刚才编辑的c 文件(当然也可以是以前编写好的c文件);中括号里面的参数是可选的,它是一个输出文件。如果不选,默认的输出文件是a.out ,选了之后输出文件就是outputfilename. 最后一步是运行程序,方法如下:./outputfilename 2 实验内容 (1)进程的创建 编写一段源程序,使用系统调用fork()创建子进程,当此程序运行时,在系统中有父进程和子进程在并发执行。试观察屏幕上的显示结果,并分析原因(源代码:fork.c)。 #include stdio.h main( ) { int p1; while ((p1=fork()) == -1) ; if (p1 == 0) printf(i am child process,my pid is %d !\n,getpid()); else printf(i am parent process!, my pid is %d !\n,getppid()); } 思考:子进程是如何产生的?如何结束的?子进程被创建后它的运行环境是怎样建立的? 解答:子进程是通过调用fork()函数产生的它的运行环境是通过通过fork()返回不同值,从而执行不同程序段。 (2) 父进程创建子进程后,父子进程各自分支中的程序各自私有,其余部分,包括创建前和分支结束后的程序段,均为父子进程共享。(源代码:forkshare_1.c) #includestdio.h main() { int p1; putchar(x); //父子共享部分,都要输出x while((p1=fork()) == -1); if(p1==0) putchar(b); //子进程输出b else putchar(a); //父进程输出a putchar(y); //父子共享部分,都要输出y } (3)如果子进程在其分支结束处使用了进程终止exit()系统调用而终止执行,则不会再共享分支结束后的程序段。(源代码:forkshare_2.c) #includestdio.h main() { int p1; putchar(x); //父子共享部分,都要输出x while((p1=fork() )== -1); if(p1== 0) { putchar(b); //子进程输出b后终止执行 exit(0); } else putchar(a); putchar(y); //只有父进程输出y } (4)父进程等待子进程终止的同步常用于下述场合: 当父进程有许多任务要做时,往往会针对每一个任务创建一个子进程去完成,然后再等待每一个子进程的终止。其同步关系是父进程等待子进程。(源代码:wait.c) 实现的方法是: 子进程终止时

文档评论(0)

UnHTNCirsq + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档