2022年操作系统上实验报告 .pdf
《2022年操作系统上实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统上实验报告 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验题目:进程管理及进程通信实验环境:虚拟机 Linux 操作系统实验目的:1.利用 Linux 提供的系统调用设计程序,加深对进程概念的理解。2.体会系统进程调度的方法和效果。3.了解进程之间的通信方式以及各种通信方式的使用。实验内容:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 13 页 -例程 1:利用 fork()创建子进程#include#include#include main()int i;if(fork()i=wait(0);/*父进程执行的程序段*/*等待子进程结束*/printf(It is parent process.n);printf(The chil
2、d process,ID number%d,is finished.n,i);elseprintf(It is child process.n);sleep(10);/*子进程执行的程序段*/exit(1);/*向父进程发出结束信号*/运行结果:思考:子进程是如何产生的?又是如何结束的?子进程被创建后它的运行环境是怎样建立的?答:子进程是通过函数fork()创建的,通过exit()函数自我结束的,子进程被创建后核心将为其分配一个进程表项和进程标识符,检查同时运行的进程数目,并且拷贝进程表项的数据,由子进程继承父进程的所有文件。例程 2:循环调用fork()创建多个子进程#include#inc
3、lude#includemain()int i,j;printf(“My pid is%d,my fathers pid is%dn”,getpid()名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 13 页 -,getppid();for(i=0;i3;i+)if(fork()=0)printf(“%d pid=%d ppid=%dn”,i,getpid(),getppid();else j=wait(0);Printf(“%d:The chile%d is finished.n”,getpid(),j);运行结果:思考:画出进程的家族树。子进程的运行环境是怎样建立的?反复运行
4、此程序看会有什么情况?解释一下。答:子进程的运行环境是由将其创建的父进程而建立的,反复运行程序会发现每个进程标识号在不断改变,这是因为同一时间有许多进程在被创建。2144021441214442144621443214422144521447名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 13 页 -例程 3:创建子进程并用execlp()系统调用执行程序的实验#include#includemain()int child_pid1,child_pid2,child_pid3;int pid,status;setbuf(stdout,NULL);child_pid1=fork()
5、;/*创建子进程1*/if(child_pid1=0)execlp(echo,echo,child process 1,(char*)0);/*子进程 1 启动其它程序*/perror(exec1 error.n);exit(1);child_pid2=fork();/*创建子进程2*/if(child_pid2=0)execlp(date,date,(char*)0);/*子进程 2 启动其它程序*/perror(exec2 error.n);exit(2);child_pid3=fork();/*创建子进程3*/if(child_pid3=0)execlp(ls,ls,(char*)0);
6、/*子进程 3 启动其它程序*/perror(exec3 error.n);exit(3);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 13 页 -puts(Parent process is waiting for chile process return!);while(pid=wait(&status)!=-1)/*等待子进程结束*/if(child_pid1=pid)/*若子进程1 结束*/printf(child process 1 terminated with status%dn,(status8);elseif(child_pid2=pid)/*若子进程 2
7、结束*/printf(child process 2 terminated with status%dn,(status8);else if(child_pid3=pid)/*若子进程3 结束*/printf(child process 3 terminated with status%dn,(status8);puts(All child processes terminated.);puts(Parent process terminated.);exit(0);运行结果:思考:子进程运行其他程序后,进程运行环境怎样变化的?反复运行此程序看会有什么情况?解释一下。答:子进程运行其他程序后,
8、这个进程就完全被新程序代替。由于并没有产生新进程所以进程标识号不改变,除此之外旧进程的其它信息,代码段,数据段,栈段等均被新程序的信息所代替。新程序从自己的main()函数开始运行。反复运行此程序发现结束的先后次序是不可预知的,每次运行结果都不一样。原因是当每个子进程运行其他程序时,他们的结束随着其他程序的结束而结束,所以结束的先后次序在改变。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 13 页 -例程 4:观察父、子进程对变量处理的影响#include#include#includeint globa=4;int main()pid_t pid;int vari=5;pri
9、ntf(before fork.n);if(pid=fork()0)printf(fork error.n);exit(0);elseif(pid=0)/*子进程执行*/globa+;vari-;printf(Child%d changed the vari and globa.n,getpid();else/*父进程执行*/wait(0);printf(Parent%d did not changed the vari and globa.n,getpid();printf(pid=%d,globa=%d,vari=%dn,getpid(),globa,vari);/*都执行*/exit(0
10、);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 13 页 -运行结果:思考:子进程被创建后,对父进程的运行环境有影响吗?解释一下。答:子进程被创建后,对父进程的运行环境无影响,因为当子进程在运行时,它有自己的代码段和数据段,这些都可以作修改,但是父进程的代码段和数据段是不会随着子进程数据段和代码段的改变而改变的。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 13 页 -例程 5:管道通信的实验#include#includemain()int i,r,j,k,l,p1,p2,fd2;char buf50,s50;pipe(fd);while(p1=fork()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统上实验报告 2022 操作系统 实验 报告
限制150内