收藏 分享(赏)

3120150901209夏霜 3 进程控制.doc

上传人:HR专家 文档编号:5892552 上传时间:2019-03-20 格式: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页
点击查看更多>>
资源描述

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 Kil

3、led! 在上面的程序中增加语句 signal (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) ;实验报告2signal(SIGALRM, alarming) ;waiting() ;k

4、ill(p1, 16) ;kill(p2, 17) ;wait(0) ; wait(0) ;printf(“parent process is killed!n“) ;exit(0) ;elsewait_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) ; elsewait_mark=1;signal(16, stop);signal

5、(SIGINT,SIG_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; 实验报告3void stop()wait_mark=0; 相关操作界面和运行结果界面截图 不加入signal (SIGINT, SIG-IGN) 和signal

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

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

8、js;int fp42;srand(unsigned)time(NULL);for(i=0;i4;i+)for(j=0;j25000;j+)aij=(double)rand()/(double)RAND_MAX;gettimeofday(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,/ pr

9、intf(“sum%d=%fn“,i,sumi);exit(1);elseif(!read(fpi0,printf(“sum%d=%fn“,i,readBufi);实验报告6for(i=0;i4;i+)allsum+=readBufi;printf(“sum=%fn“,allsum);gettimeofday(end=js.tv_usec;printf(“time=%dn“,end-start);return 0;相关操作界面和运行结果界面截图 实验报告7四、实验小结(包括问题和解决方法、心得体会、意见与建议等)本次实验在编写程序时,主要是应掌握创建进程,以及对于进程各个操作。使用 fork()函数创建进程,fork 函数在父进程中调用一次,在父进程以及子进程中各返回一次,子进程中 fork 的返回值是 0,二父进程中 fork 的返回值则是子进程的id。一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用 fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报