操作系统实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); //正常退出
}
}