操作系统课程设计报告进程调度_第1页
操作系统课程设计报告进程调度_第2页
操作系统课程设计报告进程调度_第3页
操作系统课程设计报告进程调度_第4页
操作系统课程设计报告进程调度_第5页
免费预览已结束,剩余13页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统(Operating System,简称OS是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任 何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接 口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程 序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源 最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环 境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不 用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的 资源请求

2、,分配资源,如:划分 CPU时间,内存空间的开辟,调用打印机等。操作系统的主要功能是资源管理, 程序控制和人机交互等。计算机系统的 资源可分为设备资源和信息资源两大类。设备资源指的是组成计算机的硬件 设备,如中央处理器,主存储器,磁盘存储器,打印机,磁带存储器,显示 器,键盘输入设备和鼠标等。信息资源指的是存放于计算机内的各种数据, 如系统软件和应用软件等。操作系统位于底层硬件与用户之间, 是两者沟通的桥梁。用户可以通过操 作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备, 实现用户要求。而达到巩固知本次课程设计我们将对上学期所学的知识进行系统的应用, 识的作用1问题概述2需

3、求分析3概要设计3.1主要功能3.2模块功能结构3.3软硬件环境3.4数据结构设计4详细设计4.1目录先来先服务(FCFS )调度算法4.2短进程调度算法(SPF ) ”4.3 “高响应比优先调度算法”4.4优先级调度(非抢占式)算法” 5系统测试及调试 5.1测试 5.2调试过程中遇到的问题 6心得体会 7参考文献 8附录1问题概述编写一个进程调度程序,允许多个进程并发执行。采取多种进程 调度算法(先来先服务(FCFS )调度算法,短进程调度算法(SPF), 咼响应比优先调度算法,优先级调度(非抢占式)算法)。分析比较 各个算法的优缺点。2需求分析进程调度的功能是记录系统中所有进程的执行情况

4、、 从就绪态队列 中选择一个进程,进行进程上下文的切换。采取不同的算法根据外部 环境及条件进行进程的切换。3概要设计3.1主要功能进程调度的功能是记录系统中所有进程的执行情况、 从就绪态队列 中选择一个进程,进行进程上下文的切换。采用先来先服务(FCFS) 调度算法,短进程调度算法(SPF),高响应比优先调度算法,优先 级调度(非抢占式)算法进行进程的切换。3.2模块功能结构图3.23.3软硬件环境件环境牛环境亡i :Pen2 先n 来tiumIXTT500W短do 进1以上ws 7内存高 响:2p6Mn5优先0 退 出用软件:先Dev-C+卜程应级息服调比调结勾设十务度优度入算算先算;B_s

5、tnict法法调法1度算法本程序所适用的计算机系统软硬件环境要求为硬,软,应'struct PC3.4数/进程名称 /优先级 /进程编号 /到达时间 /开始运行时间 /结束运行时间 /运行时间 /运行次序 /调度标志char name10; int priority; int number;float come_T;float run_begin_T;float run_end_T;float run_T;int order;int run_flag; PCBMAX;4 详细设计 4.1“先来先服务( FCFS )调度算法 ”先来先服务算法是按照进程到达先后次序来进行调度。进入该函数后

6、读取每个进程控制块 PCB 中的到达时间 come_T从 come_T 最早的开始运行,依次运行完毕。记录开始运行时间run_begin_T和结束运行时间run_end_T,并记录运行次序。最后调用调度结果输出函数, 输出进程信息和平均周转时间和平均带权周转时 间。图 4.1.2 “先来先服务调度算法”运行结果图图4.1.3 “先来先服务(FCFS调度算法”4.2“短进程调度算法( SPF )”短进程调度算法是指对短进程优先调度的算法, 这里进程的长短 是以进程要求运行的时间的长短来衡量。进入该函数后读取每个进程控制块中的到达时间come_T,选取最早的,若时间相同则选运行时间最短的进程进行调

7、度, 记录开始运 行时间run_begin_T和结束运行时间run_end_T,并记录运行次序。一个进程运行完成后, 在查看在此进程运行时间内到达的进程, 选取 运行时间最短的运行,依次重复,直至所有进程运行完毕,最后调用 调度结果输出函数, 输出进程信息和平均周转时间和平均带权周转时 间。图 4.2.2 “短进程调度算法”运行结果图4.3“高响应比优先调度算法”响应比高者进程优先的算法,响应比的定义是指R=(已等待时间+服务要求时间) /要求服务时间。实际上,高响应比优先调度算法是先来先服务调度算法和短作业优先调度算法的综合调度算法。进入该函数后读取每个进程控制块中的到达时间come_T,选

8、取最早的,记录开始运行时间 run_begin_T 和结束运行时间 run_end_T,并记录运行次序。 运行结束后, 在查看在此进程运行时间内到达的进 程,选取响应比最高的进程运行, 依次重复,直至所有进程运行完毕, 最后调用调度结果输出函数, 输出进程信息和平均周转时间和平均带 权周转时间。图 4.3.2 “高响应比优先调度算法”运行结果图图4.3.3 “高响应比优先调度算法”流程图4.4 “优先级调度(非抢占式)算法”优先级调度算法也成优先权调度算法, 本次采用非抢占式优先级 算法,在进程输入时确定进程的优先级,数字越大优先级别越高。进入该函数后读取每个进程控制块中的到达时间come_T

9、,选取最早的,若时间相同则选优先级别高的的进程进行调度, 记录开始运 行时间run_begin_T和结束运行时间run_end_T,并记录运行次序。一个进程运行完成后,在查看在此进程运行时间内到达的进程, 选取 优先级别高者的进程运行,依次重复,直至所有进程运行完毕,最后 调用调度结果输出函数,输出进程信息和平均周转时间和平均带权周 转时间。退出请选择:4*对进程按高响应比优先调度:周转时间5-tin优先级倒这吋即运彳亍吋即开始时I可结朿时间!运行找序13. nn2.Q04.ea7.00! 11004.002.GQ3,00间为7.002.155.0Q00! 11.ee! 1400iQ.ee图4

10、42 “优先级调度(非抢占式)算法”运行结果图图443 “优先级调度(非抢占式)算法”流程图5系统测试及调试 5.1测试进程名称进程编号优先级到达时间运行时间5.1.1实际测试数据5.1.2预期结果在这组测试数据中,当进程采用短进程调度优先时,平均带全周转时间最短,效率最好。但由于进程的数据不同,我们可以采用不同的调度算法,应视情况而选取最佳的调度算法。5.2调试过程中遇到的问题因为该程要实现进程调度中几种主要的算法的调度演示,并计算周转时间进行比较,那么就需要在一组进程上调用不同的算法,并可重复使用该数组。但是当从一个算法转换到另一个算法的时候,涉及到一些关键变量的初始化问题。一开始我并没有

11、注意到这个问题, 导致运行下一个算法时,因经过一次调度后,所有进程的状态都为执行完毕,所以第二次以及往后都不能得出正确的结论。经过多次测试后,在每个算法的子函数中加入,状态初始化语句,使得程序能以正常运行,得出正确的数据。5.2.2输出数据时显示不全且乱输出是开始时做的函数,然而就遇到了挺烦的困难,因为每个进程的数据项多且杂,输出后不挨个对着看根本不知道谁是谁, 百度了很多个案例后决定每个数据输出时严格控制格式,采用I将其分隔。使其看上去更加严谨,美观。其实很多小细节也要处理好才能更好体现出这个系统的优点。6 心得体会通过这次课程设计, 使我更加扎实的掌握了有关操作系统方面的 知识,特别是进程

12、以及各种调度算法。 进程调度虽然是在系统内部的 低级调度, 但进程调度的优劣直接影响作业调度的性能。 反映作业调 度优劣的周转时间和平均周转时间只在某种程度上反映了进程调度 的性能,例如,其执行时间部分中实际上包含有进程等待 ( 包括就绪 状态时的等待 ) 时间,而进程等待时间的多少是要依靠进程调度策略 和等待事件何时发生等来决定的。 因此,进程调度性能的商量是操作 系统设计的一个重要指标。所以进程调度的重要性也是不可忽视的。这次的课程设计从选题到完成程序到最后写出课设报告, 中间遇 到了很多大大小小的问题, 但是经过多方努力都得以解决, 虽然它并 不是一个完善的系统, 还存在着这样那样的问题

13、, 但是已经进我的努 力去完善它。 遇到问题时一定要不懈努力, 不能遇到问题就想到要退 缩,一定要不厌其烦的发现问题所在, 然后一一进行解决, 只有这样, 才能成功的做成想做的事。最后,感谢老师的帮助及悉心的指导,感谢同学们的相互帮助, 没有他们我自己也不可能完成此次在项目中的任务, 更加让我明白了 一个团队的重要性,以及个人力量的单薄。总而言之,还是谢谢大家 的互帮互助,而完成这个项目,完成这次课设!7 参考文献1 王红.操作系统原理及应用 Linux .第二版.北京: 中国水利 水电出版社 ,2005.2 王红. 操作系统实训( Linux )习题解答、例题解析、实验 指导 .第二版. 北

14、京:中国水利水电出版社, 2008.3 孟静. 操作系统原理教程 .北京: 清华大学出版社 ,2000.4 周苏、金海溶 . 操作系统原理实验 . 北京 : 科学出版社 ,2000. 8 附录#include<stdio.h> #include<stdlib.h>#include<iostream>曝光)。using namespace std; /这样命名空间 std 内定义的所有标识符都有效 就好像它们被声明为全局变量一样。#define MAX 10 struct PCB_struct/进程名称/进程编号 /优先级/到达时间 /开始运行时间 /开始结束

15、时间 /运行时间 /运行次序 /调度标志char name10; int number;int priority;float come_T;float run_begin_T;float run_end_T;float run_T;int order;/实际生成进程个数/先来先服务算法/短进程调度算法/高响应比优先调度算法 /优先级调度(非抢占式)算法 /进程输入 /调度结果输出int run_flag; PCBMAX,pcb;int counter; void FCFS();void SPF(); void HRRN();void PRI();void Input(); void Outpu

16、t();int main(void)int option; while(1)printf("nn* 进程调度管理*");printf("nn*1进程信息输入 ");printf("nn*2采用 先来先服务算法进行进程调度 并输出 ");printf("nn*3采用 短进程调度算法进行进程调度 并输出 ");printf("nn*4采用 高响应比优先调度算法进行进程调度 并输出 ");printf("nn*5采用 优先级调度(非抢占式)算法进行进程调度 并输出 ");print

17、f("nn*0退出 ");printf("nn 请选择: "); scanf("%d",&option);switch(option)case 0: printf(" 运行结束,再见 "); exit(0); break;case 1:Input(); break;case 2:printf("nFCFS();Output(); break;case 3:printf("nSPF();Output(); break;case 4:printf("nHRRN();Output()

18、;break;case 5:printf("n*度:nn");PRI();Output(); break; default:printf("n*对进程按先来先服务调度 :nn");对进程按短进程调度 :nn");对进程按高响应比优先调度 :nn");对进程按优先级调度(非抢占式)调输入错误! 请重新输入 : ");void Input()int i;printf("nscanf("%d",&counter); for(i=0;i<counter;i+) printf("n

19、*请输入即将运行的进程的个数: ");请输入第%d个进程的信息:n",i+1);printf("n * 请输入进程名字: "); scanf("%s",PCB);printf("n* 请输入进程编号: ");scanf("%d",&PCBi.number);");printf("n* 请输入进程的优先级:scanf("%d",&PCBi.priority);");printf("n* 请输入进程的到达时间:s

20、canf("%f",&PCBe_T);");printf("n* 请输入进程的运行时间:scanf("%f",&PCBi.run_T);PCBi.run_begin_T=0;PCBi.run_end_T=0;PCBi.order=0;PCBi.run_flag=0;* 录入结束! "); printf("nvoid Output()int i;float turn_round_T=0,f1,w=0; /f1 是周转时间 w 是平均带权周转时间 printf("n|进程名称|进程编

21、号 优先级|到达时间|运行时间开始时间结束时间| 运行次序|周转时间|");for(i=0;i<counter;i+)f1=PCBi.run_end_T-PCBe_T; turn_round_T=turn_round_T+f1;*|");%s | %d | %d | %5.2f | %5.2f | %5.2f | %5.2f |",w=w+(f1/PCBi.run_T); printf("| %5.2f| printf("| | %dPCB,PCBi.number,PCBi.priority,PCBe_T,

22、PCBi.run_T,PCBi.run_begin_T,PCBi.run_end_T,PCBi.order,f1);* 平均周转时间为: %5.2f",turn_round_T/counter);* 平均带权周转时间为: %5.2f",w/counter);printf("nprintf("nvoid FCFS()int i,j,time;if(counter!=1)for(i=0;i<counter;i+)for(j=0;j<counter-i-1;j+)if(PCBe_T>PCBj+1.come_T)pcb=PCBj;PC

23、Bj=PCBj+1;PCBj+1=pcb;/根据到达时间对进程进行排序time=0;for(i=0;i<counter;i+) if(time<PCBe_T) PCBi.run_begin_T=PCBe_T; elsePCBi.run_begin_T=time; PCBi.run_end_T=PCBi.run_begin_T+PCBi.run_T; PCBi.run_flag=1;time=PCBi.run_end_T; PCBi.order=i+1; / 运行每个程序void SPF()float time = 0;int i=0,j;int number=0

24、,temp;float run_time;run_time=PCBi.run_T;j=1;for(i=0;i<counter;i+)PCBi.run_flag=0;i=0;while(j<counter)&&(PCBe_T=PCBe_T) if(PCBj.run_T<PCBi.run_T) run_time=PCBj.run_T;i=j;j+;/ 查找第一个被调度的进程/对第一个被调度的进程运行 number=i;if(time<PCBe_T)PCBnumber.run_begin_T=PCBe

25、_T;elsePCBnumber.run_begin_T=time;PCBnumber.run_end_T=PCBnumber.run_begin_T+PCBnumber.run_T; PCBnumber.run_flag=1;time=PCBnumber.run_end_T;PCBnumber.order=1;temp = 1; while(temp<counter) for(j=0;j<counter;j+) if(PCBe_T<=time)&&(PCBj.run_flag!=1) run_time = PCBj.run_T;number = j

26、;break; for(j=0;j<counter;j+) if(PCBe_T<=time)&&(PCBj.run_flag!=1) if(PCBj.run_T<run_time)run_time = PCBj.run_T; number = j;/ 查找下一个被调度的进程/对找到的下一个被调度的进程求运行 PCBnumber.run_begin_T=time;PCBnumber.run_end_T=PCBnumber.run_begin_T+PCBnumber.run_T;PCBnumber.run_flag=1; time=PCBnumber.r

27、un_end_T; temp+;PCBnumber.order=temp;void HRRN()int i,j,number,temp_counter;float time=0,response_rate,max_response_rate;for(i=0;i<counter;i+)PCBi.run_flag=0;/运行第一个进程if(time<PCB0.come_T) PCB0.run_begin_T=PCB0.come_T;elsePCB0.run_begin_T=time;PCB0.run_end_T=PCB0.run_begin_T+PCB0.run_T;PCB0.run_

28、flag=1; time=PCB0.run_end_T;PCB0.order=1;temp_counter = 1;/运行其他进程 while(temp_counter<counter) max_response_rate=0; for(j=1;j<counter;j+) if(PCBe_T<=time)&&(!PCBj.run_flag) response_rate=(time-PCBe_T)/PCBj.run_T); if(response_rate>max_response_rate)max_response_rate=response_rate;number=j;if(time<PCBe_T)PCBnumber.run_begin_T=PCBe_T; elsePCBnumber.run_begin_T=time;PCBnumber.run_end_T=PCBnumber.run_begin_T+PCBnu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论