操作系统进程实验报告

上传人:汽*** 文档编号:470017486 上传时间:2023-10-03 格式:DOCX 页数:10 大小:23.30KB
返回 下载 相关 举报
操作系统进程实验报告_第1页
第1页 / 共10页
操作系统进程实验报告_第2页
第2页 / 共10页
操作系统进程实验报告_第3页
第3页 / 共10页
操作系统进程实验报告_第4页
第4页 / 共10页
操作系统进程实验报告_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《操作系统进程实验报告》由会员分享,可在线阅读,更多相关《操作系统进程实验报告(10页珍藏版)》请在金锄头文库上搜索。

1、武汉工程大学实验报告专业班级:姓名:学号:课程名称:操作系统实验成绩:指导教师:实验名称:进程控制与进程间通信一、实验目的:1、掌握进程的概念,明确进程和程序的区别。2、认识和了解并发执行的实质。3、了解什么是信号。4、熟悉LINUX系统中进程之间软中断通信的基本原理。二、实验内容:1、进程的创建编写一段程序,使用系统调用fork()创建两个子进程,在系统中有一个父进程和两个子 进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b” 和“c”。试观察记录屏幕上的显示结果,并分析原因。参考程序)# includemainO int pl, p2;while(pl

2、=fork 0)= = -1);if(pl= =0)putchar( b);else while (p2=fork0) = =T);if(p2=二0)putchar( c);elseputchar( a);)2、修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上 出现的现象,并分析其原因。参考程序)# includemainO int pl, p2, i;while(pl=fork 0)= = -1);if (pl二二0) for(i=0;i500;i+) printf ( 4child%dnn , i); else while(p2=fork0)= =-l); I

3、f(p2= 0)for(i=0;i500;i+) printf ( uson%dnM , i); else for(i=0;i500;i+) printf( udaughter%dnM , i); ) ) 3、编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal。让父进 程 捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill() 向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: Child process 1 is killed by parent! Child process 2 is killed by p

4、arent! 父进程等待两个子进程终止后,输出以下信息后终止: Parent process is killed! 参考程序 #include #include #include #include #include int wait_mark; void waitingO, stop0 ; void mainO int pl, p2; signal(SIGINT, stop); while(pl=fork0) =-l); if(pl0)/*在父进程中*/ while(p2=fork0) =-l); If(p20)/*在父进程中*/ wait_mark=l; waiting (0); kill

5、(pl, 10); kill(p2, 12); wait(); wait(); printf (parent process is killed!n,?); exit(0); else/*在子进程2中*/wait_mark=l;signal(12, stop);waiting 0;lockfd, 1,0);printf(child process 2 is killed by parent!n);lockf (1,0,0);exit(0);/*在子进程1中*/signal(10, stop);waitingO ;lockf (1, 1, 0);printf(child process 1 is

6、 killed by parent!);lockf (1,0, 0);exit(0);void waitingOwhile(wait-markl=O);void stopOwait.mark=O;三、实验要求运行程序并分析结果。四、实验结果及分析第一题:代码#12345678910111213141516#includemain()(int pl,p2;while(pl=fork()=-l);if (p 1=0) putchar( ;else (while(p2=fork() )=-l);if(p2=0)putchar(c);elseputchar(a1);)运行结果abootdulletch

7、plost+Toundbindevduli.chomelibmediaroot(aiocalhost /# gcc duli.c -o dull rootlocalhost /# vi duli.c rootlocalhost /# ./duli bcarootlocalhost /# ./duli bcaroot(91ocalhost /# ./duli bcajrootlocalhost /# vi duli.c root0localhost /# |mnt procopt rootsbinselinuxvarsys usr分析:以此类推然后再输出“首先判断子进程是否创建好,如果创建好则返

8、回0,首先输出b,所以最后结果为bca。第二题代码1 #include2 main()3845678910111213141516171819 Qint plfp2fi;while(pl=fork() )=-1);if(pl=O)for(i=0;i500;i+)printf (,lchild%dn,1 r i);else (while(p2=fork() )=-l);if(p2=0)for(i=6;i500;i+) print*(son%dn”,i);elsefor(i=6;i500;i+)printf (daughter?odn,1 r i); )dierti.c11 19Lf 282C运行

9、结果19,1全部son490 son491 son492 son493 son494SOO495 son496 son497 son498 son499 daughterO daughterl daughter2 daughters daughter4 daughters daughter6 daughter7 daughters daughter9 daughterl daughterll daughterl2 daughterl3分析:首先判断子进程是否判断好。然后进入一个for循环语句,1的值从0 一直到499依次输出。下面的结果依次类推。#1234567890123456789 012

10、3456789 0123456789第三题 代码:mcLude#include#include#include#includeint waitjnark;void waiting()rstop(); int mainO (int plfp2;signal(SIG工NT,stop);while(pl=fork()=-l);if(pl0) (while(p2=fork()=-1);if(p20) (wait_mark=l;waiting(O);kiU(plr 10);kiU(p2r12);wait(0);wait(0);printf (parent process is kiHed!nH);)el

11、se (wait_mark=l;signal(12rstop);waiting();lockf(1,1,0);printf(Mchild process 2 is killed by parent!nM); lockf(1,0,0);) ) else (wait mark=l;运行结果:disanti.c:25:警告;隐1式声明与内建函数exit不兼容 disanti.c:35:警告:源式声明与内建函数exit不兼容 disanti.c:46:警告:隐式声明与内建函数exit不兼容 root(alocalhost /# vi disanti.crootlocalhost /j# gcc dis

12、anti.c -o disanti disanti.c:在函数main中:disanti.c:25:警告;隐1式声明与内建函数exit不兼容 disanti.c:35:警告:源式声明与内建函数exit不兼容 disanti.c:46:警告:隐式声明与内建函数exit不兼容 root(alocalhost /# vi disanti.crootlocalhost /j# gcc disanti.c -o disanti disanti.c:在函数main中:disanti.c:34:警告;隐1式声明与内建函数exit不兼容 disanti.c:45:警告:源式声明与内建函数exit不兼容root

13、(aiocalhost root(alocalhost rootlocalhost ACchild process/# vi disanti.c/# gcc disanti.c -o disanti /# ./disanti2 is killed by parent!child process 1 is killed by parent! parent process is killed!rootlocalhost /#r rcc十d nr-al hnc f- / 1 什分析: 使用系统调用fork()创建两个子进程,再用系统调用signal ()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill ()向两个子进程发出信号,子进程捕捉到信号后,最后输出结果。【思考题】1、系统是怎样创建进程的?答:linux系统创建进程都是用fork。系统调用创建子进程由fork。系统调用创建的新 进程被称为子进程。该函数被调用一次,但返回两次。如果fork。进程调用成功,两次返 回的区别是子进

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号