实验1进程创建
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
班级:网络本111学号:15姓名:江理成日期:2013.3.26
实验题目
实现进程的创建控制过程。
2.实验要求
以linux操作系统为例,说明进程控制的实现,学习如何利用系统调用命令进行编程。
3.实验目的
通过模拟进程调度算法,了解进程调度的过程并比较不同的调度算法的区别。
实验原理分析
1.Linux系统中,除初始化进程外,其它进程都是通过fork()系统调用建立的。使用fork()的进程为父进程,通过fork()创建的新进程为子进程。使用fork()系统调用后,对父进程返回子进程的进程号,对子进程返回零。
scanf("%c",&q);
n=n+2;
}
else
{
printf("创建第%d个PCB.\n",n);
p2=(struct pcb *)malloc(sizeof(struct pcb));
printf("输入进程标示符:\n");
scanf("%s",p2->name);
printf("请输入进程占用CPU时间:\n");
表1PCB结构
进程标识符
char name
进程占用CPU时间
int cputime
进程优先数
int prio
完成进程还需要的时间
int needtime
链指针
struct pcb *next
5.实验代码清单
#include<stdio.h>
#include<malloc.h>
struct pcb
{
char name[20];
scanf("%d",&p2->cputime);
printf("进程优先数:\n");
scanf("%d",&p2->prio);
printf("完成进程还需要的时间:\n");
scanf("%d",&p2->needtime);
p2->next=NULL;
p->next=p2;
p=p->next;
n=n+1;
getchar();
printf("是否继续创建PCB.\n");
scanf("%c",&q);
}
}Байду номын сангаас
return(p1);
}
void main()
{
struct pcb *p;
p=NULL;
p=creat(p);
}
6.实验结果
图1实验运行图
int cputime;
int prio;
int needtime;
struct pcb *next;
};
struct pcb *creat(struct pcb *p)
{
char q='y';
int n=0;
struct pcb *p1,*p2;
p1=p;
while(p!=NULL)
{
p=p->next;
scanf("%d",&p->cputime);
printf("进程优先数:\n");
scanf("%d",&p->prio);
printf("完成进程还需要的时间:\n");
scanf("%d",&p->needtime);
p->next=NULL;
getchar();
printf("是否继续创建PCB.\n");
n++;
}
while((q=='y')||(q=='Y'))
{
if(n==0)
{
printf("创建第一个PCB.\n");
p=(struct pcb *)malloc(sizeof(struct pcb));
printf("输入进程标示符:\n");
scanf("%s",p->name);
printf("请输入进程占用CPU时间:\n");
利用fork()系统调用创建进程的程序如下:
void main()
{
int i;
if(fork()==0)
printf(“this is the child process!\n”);
else
printf(“this is the parent process!\n”);
}
2.系统中的进程可以用进程控制块PCB来表示,要求创建5个进程,并入就绪队列,其PCB的结构定义如表1所示:(注:该队列要在实验二进程调度中使用)
班级:网络本111学号:15姓名:江理成日期:2013.3.26
实验题目
实现进程的创建控制过程。
2.实验要求
以linux操作系统为例,说明进程控制的实现,学习如何利用系统调用命令进行编程。
3.实验目的
通过模拟进程调度算法,了解进程调度的过程并比较不同的调度算法的区别。
实验原理分析
1.Linux系统中,除初始化进程外,其它进程都是通过fork()系统调用建立的。使用fork()的进程为父进程,通过fork()创建的新进程为子进程。使用fork()系统调用后,对父进程返回子进程的进程号,对子进程返回零。
scanf("%c",&q);
n=n+2;
}
else
{
printf("创建第%d个PCB.\n",n);
p2=(struct pcb *)malloc(sizeof(struct pcb));
printf("输入进程标示符:\n");
scanf("%s",p2->name);
printf("请输入进程占用CPU时间:\n");
表1PCB结构
进程标识符
char name
进程占用CPU时间
int cputime
进程优先数
int prio
完成进程还需要的时间
int needtime
链指针
struct pcb *next
5.实验代码清单
#include<stdio.h>
#include<malloc.h>
struct pcb
{
char name[20];
scanf("%d",&p2->cputime);
printf("进程优先数:\n");
scanf("%d",&p2->prio);
printf("完成进程还需要的时间:\n");
scanf("%d",&p2->needtime);
p2->next=NULL;
p->next=p2;
p=p->next;
n=n+1;
getchar();
printf("是否继续创建PCB.\n");
scanf("%c",&q);
}
}Байду номын сангаас
return(p1);
}
void main()
{
struct pcb *p;
p=NULL;
p=creat(p);
}
6.实验结果
图1实验运行图
int cputime;
int prio;
int needtime;
struct pcb *next;
};
struct pcb *creat(struct pcb *p)
{
char q='y';
int n=0;
struct pcb *p1,*p2;
p1=p;
while(p!=NULL)
{
p=p->next;
scanf("%d",&p->cputime);
printf("进程优先数:\n");
scanf("%d",&p->prio);
printf("完成进程还需要的时间:\n");
scanf("%d",&p->needtime);
p->next=NULL;
getchar();
printf("是否继续创建PCB.\n");
n++;
}
while((q=='y')||(q=='Y'))
{
if(n==0)
{
printf("创建第一个PCB.\n");
p=(struct pcb *)malloc(sizeof(struct pcb));
printf("输入进程标示符:\n");
scanf("%s",p->name);
printf("请输入进程占用CPU时间:\n");
利用fork()系统调用创建进程的程序如下:
void main()
{
int i;
if(fork()==0)
printf(“this is the child process!\n”);
else
printf(“this is the parent process!\n”);
}
2.系统中的进程可以用进程控制块PCB来表示,要求创建5个进程,并入就绪队列,其PCB的结构定义如表1所示:(注:该队列要在实验二进程调度中使用)