




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验报告实验一:熟悉Linux命令一、 实验目的熟悉Linux系统,掌握Linux系统的登入、退出等操作;熟悉Linux命令及进程管理;学会使用Linux下C语言编程的基本知识;二、 实验内容1、Linux基本操作2、文件与目录操作3、进程查看及在线帮助4、全屏幕文本编辑器Vi的熟悉5、Linux下C语言编程基础知识三、 代码及运行结果分析1、Linux基本操作,Linux系统的登入1.文件与目录的基本操作显示文件目录命令ls改变当前目录命令cd 建立子目录mkdir 删除子目录命令rmdir 删除文件命令rm文件改名命令mv文件复制命令cp 2、进程查看命令进程查看who命令ps命令top命令4、在线帮助联机帮助man命令联机帮助help命令whereis命令查看ls命令所在位置5、全屏幕文本编辑器Vi及Linux下C语言基础编程1)e06620208localhost e06620208$ vi sj.c#includeint main()printf(helloworld);return 0;:sj.c New 6L, 65C writtene06620208localhost e06620208$ gcc sj.c -o sje06620208localhost e06620208$ ./sjhelloworlde06620208localhost e06620208$2)e06620208localhost e06620208$ vi sjj.c#includemain() printf(The current process ID is %dn,getpid();sjj.c New 5L, 83C writtene06620208localhost e06620208$ gcc sjj.c -o sjje06620208localhost e06620208$ ./sjjThe current process ID is 24189e06620208localhost e06620208$ vi 1.c#include#includemain()pid_t pid;pid=fork();if(pid0)printf(error in fork!);else if(pid=0)printf(I am the child process, my process ID is %dn,getpid();elseprintf(I am the parent process, my process ID is %d %dn,getpid(),pid);1.c New 17L, 290C writtene06620208localhost e06620208$ gcc 1.c -o 11.c:10:24: warning: multi-line string literals are deprecated1.c:14:24: warning: multi-line string literals are deprecatede06620208localhost e06620208$ ./1I am the child process, my process ID is 23906I am the parent process, my process ID is 2390523906分析:fork被调用一次,能够返回两次,它可能有三种不同的返回值:1.在父进程中,fork返回新创建子进程的进程ID; 2.在子进程中,fork返回0;3.如果出现错误,fork返回一个负值;pid=fork();当pid0时,说明出现问题;当pid=0时,此时是子进程,返回的是0;否则,此时进行的是父进程,返回的是新创建的子进程的ID值。3)e06620208localhost e06620208$ vi jj.c#includemain()printf(this process will exit!n);exit(0);printf(never be displayed!n); jj.c New 7L, 114C writtene06620208localhost e06620208$ gcc jj.c -o jje06620208localhost e06620208$ ./jjthis process will exit!分析:程序运行到exit(0);时将退出printf();语句不执行,程序最终输出this process will exit!4)e06620208localhost e06620208$ vi jjj.c#include #include main()pid_t pid;pid=fork();if(pid0)printf(error occurred!n);else if(pid=0) exit(0);elsesleep(10);wait(NULL);jjj.c New 14L, 189C writtene06620208localhost e06620208$ gcc jjj.c -o jjje06620208localhost e06620208$ ./jjj &1 24906e06620208localhost e06620208$ vi jjje.c#include #include #include #include main()pid_t pc,pr;pc=fork();if(pc0) printf(error ocurred!n);else if(pc=0)printf(This is child process with pid of %dn,getpid();sleep(10);elsepr=wait(NULL);printf(I catched a child process with pid of %dn,pr);exit(0); e.c New 21L, 366C written1+ exit 75 ./jjje06620208localhost e06620208$ gcc e.c -o ee06620208localhost e06620208$ ./eThis is child process with pid of 25120I catched a child process with pid of 25120实验二:进程管理一、实验目的加深对进程概念的理解,明确进程和程序的区别;进一步认识并发执行的实质;分析进程争用资源的现象,学习解决进程互斥的方法。 二、实验内容1、运行以下附录部分中给出的程序,查看自己运行的结果,并进行分析 2、编写程序,要求见附录部分三、代码及运行结果分析1)新建文件s1.c,并输入程序e06620208localhost e06620208$ vi s1.c#include stdio.hmain()int i,j,k;if (i=fork()j=wait();printf(Parent Process!n);printf(i=%d,j=%d,k=%dn,i,j);elsek=getpid();printf(Child Process!n);printf(i=%d,k=%dnn,i,k);进程号s1.c New 14L, 208C writtene06620208localhost e06620208$ gcc s1.c -o s1i=252252522525e06620208localhost e06620208$ ./s1Child Process!i=0,k=25225i=025225Parent Process!i=25225,j=25225,k=134513639分析:程序1运行后,i为0,程序执行else语句,k=0,输出两个语句中的内容,i=25225,执行if语句中内容,程序输出父进程的ID等,程序执行的进程树如右所示:2)e06620208localhost e06620208$ vi s2.c#includemain()int p1,p2;while(p1=fork()=-1); if(p1=0) printf(b.My process ID is %d,getpid();else while(p2=fork()=-1); if(p2=0) printf(c.My process ID is %d,getpid();else printf(a.My process ID is %d,getpid();s2.c New 15L, 279C writtene06620208localhost e06620208$ gcc s2.c -o s2e06620208localhost e06620208$ ./s2b.My process ID is 25425c.My process ID is 25426a.My process ID is 25424e06620207localhost e06620208$分析:程序2运行,满足p1=0,输出父进程ID,p1=fork(),p1值发生改变,else条件满足,之后再判断p2的值同样输出子进程的ID,最后输出下级子进程的ID,运行结果如上。程序执行后其进程树如下:p1=25425,p2=25426p1=25425,p2=0p1=0,p2=02542625425254243)e06620208localhost e06620208$ vi s3.c#includemain()int m,n,k;m=fork();printf(PID:%dt,getpid();printf(The return value of fork():%dtt,m);printf(hen);n=fork();printf(PID:%dt,getpid();printf(The return value of fork():%dtt,n);printf(han);k=fork();printf(PID:%dt,getpid();printf(The return value of fork():%dtt,k);printf(hon);s3.c New 17L, 347C writtene06620208localhost e06620208$ gcc s3.c -o s3e06620208localhost e06620208$ ./s3PID:25580 The return value of fork():0 hePID:25581 The return value of fork():0 haPID:25582 The return value of fork():0 hoPID:25581 The return value of fork():25582 hoPID:25580 The return value of fork():25581 haPID:25579 The return value of fork():25580 hePID:25584 The return value of fork():0 haPID:25579 The return value of fork():25584 haPID:25586 The return value of fork():0 hoPID:25579 The return value of fork():25586 hoe06620208localhost e06620208$ PID:25583 The return value of fork():0 hoPID:25580 The return value of fork():25583 hoPID:25585 The return value of fork():0 hoPID:25584 The return value of fork():25585 ho分析:产生进程树如图所示:m=25580,n=25581,k=2558225579k=0m=0,n=25584,k=25585255822558025581n=0,k=25583n=0,k=25586255811255822558225582k=0k=0k=04)e06620208localhost e06620208$ vi s4.c#includemain()int p1,p2,i;while(p1=fork()=-1);if(p1=0)for(i=0;i10;i+)printf(son%dn,i);elsewhile(p2=fork()=-1);if(p2=0)for(i=0;i10;i+)printf(daughter%dn,i);elsefor(i=0;i10;i+)printf(parent%dn,i);s4.c New 19L, 250C writtene06620208localhost e06620208$ gcc s4.c -o s4e06620208localhost e06620208$ ./s4son0son1son2son3son4son5son6son7son8son9son10daughter0daughter1daughter2daughter3daughter4daughter5daughter6daughter7daughter8daughter9daughter10parent0parent1parent2parent3parent4parent5parent6parent7parent8parent9parent10分析:运行结果如上所示。2、编写程序,程序运行时,系统中存在要求的进程树结构e06620208localhost e06620208$ vi s5.c#includemain()int m,n,k;m=fork();printf(PID:%dt,getpid();printf(The return value of fork():%dtt,m);printf(hen);n=fork();printf(PID:%dt,getpid();printf(The return value of fork():%dtt,n);printf(han);k=fork();if(m0&n0)printf(PID:%dt,getpid();printf(The return value of fork():%dtt,k);printf(hon);s5.c New 19L, 363C writtene06620208localhost e06620208$ gcc s5.c -o s5e06620208localhost e06620208$ ./s5PID:25979 The return value of fork():0 hePID:25978 The return value of fork():25979 hePID:25981 The return value of fork():0 haPID:25978 The return value of fork():25981 haPID:25983 The return value of fork():0 hoPID:25978 The return value of fork():25983 hoe06620208localhost e06620208$ PID:25980 The return value of fork():0 haPID:25979 The return value of fork():25980 ha分析:设置if(m0&n0)2、对以上程序4进行修改,使得修改以后的程序在运行过程中三个进程不会被
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川达州山体喷浆施工方案
- 变压器现场吊芯施工方案
- 重庆地铁5号线施工方案
- 《大数据技术导论》-教学大纲
- 高埗写字楼杀虫施工方案
- 铁制容器防腐措施方案
- 八下南充数学试卷
- 太阳能发电安装 施工方案
- 熔盐炉拼接炉拱施工方案
- 黑龙江城镇亮化施工方案
- 2025年全国国家版图知识竞赛题库及答案(中小学组)
- 《红岩》中考试题(截至2024年)
- 2024年河南省公务员考试《行测》真题及答案解析
- 2024年国家危险化学品生产单位安全管理人员考试题库(含答案)
- 钒电池项目财务数据分析(范文模板)
- 电晕水测试液配方
- 日处理300t鲜奶的脱脂奶粉生产车间
- 工业锅炉水处理系统调试报告
- 秘书处职能手册(完整版)74页
- 【原创】幼儿的愤怒情绪管理个案观察分析
- 外科手术缝线分类
评论
0/150
提交评论