操作系统进程调度课程设计.doc_第1页
操作系统进程调度课程设计.doc_第2页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 课程名称 操作系统 题目名称 进程调度 学生学院 计算机学院 专业班级 计算机科学与技术13(2)学 号 学生姓名 指导教师 2015 年 1 月 13 日学生姓名专业班级计算机科学与技术12(2)学号3112005828题 目进程调度指导教师题目编号06主要内容本课程设计要求编程进程调度的四个算法。通过具体的进程调度算法的实现,加深对进程调度算法实现过程的理解。任务要求进程调度是低级调度,它的主要功能是根据一定的算法将cpu分派给就绪队列中的一个进程。1. 假设一个系统中有5个进程,它们的到达时间和服务时间如下表所示,忽略i/o以及其他开销时间。进程到达时间服务时间a03b26c44d65e822. 分别实现按照先来先服务(fcfs)、非抢占及抢占的短进程优先(spf)、高响应比优先(hrrn)以及时间片轮转(rr、时间片=1)调度算法进行cpu调度。 3. 分别在不同算法控制下运行设计的程序,给出各进程的完成时间、周转时间、带权周转时间和平均带权周转时间。(计算到小数点后两位)4. 选用程序设计语言:c、c等。参考文献1 计算机操作系统, 汤小丹等 ,西安电子科技大学出版社2 操作系统实验指导书,傅秀芬,广东工业大学(自编)3 计算机操作系统教程 ( 第二版 ), 张尧学、 史美林,清华大学出版社4 现代操作系统,a.s.tanenbaum 著,陈向群等译机械工业出版社审查意见指导教师签字:系主任签字: 年 月 日 目录1.设计目的42.设计内容43.设计步骤53.1需求分析53.2概要设计53.2.1 设计思想53.2.2 模型定义53.3.3 主程序流程图53.3.4 各程序模块之间的层次(调用)关系63.3 详细设计73.3.1 功能类定义73.3.2 函数调用关系图73.3.3 各模块流程图83.4 调式分析83.5 系统测试93.6 使用说明134. 经验与体会145.重要数据结构或源程序中的疑难部分说明141. 设计目的设计编程进程调度的四个算法。通过具体的进程调度算法的实现,加深对进程调度算法实现过程的理解,并且采用android端动态显示,加深mvc模式的理解与使用。2. 设计内容进程调度是低级调度,它的主要功能是根据一定的算法将cpu分派给就绪队列中的一个进程。设计一个系统中有5个进程,它们的到达时间和服务时间如下表所示,忽略i/o以及其他开销时间。进程到达时间服务时间a03b26c44d65e82算法实现:先来先服务(fcfs)、非抢占及抢占的短进程优先(spf)、高响应比优先(hrrn)以及时间片轮转(时间片=1)调度算法。计算显示:各进程的完成时间、周转时间、带权周转时间和平均带权周转时间。(计算到小数点后两位)上述设计采用java程序语言编程硬件环境:win8-pc 和android4.4.2系统手机软件环境:eclipse+adt3. 设计步骤3.1需求分析要求实现4个算法演示进程调度过程,其中短作业优先算法可拆分成非抢占式和抢占式(合计成5个)。用户生成任务要求的测试数据后,选择对应的算法启动进程调度,android端界面动态显示调度过程,并记录各状态的个数及其各进程的完成时间、周转时间、带权周转时间和平均带权周转时间。3.2概要设计3.2.1 设计思想由于需要在android端动态演示过程,把整个流程的逻辑处理和界面显示分离开来,结合mvc分层思想,线程通信机制,使用android中的适配器来实现数据处理和界面显示的结合。首先定义计时器,每隔一秒运行一次子任务。该子任务处理好变化的数据后发送一个消息给ui线程。ui线程接受消息后,把处理的数据放进适配器后进行显示。所有任务处理完后重置计时器。3.2.2 模型定义定义进程类,用来记录进程在调度中数据的变化。使用多个泛型链表,分别才能不同状态的进程。3.3.3 主程序流程图开始用户添加测试进程选择调度算法启动进程调度ui界面动态演示n是否退出y结束3.3.4 各程序模块之间的层次(调用)关系对应算法处理数据用户产生测试数据适配器ui显示数据3.3 详细设计3.3.1 功能类定义3.3.2 函数调用关系图coursedesignactivityinitlistener( )initview()go( )maketestdate( )sortalllist( )condition2( )condition3( )3.3.3 各模块流程图开始开始调用算法修改数据点击按钮产生测试数据结束结束开始开始调用适配器装载数据调用测试数据进入适配器调用装载数据的适配器显示ui结束结束3.4 调式分析问题一:时间片控制不当导致数据显示混乱。解决方法:画流程图,在运行队列中每更换对象,就重置时间片。检查了不止10遍,最后控制好每一个交换对象细节,终于结局。问题二:运行和就绪队列合并成同一个队列出错。解决方法:java编程中,对队列使用foreach时对泛型对象移动时,其底层会处理成迭代器,非线程安全,换成for循环使用。问题三:达到时间的不确定导致编程逻辑混乱。解决问题:因为不知道第n秒达到是指第n秒开始还是第n秒结束,所以统一处理成第n秒结束时达到。问题四:两个链表引用同一个对象时,引用对象影响同时影响两个链表导致显示出错。解决问题:在重新产生一个对象,把原对象属性赋给新对象,分别存进去链表。遇到处理链表,则两个对象同时处理就好。3.5 系统测试以下测试数据为演示过程中某时刻(1) 先来先服务 (2) 非抢占式短作业优先 (3) 抢占式短作业优先 (4) 高响应比优先 (5) 轮转法 3.6 使用说明(1)主界面点击“进程调度(课程设计)”进入操作界面,其他为实验内容不做介绍。(2)底部有两个按钮“添加测试进程”和“启动进程调度”,点击“添加测试进程”添加任务要求5个测试数据,其上方有下拉菜单可选择对应调度算法后,再点击“添加测试进程”就可以进行调度演示。(3)在演示过程中无法添加进程和启动进程。系统自动检测是否完成,如4. 经验与体会android端操作系统课设演示系统经历了ui初步设计、任务要求完成、ui推倒重来设计三个主要过程。初期为了演示只能在小小的手机屏幕随意添加和布局显示块,接下来任务的实现是比较繁琐的。因为有之前实验进程调度的基础,所有5个算法难度一般,不过中间出现过一些小问题:操作java对象时的对象修改乱象、链表越界等等,不过经过调试和思考后都解决了。因为屏幕较小一次只能演示一个算法,考虑到不让用户退出就可以进行过多次测试,对代码进行了优化和循环处理,加上更新android ui进程涉及到跨进程通信,交叉处理比较麻烦,不过经过努力,最后还是解决了,心里蛮开心的。经过本次实验和课设的学习,自己动手实现了所有功能,对课设内容进程调度有了更深刻的了解,特别是在处理各种算法时遇到问题,使自己不得不冷静下来思考,一定程度上加深了自己的认知。5. 重要数据结构或源程序中的疑难部分说明 package com.example.caozuoxitong.model;/* * 课程设计进程类 * author yummy * 进程名 * 服务时间 * 达到时间 * 当前状态 * 等待时间 * */public class mycourseprocess implements comparable private string name; private int severtime;private int gettime; private string state;private int waittime;public string getname() return name;public void setname(string name) = name;public int getsevertime() return severtime;public void setsevertime(int severtime) this.severtime = severtime;public int getgettime() return gettime;public void setgettime(int gettime) this.gettime = gettime;public string getstate() return state;public void setstate(string state) this.state = state;public int getwaittime() return waittime;public void setwaittime(int waittime) this.waittime = waittime;/*实现comparable接口*排序是按照当前进程服务时间从小打到排序*/overridepublic int compareto(object another) / todo auto-generated method stubreturn this.getsevertime()-(mycourseprocess)another).getsevertime();package com.example.caozuoxitong.model;import android.r.string;/* * 进程执行情况表表项 * 表项包含:名字、完成时间、周转时间、带权周转时间 * author yummy * */public class mycourseprocesstime private string name; /进程名private double wanchengshijian; /完成时间private double zhouzhuanshijian;/周转时间private double daiquanzhouzhuan;/带权周转时间public double getwanchengshijian() return wanchengshijian;public void setwanchengshijian(double wanchengshijian) this.wanchengshijian = wanchengshijian;public double getzhouzhuanshijian() return zhouzhuanshijian;public void setzhouzhuanshijian(double zhouzhuanshijian) this.zhouzhuanshijian = zhouzhuanshijian;public double g

温馨提示

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

评论

0/150

提交评论