进程调度.docx

上传人:b****1 文档编号:2414944 上传时间:2022-10-29 格式:DOCX 页数:16 大小:187.58KB
下载 相关 举报
进程调度.docx_第1页
第1页 / 共16页
进程调度.docx_第2页
第2页 / 共16页
进程调度.docx_第3页
第3页 / 共16页
进程调度.docx_第4页
第4页 / 共16页
进程调度.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

进程调度.docx

《进程调度.docx》由会员分享,可在线阅读,更多相关《进程调度.docx(16页珍藏版)》请在冰豆网上搜索。

进程调度.docx

进程调度

操作系统实验报告

姓名

学号

日期

2013.04.24

实验室

指导教师

设备编号

实验题目

进程调度算法

一、实验目的

1.了解计算机操作系统的一些有关进程调度等方面的知识。

2.掌握利用简单的数据结构,模拟操作系统中的进程调度。

二.实验内容

要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由进程调度程序完成的。

常用的有优先级调度算法、先来先服务算法、时间片轮转算法。

三、源代码及实验结果

1.设计思想

对于先到先服务算法,只需要给定每个进程的进程号,然后依次顺序执行就可以了。

对于优先度调度算法,需要先判断优先度的大小,优先度最大的先执行,进程运行完毕以后,按照优先数的改变的原则进行改变,然后继续判断所有的优先数的大小,依旧是优先数最大的先执行,直到执行完毕。

2.源代码

#include

#include

#include

#include

#include

typedefstructPROC

{

intpid;//进程标志符

intpri;//进程优先级

intcputime;//cpu时间统计

intalltime;//运行所需时间

intstate;//进程状态

}PROC;

//进程控制块结构

typedefstructNode

{

PROCinfo;//进程控制块信息

structNode*next;//下一个结点指针

}Node;//链表结点结构

typedefNode*LinkList;

//初始化有序链表,返回一个链表的头结点

Node*InitSortedList()

{

Node*head=(Node*)malloc(sizeof(Node));

head->next=NULL;

returnhead;

}

voidInsertSortedList(LinkListL,PROCProc)

{

Node*pre=L;

Node*p=pre->next;

Node*NewProc=(Node*)malloc(sizeof(Node));

NewProc->info=Proc;

while(p!

=NULL&&Proc.pri<=(p->info).pri)

{//寻找合适的插入点

pre=p;

p=p->next;

}

if(p==NULL)

{

pre->next=NewProc;

NewProc->next=NULL;

}

else

{

NewProc->next=p;

pre->next=NewProc;

}

}

//摘取有序链表的第一个结点(这个结点从链表中移出)

PROC*GetHeadElement(LinkListL)

{

PROC*p;

if(L->next==NULL)

{

returnNULL;

}

else

{

p=&((L->next)->info);

L->next=(L->next)->next;

returnp;

}

}

//打印有序链表内容

voidPrintSortedList(LinkListL)

{

Node*p=L->next;

if(p==NULL)

{

printf("\n这个队列没节点!

");

}

else

{

printf("\n现实现在的队列:

");

while(p!

=NULL)

{

printf("\n进程id:

%d",(p->info).pid);

printf("进程优先级:

%d",(p->info).pri);

printf("CPU时间:

%d",(p->info).cputime);

printf("运行时间:

%d",(p->info).alltime);

printf("进程状态:

%d\n",(p->info).state);

p=p->next;

}

}

}

//打印进程控制块信息

voidPrintPROC(PROC*Proc)

{

if(Proc==NULL)

{

printf("\nProcessPointisNULL!

");

}

else

{

printf("\n进程id:

%d",Proc->pid);

printf("进程优先级:

%d",Proc->pri);

printf("CPU时间:

%d",Proc->cputime);

printf("所需总时间:

%d",Proc->alltime);

printf("进程状态:

%d\n",Proc->state);

}

}

voidDisplay(structPROCp[],intp_num,inti)//显示函数

{

intj;

for(j=i-1;j

{

printf("\n进程id:

%d",p[j].pid);

printf("进程优先级:

%d",p[j].pri);

printf("所需总时间:

%d",p[j].alltime);

printf("进程状态:

%d\n",p[j].state);

printf("\n");

}

}

intmain()

{

inti,count,choice;

intp_num;

PROCp[100];

PROC*pp;

charM;

time_tt;

srand((unsigned)time(&t));

printf("选择1产生新的进程调度/选择2不产生并结束(1/2)\n");

scanf("%d",&M);

while(M==1)

{

printf("请输入所选择的算法:

1:

先到先服务调度2:

优先权调度3:

按0退出\n");

scanf("%d",&choice);

switch(choice)//选择进程调度算法

{

case1:

{

printf("*****************************************\n");

printf("*先到先服务调度*\n");

printf("**\n");

printf("*****************************************\n");

printf("输入需要的进程数:

");

scanf("%d",&p_num);

printf("1.手工输入\n2.自动生成\n");

intP_Input;

scanf("%d",&P_Input);

LinkListL=InitSortedList();

switch(P_Input)

{

case1:

{

intP_Pri,P_AllTime;

printf("请输入优先级(最高20)需要的时间\n");

for(i=0;i

{

scanf("%d",&P_Pri);

scanf("%d",&P_AllTime);

p[i].pid=i+1;

p[i].cputime=0;

p[i].state=1;

p[i].pri=P_Pri;

p[i].alltime=P_AllTime;

}

break;

}

case2:

{

for(i=0;i

{

p[i].pid=i+1;

p[i].pri=rand()%20;

p[i].cputime=0;

p[i].alltime=rand()%20+1;

p[i].state=1;

}

break;

}

}

for(i=1;i<=p_num;i++)

{

printf("*******步骤#%d******************",i);

Display(p,p_num,i);

printf("\n进程%d运行完毕,进入完成队列!

\n",i);

}

printf("该进程调度完成!

\n\n");

break;

}

case2:

{

printf("*****************************************\n");

printf("*优先权调度*\n");

printf("**\n");

printf("*****************************************\n");

printf("输入需要的进程数:

");

scanf("%d",&p_num);

printf("1.手工输入\n2.自动生成\n");

intP_Input;

scanf("%d",&P_Input);

LinkListL=InitSortedList();

switch(P_Input)

{

case1:

{

printf("请输入优先级(最高20)CPU时间(限定30以内)需要的时间\n");

intP_Pri,P_CpuTime,P_AllTime;

for(i=0;i

{

scanf("%d",&P_Pri);

scanf("%d",&P_CpuTime);

scanf("%d",&P_AllTime);

p[i].pid=i+1;

p[i].pri=P_Pri;//优先级最高20

p[i].cputime=P_CpuTime;//cpu时间统计限定在30以内

p[i].alltime=p[i].cputime+P_AllTime;//所需全部时间

p[i].state=1;

}

break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1