高优先权优先调度算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态高优先权算法实验报告
一、实验目的
通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。提高自己的动手能力,主要是通过自己去思考并自己编码更进一步及更贴切的去理解弄明白动态优先权算法的模拟加深对进程概念和进程调度过程的工作流程及其原理!
二、实验要求
1.在运行界面里输入进程名称,进程优先级和进程时间;
2.每运行一个时间单位,作业的优先权级数减一;
3.在运行出的用户界面中显示初始作业名,作业状态,优先权级数,需要服务的时间,已经运行的时间;
4.每次调度前后显示作业队列;
三、实验内容
动态优先权是指在创建进程时所赋予的优先权,是可以随着进程的推进或随其等待时间得增加而改变的。
实验内容利用C语言来实现对N个进程采用动态优先权优先算法的进程调度。优先数改变的原则:进程每运行一个时间片,优先数减1。
四、实验结果
登陆界面:
图1 图2
输入进程名字,进程优先数和进程时间:
图3
图4
图5 图6
图7 图8
五、实验小结
本次实验代码和基于时间片轮转算法代码是一样的,是在别人代码的基础上,结合自己对高优先权算法和时间片轮转算法的了解,通过switch语句把两者合二为一了,当输入1的时候,执行HighPriority函数,也就是动态高优先权函数。在实现的过程中,使用for语句,限制进程数为5个:for (int i = 0; i != 5; ++i),,定义pt作为临时节点来创建链表,processes作为头结点来存储链表,psorted用来存放排序后的链表。
这次实验,在最初的时候,遇到了很大的麻烦,毕竟是改的别人代码,所以对代码理解的不是很透彻,但在同学们和老师的帮助下,终于调试成功了。也使我更加明白了高优先权调度的过程。
六、附录
#include
#include
struct PCB{
char p_name[20];
int p_priority;
int p_needTime;
int p_runTime;
char p_state;
struct PCB* next;
};
void HighPriority();
void RoundRobin();
void Information();
char Choice();
struct PCB* SortList(PCB* HL);
int main()
{
Information();
char choice = Choice();
switch(choice)
{
case '1':
system("cls");
HighPriority();
break;
case '2':
system("cls");
RoundRobin();
break;
default:
break;
}
system("pause");
return 0;
}
void Information()
{
printf("\n\n");
printf(" ********************************************* \n");
printf(" 模拟进程调度算法\n");
printf(" ********************************************* \n\n\n");
printf(" 班级:计科08-1班\n");
printf(" 姓名:卢彩方\n");
printf(" 学号:200807010122\n");
printf(" 实验日期:2011年05月17日\n\n\n\n\n\n");
printf(" 按回车键进入演示程序");
getchar();
system("cls");
}
char Choice()
{
printf("\n\n");
printf(" ********************************************* \n");
printf(" 进程调度演示\n");
printf(" ********************************************* \n\n\n");
printf(" 1.演示最高优先数优先算法。\n");
printf(" 2.演示轮转法算法。\n");
printf(" 3.退出程序。\n\n\n\n");
printf(" 选择进程调度方法:");
char ch = getchar();
return ch;
system("cls");
}
void HighPriority()
{
struct PCB *processes, *pt;
//pt作为临时节点来创建链表
processes = pt = (struct PCB*)malloc(sizeof(struct PCB));
for (int i = 0; i != 5; ++i)
{
struct PCB *p = (struct PCB*)malloc(sizeof(struct PCB));
printf("进程号No.%d:\n", i);
printf("输入进程名:");
scanf("%s", p->p_name);
printf("输入进程优先数:");
scanf("%d", &p->p_priority);
printf("输入进程运行时间:");
scanf("%d", &p->p_needTime);
p->p_runTime = 0;
p->p_state = 'W';
p->next = NULL;
pt->next = p;