ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:371.20KB ,
资源ID:2443048      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2443048.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进程调度程序设计报告.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进程调度程序设计报告.docx

1、进程调度程序设计报告 课程设计报告一、课程设计的目的和要求1、目的进程调度是处理机管理的核心内容。本设计要求用C语言编写和调试一个简单的进程调度程序。通过设计本可以加深理解有关进程控制块、进程队列的概念,并体会和了解最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法的具体实施办法。2、要求1)进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。2)每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。3)进程的优先数及需要的运行时间可以事先人

2、为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。4)每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。5)就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。6)每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以

3、便进行检查。7)重复以上过程,直到所有进程都完成为止。二、课程设计环境要求1、硬件环境联想系列电脑Intel(R) Pentium(R)DualCPU主频2GHz 内存1G2、软件环境Microsoft Windows Xp Professional版本2002装有Turbo C2.0软件三、设计任务介绍及系统需求分析1、设计任务的介绍根据设计任务书的要求,画出程序设计流程图,确定程序的功能,把整个程序根据功能要求分解为各个子程序,利用TC语言编写程序代码,然后进行上机调试、修改、进行连接、测试,写出设计总结报告。2、系统需求分析在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得

4、处理机执行。对于批量型作业而言,通常需要经历作业调度(又称高级调度或长程调度)和进程调度(又称低级调度或短程调度)两个过程后方能获得处理机;对于终端型作业,则通常只需经过进程调度即可获得处理机。在较完善的操作系统中,为提高内存的利用率,往往还设置了中级调度(又称中程调度)。对于上述的每一级调度,又都可采用不同的调度方式和调度算法。在本程序设计中要掌握的是进程调度的其中两种调度算法的应用。一个是最高优先数优先的调度算法(即把处理机分配给优先数最高的进程),另一个是先来先服务算法。最高优先数优先调度算法(即把处理机分配给优先数最高的进程)的基本思想是把CPU分配给就绪队列中优先数最高的进程。采用动

5、态优先数,即优先数在创建进程时给定一个初始值,当进程获得一次CPU后其优先数就减少1,然后把它插入就绪队列等待CPU。先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。四、概要设计1、最高优先数优先调度算法(即把处理机分配给优先数最高的

6、进程)实验步骤:(1)初始化进程信息。(2)将各个进程按优先数从高到低排列成就绪队列。(3)检查所有队列是否为空,若空则结束,否则将队首进程调入执行。(4)检查该运行进程是否运行完毕,若运行完毕,将此进程状态改为完成,插入另一个完成进程队列;否则,将该进程的优先数减1,然后重新对它进行排序,插入就绪队列适当位置后等待CPU。(5)重复步骤(3)、(4),直到就绪队列为空。2、先来先服务调度算法实验步骤:(1)初始化进程信息。(2)按先来先服务算法将进程排成就绪队列。(3)检查所有队列是否为空,若空则结束,否则将队首进程调入执行。(4)检查该运行进程是否运行完毕,若运行完毕,将此进程状态改为完成

7、;否则,继续运行直到此进程运行完为止,才运行就绪队列的下一个进程。(5)重复步骤(3)、(4),直到就绪队列为空。3、程序功能模块图:(两种算法程序共用) 五、详细设计1、功能模块设计(1)主要函数(最高优先数优先调度算法和先来先服务的核心函数相同): a.主函数b.初始化进程函数c.使用户输入仅为正整数的函数d.排序函数e.就绪函数f.查看函数g.显示函数(2)程序流程图 a最高优先数优先调度算法: b先来先服务调度算法: 2、数据结构设计(1)最高优先数优先调度算法:typedef struct pcb /*定义结构体数组,内部包含进程的信息*/ char name10; /*定义进程名*

8、/ int super; /*定义到达时间*/ int needtime; /*定义进程需要运行的时间*/ int runtime; /*定义进程已用CPU时间*/ char state; /*定义进程的运行状态*/ struct pcb* link; /*进程块的后继指针,用于连接进程队列*/ PCB; (2)先来先服务调度算法: typedef struct pcb /*定义结构体数组,内部包含进程的信息*/ char name10; /*定义进程名*/ int arrivetime; /*定义到达时间*/ int needtime; /*定义进程需要运行的时间*/ int runtime

