3120150901209夏霜 3 进程控制.doc

上传人:小** 文档编号:86373649 上传时间:2019-03-19 格式:DOC 页数:8 大小:365KB
返回 下载 相关 举报
3120150901209夏霜 3 进程控制.doc_第1页
第1页 / 共8页
3120150901209夏霜 3 进程控制.doc_第2页
第2页 / 共8页
3120150901209夏霜 3 进程控制.doc_第3页
第3页 / 共8页
3120150901209夏霜 3 进程控制.doc_第4页
第4页 / 共8页
3120150901209夏霜 3 进程控制.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《3120150901209夏霜 3 进程控制.doc》由会员分享,可在线阅读,更多相关《3120150901209夏霜 3 进程控制.doc(8页珍藏版)》请在金锄头文库上搜索。

1、实验报告计算机与软件工程学院实 验 报 告( 2017 / 2018 学年 第 1 学期)课程名称操作系统实验 课程代码150901189实验时间2017.11.27指导单位软件工程系指导教师谭 平学生姓名 夏霜年 级2015级学 号3120150901209专 业计算机科学与技术实验名称进程控制 实验地点8321实验类型验证实验学时4 一、实验目的和要求1. 加深对进程概念的理解,进一步认识并发执行的实质2. 掌握Linux操作系统的进程创建和终止操作3. 利用Linux操作系统提供的信号量工具实现进程间的同步4. 掌握对共享内存的相关操作二、实验环境(实验设备)硬件: 微型计算机 软件:

2、Linux操作系统 三、 实验内容及过程1. 编写一段程序,实现进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 在上面的程序中增加语句sign

3、al (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。 解答:源代码#include #include #includevoid waiting(), stop(), alarming(); int wait_mark;void main() int p1, p2 ; if(p1=fork() ) if(p2=fork() ) wait_mark=1 ; signal(SIGINT, stop) ; signal(SIGALRM, alarming) ; waiting() ; kill(p1, 16) ; kill(p2,

4、 17) ; wait(0) ; wait(0) ; printf(parent process is killed!n) ; exit(0) ; else wait_mark=1; signal(17, stop); signal(SIGINT,SIG_IGN); while(wait_mark!=0) ; lockf(1, 1, 0) ; printf(children process2 is killed by parentn); lockf(1, 0, 0) ; exit(0) ; else wait_mark=1; signal(16, stop); signal(SIGINT,SI

5、G_IGN); while(wait_mark!=0) ; lockf(1, 1, 0) ; printf(children process1 is killed by parentn); lockf(1, 0, 0) ; exit(0) ; void waiting() sleep(5); if(wait_mark!=0) kill(getpid(),SIGALRM);void alarming() wait_mark=0; void stop() wait_mark=0; 相关操作界面和运行结果界面截图 不加入signal (SIGINT, SIG-IGN) 和signal (SIGQUI

6、T, SIG-IGN)运行结果加入signal (SIGINT, SIG-IGN)相关操作界面和运行结果界面截图 加入signal (SIGQUIT, SIG-IGN)原因:signal(SIGINT,SIG_IGN)是忽略键入信号,signal (SIGQUIT, SIG-IGN)是忽略中断信号。在子进程中加入signal(SIGINT,SIG_IGN),子进程会忽略中断信号,在子进程中加入signal (SIGQUIT, SIG-IGN),相应的中断信号就被忽略,只有父进程被中断2.求100000个浮点数(精确小数点右4位)的平均值(和、最大值、最小值)。要求: 随机生成100000个浮点

7、数(父进程); 创建4个子进程,分别求25000个浮点数之和; 父进程完成100000个浮点数之和并打印结果; 统计顺序计算的时间和多个进程采用多道程序设计完成计算的时间。 解答:源代码#include #include #include #include #include static double allsum=0.0;int main() int i,j; double a425000; double sum4=0.0; double readBuf4; time_t start,end; pid_t pid; struct timeval js; int fp42; srand(uns

8、igned)time(NULL); for(i=0;i4;i+) for(j=0;j25000;j+) aij=(double)rand()/(double)RAND_MAX; gettimeofday(&js,NULL); start=js.tv_usec; for(i=0;i4;i+) if(pipe(fpi)0) printf(pipe error); exit(1); pid=fork(); if(pid0) printf(fork error!); exit(1); else if(pid=0) for(j=0;j25000;j+) sumi+=aij; write(fpi1,&su

9、mi,sizeof(double); / printf(sum%d=%fn,i,sumi); exit(1); else if(!read(fpi0,&readBufi,sizeof(double) exit(1); printf(sum%d=%fn,i,readBufi); for(i=0;i4;i+) allsum+=readBufi; printf(sum=%fn,allsum); gettimeofday(&js,NULL); end=js.tv_usec; printf(time=%dn,end-start); return 0;相关操作界面和运行结果界面截图 四、实验小结(包括问题

10、和解决方法、心得体会、意见与建议等)本次实验在编写程序时,主要是应掌握创建进程,以及对于进程各个操作。使用fork()函数创建进程,fork函数在父进程中调用一次,在父进程以及子进程中各返回一次,子进程中fork的返回值是0,二父进程中fork的返回值则是子进程的id。一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。7

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

当前位置:首页 > 商业/管理/HR > 管理学资料

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