os实验
更新时间:2023-03-18 00:14:01 阅读量: 综合文库 文档下载
中级部分
(操作系统原理和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打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。
B) 最基本的命令I :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I键
(insert),插入的意思,就可以进入编辑模式了。如下图所示:
使用vi编辑器的编辑界面
C) a与i是相同的用法。
D) 当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上
的Esc 键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。如果不想保存退出,则在第二步键入冒号之后,键入:q(不带w,只退出不保存)。如下图6.2所示:
退出vi界面
E) 退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc [–o
outputfilename] filename.c,其中gcc是c的编译器。参数:filename.c 是刚才编辑的c 文件(当然也可以是以前编写好的c文件);中括号里面的参数是可选的,它是一个输出文件。如果不选,默认的输出文件是a.out ,选了之后输出文件就是outputfilename. F) 最后一步是运行程序,方法如下:./outputfilename
2 实验内容
(1)进程的创建
编写一段源程序,使用系统调用fork()创建子进程,当此程序运行时,在系统中有父
进程和子进程在并发执行。试观察屏幕上的显示结果,并分析原因(源代码:fork.c)。 #include
int p1;
while ((p1=fork()) == -1) ; if (p1 == 0)
printf(\ else
printf(\}
思考:子进程是如何产生的?如何结束的?子进程被创建后它的运行环境是怎样建立的? 解答:子进程是通过调用fork()函数产生的它的运行环境是通过通过fork()返回不同值,从
而执行不同程序段。
(2) 父进程创建子进程后,父子进程各自分支中的程序各自私有,其余部分,包括创建前
和分支结束后的程序段,均为父子进程共享。(源代码:forkshare_1.c) #include
(3)如果子进程在其分支结束处使用了进程终止exit()系统调用而终止执行,则不会再共享
分支结束后的程序段。(源代码:forkshare_2.c) #include
int p1;
putchar('x'); //父子共享部分,都要输出'x' while((p1=fork() )== -1); if(p1== 0) { } else
putchar('a');
putchar('y'); //只有父进程输出'y'
putchar('b'); //子进程输出'b'后终止执行 exit(0);
(4)父进程等待子进程终止的同步常用于下述场合:
当父进程有许多任务要做时,往往会针对每一个任务创建一个子进程去完成,然后再等待每一个子进程的终止。其同步关系是父进程等待子进程。(源代码:wait.c) 实现的方法是:
? 子进程终止时执行exit()向父进程发终止信号, ? 父进程使用wait()等待子进程的终止。 运行下面的程序并分析结果。 #include
int p1;
while((p1=fork())== -1); if(p1>0) { } {
putchar('b');
wait(0); //父进程等待子进程终止 putchar('a');
}
}
exit(0); //子进程向父进程发终止信号0
(5)Linux中子进程映像的重新装入
创建一个子进程,并给它加载程序,其功能是显示“I am a child‖。设被加载的程序路径名为./child。
分析:由于子进程需要加载的程序比较简单,不带参数,所以可以使用execl()实现加载。 A). 编辑子进程要加载的程序:(源代码为:child.c) #include
#include
编译链接,查看该程序执行后的结果并记下该文件的路径名和文件名是:./child B)编辑父进程创建子进程并加载的程序(child_parent.c) #include
while((p=fork())== -1); if(p==0) execl(\ else { wait(0); exit(0); } }
//创建子进程 //子进程返回 //加载子进程的程序 //父进程返回 //等待子进程终止
正在阅读:
os实验03-18
旅游网站设计毕业论文06-17
2011年太平乡林业工作汇报03-13
2007年安徽理科数学高考考试试卷03-08
信访维稳工作责任书11-25
2017高考生物总复习第1单元第2讲细胞中的素和化合物细胞中的无机物练习01-04
农村集体土地租赁合同(通用8篇)03-22
加强和改善大学生思想道德教育的对策和建议03-05
自然科学基金申请书正文报告撰写提纲03-08
- 冀教版版五年级科学下册复习资料
- 微生物学复习提纲
- 2013—2014学年小学第二学期教研组工作总结
- 国有土地转让委托服务合同协议范本模板
- 我的固废说明书
- 企业管理诊断报告格式
- 东鼎雅苑施工组织设计
- 谈谈如何做好基层党支部书记工作
- 浮梁县环保局市级文明单位创建工作汇报
- 管理学基础知识
- 大学物理实验报告23 - PN结温度传感器特性1
- 计算机网络实践
- 酒桌上这四种情况下要坐牢,千万别不当回事……
- 国家康居示范工程建设技术要点
- 中国贴布行业市场调查研究报告(目录) - 图文
- 新课标下如何在高中物理教学中培养学生的创新能力初探
- 营养师冬季养生食谱每日一练(7月4日)
- 关注江西2017年第3期药品质量公告
- 建设海绵城市专题习题汇总
- 10万吨年环保净水剂建设项目报告书(2).pdf - 图文
- 实验
- 广东省东莞市2018-2019学年高二数学下学期期末教学质量检查试题理
- 新目标九年级上册Unit1--5水平测试(成都专版)
- 海南大学数据库原理复习题及部分答案
- 奥数练习4火车过桥问题
- 2018-2024年中国并购基金市场全景调研研究报告(目录) - 图文
- 书法教案 横折钩
- DBox2s用户手册v2.0
- 在全县企业上市工作座谈会上的讲话
- 混合式学习研究
- 保护定值、故障分类及处理、维护
- 条干仪毛羽指标简介
- 会计从业资格考试之会计分录
- 莆田永辉超市选址分析报告
- 中国民航发展史复习题
- 房地产行业人力资源特点
- 《新进协力员工安全读本》
- 房地产开发企业有关会计处理
- 浅析英国推行绥靖政策的原因 开题报告
- 项目管理学(1)
- 苏教版四年级数学下册试卷第一单元《平移旋转和轴对称》