预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

课程设计报告书 实践课题:操作系统课程设计 姓名: 学号: 完成时间:2010.6.28 指导老师:(老师) 设计摘要 利用C++,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先,进一步理解了进程调度各种算法的概念及含义。 设计背景 在OS中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;在分时系统中,为保证系统具有合理的响应时间,采用轮转法进行调度。采用算法时,则要考虑多方面因素,以便达到最佳效果。 主要技术/算法简介 #include<iostream> usingnamespacestd; #defineMAX10 structtask_struct { charname[10];/*进程名称*/ intnumber;/*进程编号*/ floatcome_time;/*到达时间*/ floatrun_begin_time;/*开始运行时间*/ floatrun_time;/*运行时间*/ floatrun_end_time;/*运行结束时间*/ intpriority;/*优先级*/ intorder;/*运行次序*/ intrun_flag;/*调度标志*/ }tasks[MAX]; intcounter;/*实际进程个数*/ intfcfs();/*先来先服务*/ intps(); /*优先级调度*/ intsjf(); /*短作业优先*/ inthrrn(); /*响应比高优先*/ intpinput(); /*进程参数输入*/ intpoutput(); /*调度结果输出*/ voidmain() {intoption; pinput(); printf("请选择调度算法(0~4):\n"); printf("1.先来先服务\n"); printf("2.优先级调度\n"); printf("3.短作业优先\n"); printf("4.响应比高优先\n"); printf("0.退出\n"); scanf("%d",&option); switch(option) { case0: printf("运行结束。\n"); break; case1: printf("对进程按先来先服务调度。\n\n"); fcfs(); poutput(); break; case2: printf("对进程按优先级调度。\n\n"); ps(); poutput(); break; case3: printf("对进程按短作业优先调度。\n\n"); sjf(); poutput(); break; case4: printf("对进程按响应比高优先调度。\n\n"); hrrn(); poutput(); break; } } intfcfs()/*先来先服务*/ { floattime_temp=0; inti; intnumber_schedul; time_temp=tasks[0].come_time; for(i=0;i<counter;i++) { tasks[i].run_begin_time=time_temp; tasks[i].run_end_time=tasks[i].run_begin_time+tasks[i].run_time; tasks[i].run_flag=1; time_temp=tasks[i].run_end_time; number_schedul=i; tasks[number_schedul].order=i+1; } return0; } intps()/*优先级调度*/ { floattemp_time=0; inti=0,j; intnumber_schedul,temp_counter; intmax_priority; max_priority=tasks[i].priority; j=1; while((j<counter)&&(tasks[i].come_time==tasks[j].come_time)) { if(tasks[j].priority>tasks[i].priority) { max_priority=tasks[j].priority; i=j; } j++; }/*查找第一个被调度的进程*/ /*对第一个被调度的进程求相应的参数*/ number_schedul=i; tasks[number_schedul].run_begin_time=tasks[number_schedul].come_time; tas