使用优先数法实现操作系统的进程调度.doc_第1页
使用优先数法实现操作系统的进程调度.doc_第2页
使用优先数法实现操作系统的进程调度.doc_第3页
使用优先数法实现操作系统的进程调度.doc_第4页
使用优先数法实现操作系统的进程调度.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

操作系统原理课程设计报告课题名称:使用优先数法实现操作系统的进程调度 姓 名: 刘武 班 级: BX1109 学 号: 42 指导老师: 苏庆刚 二一三年 十二 月二十日目 录一、操作系统原理课程设计的目的与要求41.1目的42.2要求4二、简述课程设计内容、主要功能和实现环境42.1课程设计内容42.2主要功能52.3实现环境5三、任务的分析、设计、实现和讨论53.1任务的分析53.2任务的设计与实现73.3程序源代码相应注释83.4程序的测试93.5设计说明10四、操作系统课程设计小结(收获、不足与建议)10参考文献11一、操作系统原理课程设计的目的与要求1.1目的进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。2.2要求设计一个有n个进程并发的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块一般应该包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。调度程序应包含23种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。算法应能显示或打印各个进程的PID、状态(运行状态R、等待状态W等)和参数(已运行时间等)的变化情况,便于观察诸进程的调度过程二、简述课程设计内容、主要功能和实现环境2.1课程设计内容 进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。选用优先数法五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数以及进程需要运行的时间片数,在创建进程时均有、由用户自定义,在进程执行中则由机器进行减运算。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数调度算法的具体实施办法。2.2主要功能本程序可选用优先数法对N个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算,根据优先级来调度进程成,用cpu在每个时间片内完成每个进程。2.3实现环境本次课程设计结合算法的特点,采用Windows操作系统平台。开发工具为Microsoft Visual C+6.0。三、任务的分析、设计、实现和讨论3.1任务的分析本程序可选用优先数法对N个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数以及进程需要运行的时间片数,在创建进程时均有、由用户自定义,在进程执行中则由机器进行减运算。下面介绍优先数调度算法:优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减1,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级,占用cpu的时间加1,接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。进程控制块PCB结构如下:进程ID链指针优先数占用CPU时间片数进程所需时间片数进程状态图3-1 PCB结构进程控制块链结构如下:TAILRUN1RHEAD3W5W2W图3-2 进程控制块链结构其中:RUN当前运行进程指针;HEAD进程就绪链链首指针;TAID进程就绪链链尾指针。3.2任务的设计与实现图3-3 算法流程图图3-4 程序运行流程图 本组程序主要用了4个函数:void init(),void insert(),prisch(),void print()。算法主要是比较优先数算法。我们的程序是没有手动输入的,里面的优先数和进程需要时间片都是随机产生的,然后有init()函数来利用数组的特点,调用数组元素,对优先数进行比较,然后选出优先数最大的进程,状态为R,剩下的进程继续比较调用insert()函数,同时产生等待队列,内容放在数组成员next里面。然后prisch()函数在循环中调用数组进行模拟进程运行,运行一次需要时间片减一,cup使用时间片加一,优先数减一,判断需要的时间片是否为0,为0,进程状态变成F,否则与等待队列的进程比较优先数,再次调用insert()函数,生成新的等待队列。直至等待队列为0,循环结束。程序中每改变进程状态,都会在屏幕上输出。如下图所示。本次程序在编写的过程中没遇到什么较大的困难,在同学的互相帮助下,还是挺圆满的完成了本次课设。进程占用cpu时间,运行一次+1进程的状态:W-就绪R-运行F-完成进程优先数,运行一次优先数-1下一个就绪id进程需要运行的时间(随机产生)进程名等待队列正在运行3.3程序源代码相应注释PCB:typedef struct nodechar name10; /进程标志符int prio; /进程运行优先数 Int oriprio; /进程初始优先数int alltime; /运行所需全部时间int cputime; /进程占用cpu时间int needtime; /进程到完成还要的时间char state; /进程的状态struct node *next; /链指针PCB;PCB *finish,*ready,*tail,*run; /队列指针int N,j,k, m;/进程数主函数:void create1(char alg) /优先数创建初始PCB信息insert1(PCB *q) /优先数的算法插入算法void priority(char alg) /优先数调度算法3.4程序的测试下图主要说明该程序算法的主要操作界面以及相关组列所代表的对象,以及相关的人员信息等。 图3-5 程序运行截图图3-6 程序运行可能出现的错误3.5设计说明(1)进程的调度采用优先数调度算法。(2)采用动态优先数法确定进程的优先级别。(3)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。(4)用户输入进程标志符以及进程所需时间,申请空间存放进程PCB信息四、操作系统课程设计小结(收获、不足与建议)本次课程设计的题目是进程调度优先数法。在本组的工作任务分配上,我被分在了PPT这一组,即参与PPT的制作。在组长抽完题目后,我们认真探讨了课设如何进行。我认真浏览了实验报告指导,对所要完成的实验有了大概的了解,回去后有详细的看了报告指导,为了完成实验,我先把课本第三章处理机调度与死锁看了看。常用的调度算法有:先进先出法,短进程优先法,时间片轮转法,优先级调度法,短作业优先调度算法,最高相应比优先调度。在多任务系统中,进程调度是CPU管理的一项核心工作。根据调度模式的不同,多任务系统有两种类型,即非抢占式和抢占式。其中,优先数法是非抢占式调度策略,进程调度算法是系统效率的关键,它确定了系统对资源,特别是对CPU资源的分配策略,因而直接决定着系统最本质的性能指标,如相应速度和吞吐量等。在设计程序的时候,遇到很多问题,我们从网上寻求参考的程序进行深度修改,在随进函数rand()的随机数的范围有些许不懂。总之,在本次课设中,我们组在开心愉悦的环境中完成了老师对我们的要求,希望本次课设最终能圆美结束。参考

温馨提示

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

评论

0/150

提交评论