操作系统原理高优先权调度算法.docx
- 文档编号:16573902
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:18
- 大小:493.09KB
操作系统原理高优先权调度算法.docx
《操作系统原理高优先权调度算法.docx》由会员分享,可在线阅读,更多相关《操作系统原理高优先权调度算法.docx(18页珍藏版)》请在冰点文库上搜索。
操作系统原理高优先权调度算法
《操作系统原理》
课程设计报告书
题目:
高优先权调度算法
学号:
学生姓名:
专业:
指导教师:
5月30日
1功能描述
先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。
高优先权优先调度算法可以使紧迫型作业进入系统后能得到优先处理。
此算法常被用于批处理系统,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统。
该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。
当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。
2系统设计
2.1总体设计
验内容利用C语言来实现对N个进程采用动态优先权优先算法的进程调度。
优先数改变的原则:
进程每运行一个时间片,优先数减1。
2.2详细设计
1.在运行界面里输入进程名称,进程优先级和进程时间;
2.每运行一个时间单位,作业的优先权级数减一;
3.在运行出的用户界面中显示初始作业名,作业状态,优先权级数,需要服务的时间,已经运行的时间;
4.每次调度前后显示作业队列;
2.3程序运行流程图
程序运行流程图见流程图1
流程图1
是
3系统实现
用c++编写的高优先权调度算法算法。
3.1程序代码
程序源代码如下:
#include
#include
structPCB{
charp_name[20];
intp_priority;
intp_needTime;
intp_runTime;
charp_state;
structPCB*next;
};
voidHighPriority();
voidRoundRobin();
voidInformation();
charChoice();
structPCB*SortList(PCB*HL);
intmain()
{
Information();
charchoice=Choice();
switch(choice)
{
case'1':
system("cls");
HighPriority();
break;
default:
break;
}
system("pause");
return0;
}
voidInformation()
{
printf("按回车键进入演示程序");
getchar();
system("cls");
}
charChoice()
{
printf("\n\n");
printf("1.演示最高优先数优先算法。
");
printf("按1继续:
");
charch=getchar();
returnch;
system("cls");
}
voidHighPriority()
{
structPCB*processes,*pt;
//pt作为临时节点来创建链表,使用for语句,限制进程数为5个
processes=pt=(structPCB*)malloc(sizeof(structPCB));
for(inti=0;i!
=5;++i)
{
structPCB*p=(structPCB*)malloc(sizeof(structPCB));
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;
pt=p;
printf("\n\n");
}
getchar();//接受回车
//processes作为头结点来存储链表
processes=processes->next;
intcases=0;
structPCB*psorted=processes;
while
(1)
{
++cases;
pt=processes;
//对链表按照优先数排序
//psorted用来存放排序后的链表
psorted=SortList(psorted);
printf("Theexecutenumber:
%d\n\n",cases);
printf("****当前正在运行的进程是:
%s\n",psorted->p_name);
psorted->p_state='R';
printf("qnamestatesuperndtimeruntime\n");
printf("%s\t%c\t%d\t%d\t%d\t\n\n",psorted->p_name,psorted->p_state,psorted->p_priority,psorted->p_needTime,psorted->p_runTime);
pt->p_state='W';
psorted->p_runTime++;
psorted->p_priority--;
printf("****当前就绪状态的队列为:
\n\n");
//pt指向已经排序的队列
pt=psorted->next;
while(pt!
=NULL)
{
printf("qnamestatesuperndtimeruntime\n");
printf("%s\t%c\t%d\t%d\t%d\t\n\n",pt->p_name,pt->p_state,pt->p_priority,pt->p_needTime,pt->p_runTime);
pt=pt->next;
}
//pt指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的
pt=psorted;
structPCB*ap;
ap=NULL;//ap指向pt的前一个节点
while(pt!
=NULL)
{
if(pt->p_needTime==pt->p_runTime)
{
if(ap==NULL)
{
pt=psorted->next;
psorted=pt;
}
else
ap->next=pt->next;
}
ap=pt;
pt=pt->next;
}
if(psorted->next==NULL)
break;
getchar();
}
}
structPCB*SortList(PCB*HL)
{
structPCB*SL;
SL=(structPCB*)malloc(sizeof(structPCB));
SL=NULL;
structPCB*r=HL;
while(r!
=NULL)
{
structPCB*t=r->next;
structPCB*cp=SL;
structPCB*ap=NULL;
while(cp!
=NULL)
{
if(r->p_priority>cp->p_priority)
break;
else
{
ap=cp;
cp=cp->next;
}
}
if(ap==NULL)
{
r->next=SL;
SL=r;
}
else
{
r->next=cp;
ap->next=r;
}
r=t;
}
returnSL;
}
4系统测试与分析
经过测试运行正常,可以达到预期的输出结果。
4.1程序运行开始界面见图2和图3
4.2高优先权程序正常运行
输入进程名输入5个进程名、优先数、运行时间,然后程序自动从就绪队列中选择优先级高的进程运行优先执行,一直到所有进程全部运行完毕。
具体的见图4—图12。
教师评分表
评分细则
分数
理解功能及基本原理程度。
(20分)
报告文字、图、表格式规范、整齐程度。
(15分)
报告内容完整、逻辑性程度。
(15分)
程序代码是否有注释、是否有语法错误。
(10分)
程序运行是否正常。
(20分)
程序运行界面是否美观。
(15分)
是否有创新思考、做法等。
(5分)
其他说明:
总分:
成绩:
指导老师签名:
日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 原理 优先权 调度 算法
![提示](https://static.bingdoc.com/images/bang_tan.gif)