9、; /*定义进程已用CPU时间*/ char state; /*定义进程的运行状态*/ struct pcb* link; /*进程块的后继指针,用于连接进程队列*/PCB; 3、函数功能描述(1)最高优先数优先调度算法: amain()主函数:掌控整个程序的运行过程,是程序的主体部分。 binput()初始化进程函数: 初始化各个进程的基本信息:如进程个数、进程名、进程需运行的时间、进程的优先数、进程的已运行时间、进程的状态。 cgeti()使用户输入仅为正整数的函数: 使用户输入的进程个数、进程需运行的时间、进程的优先数都为正整数。 dsort()排序函数:按优先数由高到低排列成就绪队列,

10、进而等待运行。 erunning()就绪函数:进程运行时间到,则置就绪状态。若已运行时间已达到需运行时间,则此进程已完成,插入另一个完成队列中;若未达到,则优先数减1,重新插入就绪队列中排序等待运行。 fcheck()查看函数:查看哪个进程正在执行,哪些进程在就绪队列中,哪些进程已经完成。 gdisp()显示函数:显示各个进程的信息。(2)先来先服务调度算法: amain()主函数:掌控整个程序的运行过程,是程序的主体部分。 binput()初始化进程函数: 初始化各个进程的基本信息:如进程个数、进程名、进程需运行的时间、进程的到达时间、进程的已运行时间、进程的状态。 cgeti()使用户输入

11、仅为正整数的函数: 使用户输入的进程个数、进程需运行的时间、进程的到达时间都为正整数。 dsort()排序函数:按到达时间从先到后排列成就绪队列,进而等待运行。 erunning()就绪函数:进程运行时间到,则置就绪状态。若已运行时间已达到需运行时间,则此进程已完成;若未达到,则继续运行直到时间达到为止。 fcheck()查看函数:查看哪个进程正在执行,哪些进程在就绪队列中,哪些进程已经完成。 gdisp()显示函数:显示各个进程的信息。六、调试过程1、最高优先数优先调度算法(1)先输入各个进程的信息 (2)进程运行的具体情况(部分调试结果) 2、先来先服务调度算法(1)先输入各个进程的信息

12、(2)进程运行的具体情况(部分调试结果) 3、当输入进程信息时,应输入正整数的信息输成字符或是其他不规范的数,则显示为:(两种算法程序都适用)七、结论与体会本次实验,成功实现了两种算法的主体功能。最高优先数优先调度算法(即把处理机分配给优先数最高的进程)的基本思想是把CPU分配给就绪队列中优先数最高的进程。采用动态优先数,即优先数在创建进程时给定一个初始值,当进程获得一次CPU后其优先数就减少1,然后把它插入就绪队列等待CPU。先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备队列中选择一个或多个最先进

13、入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。其实,这两种算法有一些不同之处。最高优先数优先算法较先来先服务算法多了进程优先数这个进程信息,此算法就是围绕进程优先数进行排序从而运行进程。当进程获得一次CPU后其优先数就减少1,然后把它插入就绪队列重新排序等待CPU;而先来先服务算法较前者则是多了进程到达时间这个进程信息,此算法则是围绕先进先服务的原则来排序从而运行进程,直到此进程运行完成,才继续运

14、行就绪队列的下一个进程。这两种算法也有很多共同之处,在初始化进程信息时,要注意有些进程信息必须输入正整数,所以为了实现这个功能,这两种调度算法中都调用了一个函数geti(),使得输入的数仅能为正整数,否则(当无输入或有输入但输入为字符、小数、负数等不符规则的数)必须重新输入才可继续运行程序。为了方便查看各个进程在每个时间片后的状态与信息,在这两种调度算法中,不仅将正在运行的进程信息和就绪队列的各个进程信息显示出来,还将已经完成的进程排成一个完成队列。最后将所有进程的信息进行查看与显示,方便用户及时了解各个进程的状态。八、参考文献1计算机操作系统第三版汤小丹、梁红兵、哲凤屏、汤子瀛编著,西安电子科技大学出版社2数据结构严蔚敏,吴伟明。北京:清华大学出版社,20063C语言程序设计田祥宏主编 西安电子科技大学出版社45附件:源程序清单最高优先数优先调度算法源程序清单:#include#include /*malloc函数的头文件*/ #include /*getchar函数的头文件*/ typedef struct pcb /*定义结构体数组,内部包含进程的信息*

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1