操作系统实验一

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一进程调度设计

————操作系统实验一

一、实验目的

通过模拟进程调度算法的设计加深对进程管理基本原理的理解,深入了解批处理系统如何组织作业、管理进程和调度进程。

二、实验内容

1. 进程的创建

2. 进程的控制

三、实验步骤

1)熟悉进程的创建和控制

A.进程的创建

#include

main()

{

int p1,p2;

while((p1=fork())==-1); //直到子进程创建成功

if(p1==0) printf("b"); //当前运行的进程是子进程 p1=0

else //在父进程中p1的值为其创建成功的子进程的ID {

while((p2=fork())==-1); //直到子进程创建成功

if(p2==0) printf("c"); //当前运行的进程是子进程 p1=0 else //在父进程中p2的值为其创建成功的子进程的ID

{

printf("a");

}

}

printf("\n");

}

实验打印结果:b c a

关键在于在执行到fork()时,父子进程分道扬镳,fork()返回给子进程的是0或非0(标示子进程创建成功与否),返回给父进程的却是创建成功的子进程的ID 值。故在判断打印的时候就出现以上结果。

以下是fork()创建一个子进程,在父、子进程中显示出fork()的返回值以及父、子进程的唯一pid值的代码部分。

#include

main()

{

int p1;

while((p1=fork())==-1);

if(p1==0)

printf("I am the child process! My process ID is %d\tp1=%d\n",getpid(),p1);

else

{

printf("I am the father process! My process ID is %d\tp1=%d\n",getpid(),p1);

}

printf("\n");

}

B.进程的控制

#include

#include

#include

main()

{

int pid;

pid=fork();

switch(pid)

{

case -1: //子进程创建失败

printf("fork failed!\n");

exit(-1); //异常退出

case 0: //子进程创建成功

if(execl("/bin/ls","ls","-1","-r","--color",NULL)<0) //如果exec() 未能成功执行

{

printf("exec failed!\n");

exit(1); //异常退出

}

default:

wait(NULL); //父进程等待子进程执行完成

printf("ls completed!\n");

exit(0); //正常退出

}

}

相关文档
最新文档