操作系统进程控制实验报告分析解析_第1页
操作系统进程控制实验报告分析解析_第2页
操作系统进程控制实验报告分析解析_第3页
操作系统进程控制实验报告分析解析_第4页
操作系统进程控制实验报告分析解析_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上操作系统实验报告实验题目:进程控制 专 业 计算机科学与技术 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机学院 日 期 2014年11月13日 教师评语教师签名: 年 月 日成绩评定备 注一、实验目的1.学习和了解进程控制的基本和常用的系统调用 fork  wait  sleep  exit  exec  等等2. 查看 /usr/src/include/sched.h中的task_struct 数据结构,并分析Linux 操作系统进程状态。

2、3.通过进程创建的应用实例,深刻理解进程创建的过程将以下例题输入运行,并分析运行结果 程序例题1 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) pid_t pid; int data=5; if(pid=fork()<0) printf("fork errorn"); exit(0); else if(pid=0) data-; printf("child's data is:%dn",data);

3、 exit(0); else printf("parent's data is:%dn",data); exit(0); 程序例题2 用fork创建一个子进程,由其调用execve启动shell命令ps查看系统当前的进程信息 #include <stdio.h> #include <sys/types.h> #include <unistd.h> main( )   pid_t pid;   char *path="/bin/ps"   char *a

4、rgv5= "ps","-a","-x",NULL; printf(“Run ps with execve by child process:n”);   if(pid=fork( )<0) printf(“fork error!”);   exit(0); else if (pid=0)   if(execve(path,argv,0)<0)         printf(“fork error!”);

5、      exit(0);    printf(“child is ok!n”); exit(0); wait( ); printf(“it is ok!n”); exit(0); 3.创建一个共享内存,实现一个生产者进程写共享内存,一个消费者进程读共享内存,并在写前读后输出写和读的内容。4.创建一个共享文件,实现一个写者进程写文件,2个读者在写者写后分别读出文件的内容,并给出读后评价。二、实验指导 Linux中与进程控制相关的几个主要系统调用 名/格式/参数功  能返回值的解释fork( )、vfork( )

6、创建一个字进程 对父进程:返回子进程号 对子进程:返回0 错误:返回-1 #include <unistd.h> execve(char *file,char *argv,char *envp) 用指定程序覆盖当前程序代码 正确:0 错误:-1 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *statloc) 等待进程终止 正确:子进程的ID 错误:-1 getpid( )、getppid( ) 获得进程号 #include <stdio.h> void exit(int

7、status) 进程正常结束 三、实验步骤(附程序原码)实验一:创建文件wang.c,编写C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父,子三进程并发进行,父亲进程执行时屏幕显示“parent”,儿子进程执行时屏幕显示“son”,女儿进程执行时屏幕显示“daugher”。程序如下:(进程一)#include<stdio.h>int main() int p1,p2,i; while(p1=fork()=-1); if(p1=0) for(i=0;i<4;i+) printf("daughter%dn",i); else while

8、(p2=fork()=-1); if(p2=0) for(i=0;i<4;i+) printf("son%dn",i); else for(i=0;i<4;i+) printf("parent%dn",i); (进程二)#include<stdio.h>int main() int pid; pid=fork(); switch(pid) case -1:printf("fork failn");exit(1); case 0:printf("subprocessn");exit(0); d

9、efault:wait(0);printf("completedn");exit(0); 实验二:编写程序,用fork创建两个子进程,再用系统调用signal让父进程捕捉键盘上传来的中断信号,捕捉到中断信号后,父进程用系统调用kill向两个子进程发出信号,子进程终止。父进程等待两个子进程终止后终止。程序代码如下#include<stdio.h>#include<signal.h>#include<unistd.h>void waiting(),stop();int wait_mark;int main() int p1,p2,stdout

10、; signal(SIGINT,stop); while(p1=fork()=-1); if(p1>0) while(p2=fork()=-1); if(p2>0) wait_mark=1; sleep(5); waiting(); kill(p1,16); kill(p2,17); wait(0); wait(0); printf("Parent process is killed!n"); exit(0); else wait_mark=1; signal(17,stop); waiting(); lockf(stdout,1,0); printf(&quo

11、t;Child process 2 is killed by parent!n"); lockf(stdout,0,0); exit(0); else wait_mark=1; signal(16,stop); waiting(); lockf(stdout,1,0); printf("Child process 1 is killed by parent!n"); lockf(stdout,0,0); exit(0); void waiting() while(wait_mark!=0); void stop() wait_mark=0; 四、运行结果及其结果分

12、析实验一:结果分析:0:在子进程中,pid变量保存的fork()返回值为0,表示当前进程是子进程。>0:在父进程中,pid变量保存的fork()返回值为子进程的pid值。-1:创建失败。实验二:结果分析:从键盘输入中断信号,父进程收到中断信号用系统调用kill向两个子进程发出信号,子进程收到信号后分别输出Child process 1 is killed by parent!,Child process 2 is killed by parent!结束进程并exit(0),父进程收到两个exit(0)后输出Parent process is killed!结束进程。五、思考题1、当首次调用新创建进程时,其入口在哪里?解:调用fork函数的下一条语句开始。2、可执行文件加载时进行了哪些处理?解:可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。3、什么是进程同步?wait( )是如

温馨提示

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

最新文档

评论

0/150

提交评论