南昌大学操作系统实验报告WORD.docx
- 文档编号:8220827
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:14
- 大小:796.56KB
南昌大学操作系统实验报告WORD.docx
《南昌大学操作系统实验报告WORD.docx》由会员分享,可在线阅读,更多相关《南昌大学操作系统实验报告WORD.docx(14页珍藏版)》请在冰豆网上搜索。
南昌大学操作系统实验报告WORD
南昌大学实验报告
---(3)进程调度算法的实现
学生姓名:
张皓然学号:
5501215001专业班级:
本硕151
实验类型:
□验证□综合■设计□创新实验日期:
2017.5.31实验成绩:
一、实验目的
通过实验加强对进程调度算法的理解和掌握。
二、实验内容
编写程序实现进程调度算法,具体可以编写程序实现优先度高者调度算法或先来先服务算法。
三、实验要求
1、需写出设计说明;
2、设计实现代码及说明
3、运行结果;
四、主要实验步骤
优先度高者调度算法实验代码:
#include
#include
#include
#include
#include
#defineruntime2
#defineoverflow-2
#definenull0
enumsta{run,wait,finished};//枚举类型sta,标志三种状态
time_tt;//systemclock
structblock
{
inttime_used;
intprior;
};//定义结构体,使用时间,优先级
typedefstructpro
{
charname[20];
enumstastatus;
inttime_required;
intarrive_time;
structblockswitch_block;
structpro*next;
}*pcb;//定义pcb块
pcbready;
voidmenu();
voidinsertpcb(pcbnewp)//插入至就绪队列
{
pcbp;
p=(pcb)malloc(sizeof(structpro));
if(!
p)exit(overflow);
p=ready;
if(p->next==null)
{
newp->next=ready->next;
ready->next=newp;
}
else
{
while(newp->switch_block.prior
=null)
p=p->next;
newp->next=p->next;
p->next=newp;
}
}
voidcreat_pcb()//创建一个进程
{
pcbnewp;
newp=(pcb)malloc(sizeof(structpro));
if(!
newp)exit(overflow);
newp->status=wait;
time(&t);
newp->arrive_time=t;
printf("processname:
");
scanf("%s",newp->name);
printf("priority:
");
scanf("%d",&newp->switch_block.prior);
printf("arrivetime:
");
scanf("%d",&newp->arrive_time);
printf("cputime_required:
");
scanf("%d",&newp->time_required);
newp->switch_block.time_used=0;
insertpcb(newp);
menu();
}
voidprintpcb()//打印现状
{
pcbp;
if(ready->next){
printf("namestatuspriorityserver_timearrive_timecputime_used\n");
for(p=ready->next;p!
=null;p=p->next)
{
printf("%s",p->name);
switch(p->status)
{
casewait:
printf("wait");break;
caserun:
printf("run");break;
casefinished:
printf("finished");break;
}
printf("%7d",p->switch_block.prior);
printf("%15d",p->time_required);
printf("%20d",p->arrive_time);
printf("%13d",p->switch_block.time_used);
putchar('\n');
}
}
elseprintf("queueisempty!
\n");
}
voidswitchprocess()//将内存中的进程切换至外存
{
chartemp[20];
pcbp,q;
if(ready->next)
{
printf("inputprocessname:
");
scanf("%s",temp);
for(p=ready;p!
=null&&strcmp(temp,p->next->name)!
=0;p=p->next);
if(p!
=null)
{
q=p->next;
p->next=q->next;
printf("remove%ssuccessfully!
\n",q->name);
free(q);
printpcb();
}
elseprintf("foundnoprocess\n");
}
elseprintf("queueempty!
\n");
menu();
}
voidrunprocess()//进程调度
{
pcbp=ready->next;
if(p)
{
printf("%sisrunning.....\n",p->name);
p->status=run;
p->switch_block.prior--;
p->switch_block.time_used+=runtime;
if(p->switch_block.time_used>=p->time_required)
{
p->status=finished;
printpcb();
ready->next=p->next;
printf("%shavebeenremovedfromtheready_queue....\n",p->name);
free(p);
}
else
{
printpcb();
printf("%shaveuseduptherun_time\n",p->name);
p->status=wait;
ready->next=p->next;
insertpcb(p);
}
}
elseprintf("queueempty!
\n");
menu();
}
voidmenu()//选择菜单
{
intcoos;
printf("1.creataprocess\n");
printf("2.runaprocess\n");
printf("3.removeaprocess\n");
printf("4.exit\n");
printf("choose(1-4):
");
scanf("%d",&coos);
switch(coos)
{
case1:
creat_pcb();break;
case2:
runprocess();break;
case3:
switchprocess();break;
case4:
exit(0);break;
}
}
intmain()
{
//clrscr();
ready=(pcb)malloc(sizeof(structpro));
if(!
ready)exit(overflow);
ready->next=null;
menu();
return0;
实验过程:
优先度高者调度算法实验结果截图:
先创建进程a、b、c,
设a进程优先级为2,到达时间为2,cpu处理时间为1;
设b进程优先级为5,到达时间为0,cpu处理时间为6;
设c进程优先级为4,到达时间为2,cpu处理时间为2;
设定进程a、b、c
开始运行进程,首先运行0时刻到达的优先级最高的进程b
运行结束后,进程b的优先级变为4,cpu使用时间为2,此时进程b和c优先级相同,系统仍然调用进程b;
再次运行进程b以后,b的优先级掉为3,而且进程b还差2个时间单位才能运行结束,此时c为优先级最高的进程,系统调用进程c
调度进程c
因为进程c的cpu需要时间仅为2个时间单位,所以进程c运行结束,finished,c被移除就绪序列;
进程b回归
进程c结束
然后系统重新调用进程b,b运行结束;
进程b结束
调度进程a
最后系统调度优先级最低的进程a,结束进程调度过程,队列空。
先来先服务算法:
#include
#include
using namespace std;
//FCFS
struct process{
char name[10];
double arrivetime;//到到时间
double servetime; //服务时间
double starttime;//开始时间
double finnishtime;//完成时间
double circletime;//周转时间
double dcircletime;//带权周转时间
}a[100];//用结构体存放各进程的相关信息
int main()
{
int i,j,k,n;
process temp;
cout<<"请输入进程数:
\n";
cin>>n;
cout<<"请输入进程的信息(包括进程名、进程到达时间、进程服务时间):
\n";
for(i=0;i { cout<<"请输入第"< \n"; cin>>a[i].name>>a[i].arrivetime>>a[i].servetime; } for(i=0;i { for(j=0;j { if(a[i].arrivetime temp=a[i]; a[i]=a[j]; a[j]=temp; } } }//按照FCFS算法对进程进行排序 cout<<"\nFCFS进程调度顺序为: \n";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南昌大学 操作系统 实验 报告 WORD