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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

山大操作系统实验 1.doc

1、操作系统原理实验报告 实验一张咪 软件工程四班一、 实验目的 加深对于进程并发执行概念的理解。实践并发进/线程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进/线程创建与控制有关的系统调用的编程和调试技术。二、 实验要求编写一个多进程并发执行程序。父进程每隔3秒重复建立两个子进程,首先创建的让其执行ls命令,之后创建执行让其执行ps命令,并控制ps命令总在ls命令之前执行。三、实验软硬件环境实验环境均为Linux操作系统,开发工具为gcc和g+。四、实验思路调用fock

2、()创建子进程。创建键盘中断信号后,使用pause()可以暂停子进程执行,继续创建新的子进程。子进程并发执行子进程可以首先通过键盘中断信号唤醒子进程。通过exec()调用族装入一个新的执行程序。在建立子进程2并且唤醒子进程1后子进程sleep(seconds = 5)。这样就可以先执行ps后执行ls。最后就是父进程的结束,程序结束。五、实验模型 pid1=fork()pid1=0子进程1执行ps指令pid10父进程pid2=fork()pid10父进程每隔三秒重复建立两个子进程pid20错误六、调试排错1、首先遇到的问题是,对linux的操作不熟悉,不太明白makefile怎么使用,直接用了g

3、cc2、在创建多个子进程上遇到了问题,在fock()后又直接跟了一个fork(),这样创建的子进程是子进程的子进程,而不是父进程创建的第二个子进程。所以应该在else语句块后面,也就是主进程执行段继续创建。一般情况下,fork()按如下规则编程:main() pid_t pid; pid=fork(); if(pid0) / 建立子进程失败 printf(Create Process fail!n); exit(EXIT_FAILURE); if (pid = = 0) /子进程代码; /如果需要创建子进程,可以按该方法嵌套 else /父进程代码 /如果需要创建子进程,可以按该方法嵌套 3、

4、后来父进程与子进程无法重复建立,执行一次就结束了,又加了一个while循环实现重复建立,但无法退出,一直执行。又加了一个count计数变量,执行五次后停止。七、实验结果父进程首先创建了子进程a,子进程1暂停。父进程继续创建子进程b。子进程b唤醒了子进程a,子进程a进入sleep()。子进程2执行ps退出,子进程1执行ls。循环五次退出。八、代码#includepro.hintmain(intargc,char*argv)inti;intpid1,pid2;intstatus1,status2;char*args1=/bin/ls,-a,NULL;char*args2=/bin/ps,-a,NU

5、LL;signal(SIGINT,(sighandler_t)sigcat);int count=0;while(count5) if(pid1=fork()=0) pause(); printf(%dThisischild1runningn,getpid(); status1=execve(args10,args1,NULL); else pid2=fork(); if(pid2=0) waitpid(pid2,&status2,0); sleep(3); printf(%dFather:Child2finnishedn,getpid();count+; if(kill(pid1,SIGINT)=0) waitpid(pid1,&status1,0); printf(%dFather:Child1finished.n,getpid();return(EXIT_SUCCESS);#include#include#include#include#include#includetypedef void(*sighandler_t)(int);void sigcat()printf(Process continuen);

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


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

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

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