山大操作系统实验_第1页
山大操作系统实验_第2页
山大操作系统实验_第3页
山大操作系统实验_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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指令pid1>0父进程pid2=fork()pid1<0错误pid2=0子进程b执行lspid2>0父进程每隔三秒重复建立两个子进程pid2<0错误六、调试排错1、首先遇到的问题

3、是,对linux的操作不熟悉,不太明白makefile怎么使用,直接用了gcc2、在创建多个子进程上遇到了问题,在fock()后又直接跟了一个fork(),这样创建的子进程是子进程的子进程,而不是父进程创建的第二个子进程。所以应该在else语句块后面,也就是主进程执行段继续创建。一般情况下,fork()按如下规则编程:main() pid_t pid; pid=fork(); if(pid<0) / 建立子进程失败 printf("Create Process fail!n"); exit(EXIT_FAILURE); if (pid = = 0) /子进程代码; /

4、如果需要创建子进程,可以按该方法嵌套 else /父进程代码 /如果需要创建子进程,可以按该方法嵌套 3、后来父进程与子进程无法重复建立,执行一次就结束了,又加了一个while循环实现重复建立,但无法退出,一直执行。又加了一个count计数变量,执行五次后停止。七、实验结果父进程首先创建了子进程a,子进程1暂停。父进程继续创建子进程b。子进程b唤醒了子进程a,子进程a进入sleep()。子进程2执行ps退出,子进程1执行ls。循环五次退出。八、代码#include"pro.h"int main(int argc,char *argv)int&#

5、160;i;int pid1,pid2;int status1,status2;char *args1="/bin/ls","-a",NULL;char *args2="/bin/ps","-a",NULL;signal(SIGINT,(sighandler_t)sigcat);int count=0;while(count<5) if(pid1=fork()=0) pause(); printf("%d This is chil

6、d1 runningn",getpid(); status1=execve(args10,args1,NULL); else pid2=fork(); if(pid2<0) printf("Create process pid2 failn"); exit(EXIT_FAILURE); else if(pid2=0) printf("%d This is child2 runningn",getpid(); status2=execve(args20

7、,args2,NULL);else printf("%dFather:This is father running n",getpid(); if(kill(pid2,SIGINT)>=0) waitpid(pid2,&status2,0); sleep(3); printf("%d Father: Child2 finnishedn",getpid();count+; if(kill(pid1,SIGINT)>=0) waitpid(pid1,&status1,0); printf("%d Father: Child1 finished.n",getpid();return (EXIT_SUCCESS); #include<sys/types.h>#include<wait.h>#include<unistd.h>#include<signal.h>#include&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论