ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:365KB ,
资源ID:5892552      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-5892552.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(3120150901209夏霜 3 进程控制.doc)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

3120150901209夏霜 3 进程控制.doc

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营业执照举报