《操作系统课程设计进程调度模拟设计》由会员分享,可在线阅读,更多相关《操作系统课程设计进程调度模拟设计(39页珍藏版)》请在金锄头文库上搜索。
1、学号:课程设计课程名字系统软件开发实训 A题 目进程调度模拟设计一一先来先服务、优先级法学 院计算机科学与技术学院专 业计算机科学与技术专业班级姓名指导教师 李玉强2014 年 01月 13 日课程设计任务书学生姓名: 专业班级: 指导教师: 李玉强 工作单位: 计算机科学与技术学院题目: 进程调度模拟设计一一先来先服务、优先级法初始条件:1 预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有 深入的 理解。2 实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1 模拟进程调度,能够处理以下的情
2、形: 能够选择不同的调度算法(要求中给出的调度算法) ; 能够输入进程的基本信息, 如进程名、优先级、到达时间和运行时间等;根据选择的调度算法显示进程调度队列; 根据选择的调度算法计算平均周转时间和平均带权周转时间。2 设计报告内容应说明: 课程设计目的与功能;需求分析,数据结构或模块说明(功能与框图); 源程序的主要部分; 测试用例,运行结果与运行情况分析;自我评价与总结。时间安排:UZ UZ UZ UZ UZ UZ 天天天天天天设计安排 3 周: 查阅、分析资料1系统软件的分析与建模 4 系统软件的设计5系统软件的实现3撰写文档 1 课程设计验收答辩 1设计验收安排:设计周的第三周的指定时
3、间到实验室进行上机验收设计报告书收取时间:课程设计验收答辩完结时。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0 分记)指导教师签名: 2013年 12 月 10 日系主任(或责任教师)签名: 2013 年 12 月 10 日课程设计报告书1 需求分析1.1 设计目的(1)阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。(2)掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求, 以及说明书撰写等具体要求)1.2 程序流程图选择调度算法切 换袪谿束开始结束? Y/N优先级法输入进程队列佶息先来尢服务法1.3 设计要求(1) 能够
4、选择不同的调度算法(要求中给出的调度算法);(2) 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;(3) 根据选择的调度算法显示进程调度队列;(4) 根据选择的调度算法计算平均周转时间和平均带权周转时间2. 功能设计2.1 数据结构1 进程的结构定义:struct processchar n ame10;/进程名intno;进程序号double arrivetime;/进程达到时间double n eedtime;/进程运行时间double starttime;/进程开始时间double en dtime;/进程结束时间intstate;进程状态,0表示未执行,1表示已执行i
5、ntpriority;process *n ext;进程优先级process *head=Null;int count;2 使用链表存储进程并按照到达时间排序链表空?N在两节点之间?插 判 链插入结 束只有一节点p1=p1-next比较当前f点的到达时伺与连续两 个节点(p1Tp1-next)的到达时间比较当前节点 与已存在节点 的到达时间插入它们之间至少两个节点r1开始UJvoid in sert(process *curre nt)if (head!=Null)if(head-n ext=Null)/如果只有一个节点if(curre nt-arrivetimearrivetime) / 如
6、果比链头到达时间早,则插入 链头curre nt-n ext=head;head=curre nt; elsecurre nt- n ext=Null; head-n ext=curre nt;else/如果至少两个节点process *p1=head; if(head-arrivetime current-arrivetime ) curre nt-n ext=head; head=curre nt;elseint flag=1; while(p1-next!=Null) 当 head 后面不为空时一直做如果在两个节点间 if(p1-arrivetime arrivetime & p1-ne
7、xt-arrivetime curre nt-arrivetime)curre nt-n ext=p1- n ext;p1- n ext=curre nt;flag=0; break;else p1=p1- n ext;/如果到达时间最大,则插到链尾if (flag=1)p1- n ext=curre nt;curre nt- n ext=Null;else head=curre nt;2.2 先来先服务算法设计1. FCFS 算法说明将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先 服务 的方式进行调度处理,是一种最普遍和最简单的方法。在该算法中,每个作业或进程按照它
8、们 在队列中等待时间长短来决定它们是否优先享受服务。在没有特殊理由要优先调 度某类作业或 进程时,从处理的角度来看,FCFS方式是一种最合适的方法,因为无论是追加还是取出一个 队列元素在操作上都是最简单的。2. 创建进程void createFCFS()process *q1= new process ;coutvv 请输入进程总数目;cin co unt;coute ndl;int nu mber=1;while( nu mberno=nu mber;coutvv进程序号vvnumbervvendl;cout进程名称;cin q1- n ame;coutvv进程到达时间;cin q1-arr
9、ivetime;coutvv进程运行时间;cin q1- n eedtime;q1- next=NULL;in sert(q1);nu mber+; coute ndle ndl;3.进程调度及输出结果Head 节点:开始时间=到达时间 结束时间=开始时间+执行时间系 统时间=结束时间并计算周转时间和带权周转时间 P=head-n extVp节点:开始时间二系统时间p节点:开始时间二到达时间结束时间二开始时间+执行R时间束时间二开始时间+执行时间系 统时间=结束时间|统时间=结束时间并计算周转时间和带权周转if计算周转时间和带权周转时间P二headnextP二headnextvoid prin
10、 tFCFS()process *p=new process;double systime=0;/记录系统时间double tur n=0;double turnw=0;/平均周转时间/平均带权周转时间if(head=NULL)cout 没有进程调度endl;/处理第一个else if(head!=NULL)head-starttime=head-arriveTime;head-e ndtime=head-arrivetime+head-n eedtime; systime=head-e ndtime;turn=turn+(head-endtime - head-arrivetime); tu
11、rnw=turnw+(head-e ndtime - head-arrivetime) / head-n eedtime;p=head-n ext;while(p!=NULL)if(p-arrivetimesystime) /如果前一个结束后一个还没到达p-starttime=p-arrivetime;p-e ndtime=p-starttime+p-n eedtime;systime=p-e ndTime;turn=turn+(p-e ndtime-p-arrivetime);turnw=turnw+(p-e ndtime-p-arrivetime)/p-n eedtime; p=p-n e
12、xt;else/如果前一个未结束时后一个已经到达p-starttime=systime;p-e ndtime=p-starttime+p-n eedtime;systime=p-e ndtime;turn=turn+(p-e ndtime-p-arrivetime); turnw=turnw+(p-e ndtime-p-arrivetime)/p-n eedtime; p=p-n ext;cout.setf(ios:left);/设置对齐方式为 leftcoutvvsetw(10)vv进程序号vvsetw(10)vv进程名vvsetw(10)vv到达时间vvsetw(10)vv开始时间setw
13、(10)执行时间setw(10)no vvsetw(10)vvtemp-namevvsetw(10)vvtemp-arriveTimevvsetw(10)vvtemp-startTimevvsetw(10)vvtemp-n eedTimevvsetw(10)vvtemp-e ndTimee ndl;temp=temp-n ext;cout平均周转时间turn/countendl平均带权周转时间 next!=NULL) /回收空间process *t=new process;t=head-n ext;head-n ext=t- n ext;delete t;head=NULL;2.3 优先级算法的设计1. PIRO 算法及说明优先级法可被用作作业或进程的调度策略。首先,系统或用户按某种原则为作业或 进 程指定一个优先级来表示该作业或进程所享有的调度优先权。该算法的核心是确定进程 或作业 的优先级。确定优先级的方法可分为两类。即动态法和静态法静态法根据作业或进程的静态特 性, 在作业或进程开始执行之前就确定它们的优先级,一旦开始执行之后