操作系统实验处理机调度C语言实现
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
20
积分
还剩页未读,继续阅读
关 键 词:操作系统
实验
处理机
调度
语言
实现
资源描述:
#include#include#include #include#define N 20
#define MAX 100
typedef struct PCB //pcb进程控制块定义
{
int num[N]; //进程序号
char name[10]; //进程名
char state; //进程状态
int tijiaotime; //进程到达时间
int runtime; //进程开始时间
int finishtime; //进程结束时间
int needtime; //服务时间
int pro;//进程优先级
struct PCB *next; //链接指针 指向下个作业的
}pcb;
struct PCB *head_input;
struct PCB *head_run;
struct PCB *head_run_pre;
unsigned long current; //记录系统当前时间的变量
int time=10000,n; //计时器
pcb *head=NULL,*p,*q;
void getInfo() //创建进程
{
int num;
printf("\n请输入要建立的进程个数:");
scanf("%d",&n);
for(num=0;numnum,&p->name,&p->tijiaotime,&p->needtime);
if(p->tijiaotime < time) time=p->tijiaotime;
q->next=p;
p->runtime=0;
p->finishtime=0;
p->next=NULL;
p->state=W;
q=p;
}
}
// *********************1.先来先服务调度算法*******************************
void run_fcfo(pcb *p1)//定义先来先到服务的算法
{
time = p1->tijiaotime > time? p1->tijiaotime:time;
p1->runtime=time;
printf("\n现在时间是%d,开始运行进程%s\n",time,p1->name);
time+=p1->needtime;
p1->state=F;
p1->finishtime=time;
printf("进程名 开始时间 所需时间 结束时间\n");
printf("%s %d %d %d ",p1->name,p1->runtime,p1->needtime,p1->finishtime);
}
void fcfo()//定义运行进程函数
{
int i,j,t;
for(j=0;jtijiaotimestate==W)
{
t=p->tijiaotime;
q=p; //标记当前未完成的进程
}
p=p->next;
}
run_fcfo(q);
}
}
// ************************2.优先级调度服务算法************************************
int readydata()
{ //建立就绪队列
if(head_input->next==NULL)
{
return 0;
}
struct PCB *p1=head_input->next,*pmax,*p2;
int maxpro=0xffff;
pmax=p1;
p2=head_input;
while(p1!=NULL)
{
if(p1->propro;
head_run_pre=p2;
pmax=p1;
}
p2=p1;
p1=p1->next;
}
head_run=pmax;
head_run_pre->next=head_run->next;
return 1;
}
void runprocess() //运行进程函数
{
head_run->runtime-=10;
head_run->pro++;
struct PCB *p1,*p2;
printf("时间片的大小 %d",current);
current+=10;
printf(" %s 开始\n",head_run->name);
printf("时间片的大小 %d",current);
printf(" %s 结束\n",head_run->name);
if(head_run->runtime<=0)
{//判断进程是否运行结束
}
else
{
p1=head_input;
p2=head_input->next;
p1->next=head_run;
head_run->next=p2;
}
}
int readyprocess()
{
while(1)
{
if(readydata()==0)
return 0;
else runprocess();
}
}
void Init()
{
head_input=new PCB;
head_input->next=NULL;
current=0;
int numpro;
printf("请重新输入要建立的进程个数:");
scanf("%d",&numpro);
printf("请依次输入 进程名 运行时间 优先级\n");
for(int i=0;iname);
scanf("%d",&p1->runtime);
scanf("%d",&p1->pro);
p1->state=C;
p1->next=NULL;
struct PCB *p2=head_input->next;
head_input->next=p1;
p1->next=p2;
}
}
// ************************3.时间片轮转调度服务算法************************************
void shijianpian()
{int b,i,X,t,k;
int a[MAX];//存放进程的剩余时间
int cnt[MAX];//存放进程调度次数
printf("请输入进程数:");
scanf("%d",&X);
printf("\n请输入时间片t大小:");
scanf("%d",&t);
printf("\n请依次输入各个进程的服务时间");
for(i=0;i=t)
{
a[i]-=t;
b+=t;
cnt[i]=cnt[i]+1;
printf("\n\t%d\t\t%d\t\t%d\t\t%d",i+1,cnt[i],b,a[i]);
}
else
{
b=b+a[i];
cnt[i]=cnt[i]+1;
a[i]=0;
printf("\n\t%d\t\t%d\t\t%d\t\t%d",i+1,cnt[i],b,a[i]);
}
else continue;
}
for(i=0;i=X)
k=0;
}
}
void main()
{
printf(" *******************************");
printf("\n 1. 按先来先到服务调度的算法模拟\n");
printf(" *******************************");
getInfo();
fcfo();
printf("\n *******************************");
printf("\n 2. 按优先级调度的算法模拟\n");
printf("\n *******************************\n");
Init();
readyprocess();
printf("\n *******************************");
printf("\n 3. 按时间片轮转调度的算法模拟\n");
printf(" *******************************\n");
shijianpian();
printf(" \n");
}
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:操作系统实验处理机调度C语言实现
链接地址:https://www.renrendoc.com/p-79168893.html