处理机调度程序_操作系统课程设计报告

合集下载

武汉理工大学操作系统处理机调度实验报告【范本模板】

武汉理工大学操作系统处理机调度实验报告【范本模板】

学生学号Xxx 实验课成绩学生实验报告书实验课程名称操作系统C开课学院计算机科学与技术学院指导教师姓名xxx学生姓名xxx学生专业班级xxxx2016—- 2017学年第 1 学期实验课程名称:操作系统C③用while进行循环控制选择不同的算法2.数据结构的设计记录不同作业信息的结构体数组。

struct node job[100];记录作业/进程详细信息的结构体typedef struct node {string name;double submit;//提交时间double start;//开始时间double run;//运行时间double end;//完成时间double Ti;//周转时间double Wi;//带权周转时间double H;//响应比int priority;//优先级}*work;3。

核心算法设计(1)按提交时间进行排序的算法Input:work p //指向作业的指针int N //作业的个数Process:void sort (work p,int N){for(int i=0;i<N;i++){(2)三、主要仪器设备及耗材1.安装了Windows XP或Windows 7或其它版本的Windows操作系统的PC机1台2.P C机系统上安装了Microsoft Visual Studio 2010开发环境第二部分:实验过程和结果(可加页)一、实现说明在VS2010中创建一个算法调度项目,对于不同的调度算法分别进行算法设计,对于算法的设计要特别注意作业的提交情况,实验中存储作业信息的结构体是相同的,采用结构体数组保存全部的作业,每次通过对结构体数组进行遍历计算不同算法需要的信息,最后在主函数中用while循环和switch语句进行各个调度算法的选择,最后经过不断的调试和运行,实现四个调度算法分别是先来先服务、短进程优先、优先级和最高响应比优先。

二、调试说明(调试手段、过程及结果分析)调试过程出现的问题比较多,第一个问题是对于不同作业提交的先后顺序要加以考虑,对于作业提交时间进行排序选择,必须选择提交时间在上一个作业结束时间之前的作业进行短进程,优先级,最高响应比排序,经过排序选择后,出现的问题是在进行作业调度完,有的作业出现了负的结束时间,经过调试分析,发现不能直接用上一个作业的结束时间直接当做下一个作业的开始时间,每次进行作业调度前要进行提交时间与上一个作业结束时间的比较,如果在作业提交前,下一个作业还没有提交,那么在下一个作业的开始时间就是它的提交时间。

操作系统课程设计报告-进程调度的模拟实现

操作系统课程设计报告-进程调度的模拟实现

操作系统课程设计报告专业计算机科学与技术学生姓名班级学号指导教师完成日期博雅学院ﻬ题目:进程调度的模拟实现的模拟实现一、设计目的本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念.二、设计内容1)概述选择一个调度算法,实现处理机调度。

设计要求:1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。

2)可选择进程数量3)本程序包括三种算法,用C或C++语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。

调度时总是选取优先数最大的进程优先运行2.每个进程的优先数,运行时间,由程序任意指定.3.为了调度方便,把进程按给定优先级(动态优先级算法中)从小到大排成一个队列。

按给定运行时间(短作业优先)从小到大排成一个队列用一个变量作为队首指针,指向队列的第一个进程。

4.处理机调度总是选队首进程运行。

由于本实验是模拟处理机调度,所以被选中的进程并不实际的启动运行,而是执行:优先数-1(动态优先级算法中)要求运行时间-1来模拟进程的一次运行。

5.进程运行一次后,若要求运行时间不等于0,则再将它加入队列(动态优先级算法中:按优先数大小插入.),且改变队首指针:若要求运行时间=0,则把它的状态改为完成(C)状态,且退出队列。

(5)对于遇到优先数一致的情况,采用FIFO策略解决.3。

概要设计(1)本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。

操作系统实验之处理机调度实验报告

操作系统实验之处理机调度实验报告

操作系统实验之处理机调度实验报告一、实验目的处理机调度是操作系统中的核心功能之一,本次实验的主要目的是通过模拟不同的处理机调度算法,深入理解操作系统对处理机资源的分配和管理策略,比较不同调度算法的性能差异,并观察它们在不同负载情况下的表现。

二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 Python 38。

实验中使用了 Python 的相关库,如`numpy`、`matplotlib`等,用于数据生成、计算和图形绘制。

三、实验原理1、先来先服务(FCFS)调度算法先来先服务算法按照作业到达的先后顺序进行调度。

先到达的作业先被服务,直到完成或阻塞,然后再处理下一个到达的作业。

2、短作业优先(SJF)调度算法短作业优先算法选择预计运行时间最短的作业先执行。

这种算法可以有效地减少作业的平均等待时间,但可能导致长作业长时间等待。

3、时间片轮转(RR)调度算法时间片轮转算法将处理机的时间分成固定长度的时间片,每个作业轮流获得一个时间片的处理时间。

当时间片用完后,如果作业还未完成,则将其放入就绪队列的末尾等待下一轮调度。

4、优先级调度算法优先级调度算法为每个作业分配一个优先级,优先级高的作业先被执行。

优先级可以根据作业的性质、紧急程度等因素来确定。

四、实验内容与步骤1、数据生成首先,生成一组模拟的作业,包括作业的到达时间、预计运行时间和优先级等信息。

为了使实验结果更具代表性,生成了不同规模和特征的作业集合。

2、算法实现分别实现了先来先服务、短作业优先、时间片轮转和优先级调度这四种算法。

在实现过程中,严格按照算法的定义和规则进行处理机的分配和调度。

3、性能评估指标定义了以下性能评估指标来比较不同调度算法的效果:平均等待时间:作业在就绪队列中的等待时间的平均值。

平均周转时间:作业从到达系统到完成的时间间隔的平均值。

系统吞吐量:单位时间内完成的作业数量。

4、实验结果分析对每种调度算法进行多次实验,使用不同的作业集合,并记录相应的性能指标数据。

处理机调度程序-操作系统课程设计报告

处理机调度程序-操作系统课程设计报告

北华航天工业学院《操作系统》课程设计报告课程设计题目:处理机调度程序作者所在系部:计算机与遥感信息技术学院作者所在专业:网络工程作者所在班级: ****** 作者姓名: *******作者学号: ******指导教师姓名: **** 完成时间: 2015.1.5北华航天工业学院教务处制课程设计任务书摘要计算机自从1946年第一台真正意义上的数字电子计算机ENIAC 的诞生以来,已经经历了1854年-1890年、1890年-20世纪早期、20世纪中期、20世纪晚期-现在四个阶段,每一个阶段的发展都发生了质与量的突飞猛进。

然而,计算机的发展只是代表了硬件的提升,对于软件,操作系统的发展更加引人注目。

操作系统(OS)是管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。

操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。

操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。

操作系统的型态非常多样,不同机器安装的OS可从简单到复杂,可从手机的嵌入式系统到超级电脑的大型操作系统。

目前微机上常见的操作系统有DOS、OS/2、UNIX、XENIX、LINUX、Windows、Netware等。

操作系统的不断提升对于计算机整体性能的提高有着至关重要的作用。

操作系统对于各个方面的要求都不得不提到效率的问题,计算机系统的处理机调度便变得尤为重要。

处理机调度的效率甚至可能成为提高计算机处理速度的瓶颈。

处理机调度就是对系统的资源做出合理的分配,因而,提高处理机的调度算法也变得尤为重要。

关键词:操作系统处理机调度系统资源目录第1章绪论 (1)1.1 处理机调度功能 (1)1.2 处理机调度性能准则 (1)第2章系统需求分析 (3)2.1 时间片轮转调度算法 (3)2.2 短作业优先调度算法 (3)2.3 动态优先级调度算法 (3)第3章系统总体设计 (4)3.1 系统功能设计 (4)3.2 时间片轮转法设计 (4)3.3 短作业优先算法设计 (4)3.4 动态优先级算法设计 (4)第4章系统实现 (6)4.1 时间片轮转法实现 (6)4.2 短作业优先算法实现 (9)4.3 动态优先级算法实现 (12)第5章系统使用说明 (14)第6章课程设计总结 (15)6.1 主要问题及解决办法 (15)6.2 课程设计体会 (15)6.3 自我评定 (15)参考文献 (16)第1章绪论在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机这一重要的资源。

处理机调度课程设计模板 操作系统

处理机调度课程设计模板 操作系统
七、参考文献
八、指导教师评语
签名:
年月日
课程设计成绩
附:1、课程设计的填写请按格式要求做;
2、文字内容宋体、五号、1.5倍行距;
3、程序代码字体Times New Roman,五号、1.5倍行距;
《操作系统》课程设计
处理机调度问题实践
系院:计算机科学系
学生姓名:xxxxxxx
学号:xxxxxxxxxxxx
专业:xxxxxxxxxxxx
年级:xxxxxxx
完成日期:xxxx年xx月
指导教师:刘栓
一、课程设计的性质与任务
1、加深对多道程序并发概念的理解,通过编程模拟处理机调度的流程。
2、培养学生能够独立进行知识综合,独立开发较大程序的能力。
2、根据单处理机,多任务的问题特性做好软件实现的需求分析。
3、可根据问题的实际需要,可选择进程数量。
4、当系统运行时,能直观地、动态地反映当前处理机状态及各进程执行的状况。
5、要求在系统安全状态的前提下,兼顾各个进程的公平。
三、课程设计的时间安排
课程设计总时间:8学时
四、课程设计的实验环境
硬件环境:CPU Intel(R) Core™2 Duo E4600 2.40GHz,内存DDR2 1.00GB,
3、培养提高学生软件开发能力和软件的调试技术。
4、培养学生开发大型程序的方法和相互合作的ቤተ መጻሕፍቲ ባይዱ神。
5、培养学生的创新意识。
6、培养学生的算法设计和算法分析能力。
7、培养学生对问题进行文字论述和文字表达的能力。
二、课程设计的内容及其要求
1、可利用先来先服务、短作业优先、响应比高者优先、多级反馈队列模型、时间片轮转法等,来实现处理机的调度。

操作系统课程设计报告进程调度

操作系统课程设计报告进程调度

前言操作系统(Operating System, 简称OS)是管理和控制计算机硬件与软件资源旳计算机程序, 是直接运营在“裸机”上旳最基本旳系统软件, 任何其他软件都必须在操作系统旳支持下才干运营。

操作系统是顾客和计算机旳接口, 同步也是计算机硬件和其他软件旳接口。

操作系统旳功能涉及管理计算机系统旳硬件、软件及数据资源, 控制程序运营, 改善人机界面, 为其他应用软件提供支持, 让计算机系统所有资源最大限度地发挥作用, 提供多种形式旳顾客界面, 使顾客有一种好旳工作环境, 为其他软件旳开发提供必要旳服务和相应旳接口等。

事实上, 顾客是不用接触操作系统旳, 操作系统管理着计算机硬件资源, 同步按照应用程序旳资源祈求, 分派资源, 如: 划分CPU时间, 内存空间旳开辟, 调用打印机等。

操作系统旳重要功能是资源管理, 程序控制和人机交互等。

计算机系统旳资源可分为设备资源和信息资源两大类。

设备资源指旳是构成计算机旳硬件设备, 如中央解决器, 主存储器, 磁盘存储器, 打印机, 磁带存储器, 显示屏, 键盘输入设备和鼠标等。

信息资源指旳是寄存于计算机内旳多种数据, 如系统软件和应用软件等。

操作系统位于底层硬件与顾客之间, 是两者沟通旳桥梁。

顾客可以通过操作系统旳顾客界面, 输入命令。

操作系统则对命令进行解释, 驱动硬件设备, 实现顾客规定。

本次课程设计我们将对上学期所学旳知识进行系统旳应用, 而达到巩固知识旳作用目录1问题概述 (2)2需求分析 (2)3 概要设计 (2)3.1重要功能 (2)3.2 模块功能构造 (3)3.3 软硬件环境 (3)3.4数据构造设计 (3)4 具体设计 (4)4.1“先来先服务(FCFS)调度算法” (4)4.2“短进程调度算法(SPF)” (7)4.3“高响应比优先调度算法” (10)4.4“优先级调度(非抢占式)算法” (13)5 系统测试及调试 (15)5.1测试 (15)5.2调试过程中遇到旳问题 (16)6 心得体会 (17)7 参照文献 (18)8 附录 (19)1问题概述编写一种进程调度程序, 容许多种进程并发执行。

处理机调度操作系统实验报告

处理机调度操作系统实验报告
q=(pcb *)malloc(sizeof(pcb));
scanf("%s",q->name);
scanf("%d",&q->needtime);
q->cputime = 0;
q->priority = P_TIME - q->needtime;
q->process = ready;
q->next = NULL;
printf("2 ROUNDROBIN\n");
printf("3 EXIT\n");
}
pcb* get_process(){
pcb *q;
pcb *p; //头指针
pcb *t; //尾指针
int i = 0;
printf("input name and time\n");
while (i < P_NUM){
int i = 0;
printf("input name and time\n");
while (i<P_NUM){
q=(pcb *)malloc(sizeof(pcb));
scanf("%s",q->name);
scanf("%d",&q->needtime);
q->cputime = 0;
q->count = 0;
t->cputime++;
}
}
void priority_cal(){
pcb *p;
p = get_process();
int cpu = 0;

实验一 处理机调度实验报告

实验一 处理机调度实验报告

实验一处理机调度实验报告一、实验目的处理机调度是操作系统中的一个重要组成部分,其目的是合理地分配处理机资源,以提高系统的性能和效率。

本次实验的主要目的是通过模拟处理机调度算法,深入理解不同调度算法的工作原理和性能特点,并能够对它们进行比较和分析。

二、实验环境本次实验使用了以下软件和工具:1、操作系统:Windows 102、编程语言:Python3、开发环境:PyCharm三、实验内容1、先来先服务(FCFS)调度算法先来先服务调度算法按照作业或进程到达的先后顺序进行调度。

即先到达的作业或进程先得到处理机的服务。

2、短作业优先(SJF)调度算法短作业优先调度算法优先调度运行时间短的作业或进程。

在实现过程中,需要对作业或进程的运行时间进行预测或已知。

3、高响应比优先(HRRN)调度算法高响应比优先调度算法综合考虑作业或进程的等待时间和运行时间。

响应比的计算公式为:响应比=(等待时间+要求服务时间)/要求服务时间。

4、时间片轮转(RR)调度算法时间片轮转调度算法将处理机的时间分成固定大小的时间片,每个作业或进程在一个时间片内运行,当时间片用完后,切换到下一个作业或进程。

四、实验步骤1、设计数据结构为了表示作业或进程,设计了一个包含作业或进程 ID、到达时间、运行时间和等待时间等属性的数据结构。

2、实现调度算法分别实现了上述四种调度算法。

在实现过程中,根据算法的特点进行相应的处理和计算。

3、模拟调度过程创建一组作业或进程,并按照不同的调度算法进行调度。

在调度过程中,更新作业或进程的状态和相关时间参数。

4、计算性能指标计算了平均周转时间和平均带权周转时间等性能指标,用于评估不同调度算法的性能。

五、实验结果与分析1、先来先服务(FCFS)调度算法平均周转时间:通过计算所有作业或进程的周转时间之和除以作业或进程的数量,得到平均周转时间。

在 FCFS 算法中,由于按照到达顺序进行调度,可能会导致长作业或进程长时间占用处理机,从而使平均周转时间较长。

操作系统 课程设计 处理机调度 图形界面 完整报告

操作系统 课程设计 处理机调度 图形界面 完整报告

目录第一章概述 (1)1.1需求分析 (1)1.2背景设计 (1)第二章概要设计 (2)第三章详细设计 (4)3.1高响应比调度算法 (4)3.2时间片轮转法 (5)3.3短进程优先法 (7)第四章调试分析与测试结果 (9)第五章总结 (13)第六章参考文献 (14)第七章附录 (15)第一章概述1.1需求分析进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C语言编写一个进程调度模拟程序,使用短作业优先调度算法,高响应比调度算法,时间片轮转调度算法实现进程调度。

可以手动阻塞与唤醒。

并用MFC实现图形界面。

本实验可加深对进程调度算法的理解。

1.2背景设计在OS中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。

对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;在分时系统中,为保证系统具有合理的响应时间,采用轮转法进行调度。

采用算法时,则要考虑多方面因素,以便达到最佳效果。

第二章概要设计设计一个有多个进程共行的进程调度程序。

进程调度算法:短作业优先调度算法,高响应比调度算法,时间片轮转调度算法每个进程有一个进程控制块( PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、服务时间、进程状态等等。

struct progress{CString Name; //进程名称CString Start; //创建时间int ServiceT; //服务时间int RunningT; //消逝时间int RemainT;//剩余时间int id;//进程标识符CProgressCtrl* pro; //指向进度条的指针int Rp;//进程成为就绪进程的时间float prio;//进程优先权};进程的优先权为:响应时间/要求服务时间。

进程的运行时间以时间片为单位进行计算。

操作系统-课程设计报告-处理机调度程序

操作系统-课程设计报告-处理机调度程序

操作系统课程设计报告学校:广州大学学院:计算机科学与教育软件学院班级:计算机127班课题:处理机调度程序任课老师:陶文正、陈文彬姓名:黄俊鹏学号:1200002111班内序号:27成绩:日期:2015年1月6日一、设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

二、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。

2)可选择进程数量3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。

三、设计思路及算法思想1.界面菜单选项一级菜单提供2个选项:①自动生成进程数量②手动输入所需进程数量一级菜单选择完毕后进入二级菜单:①重新生成进程②时间片轮转法③短作业优先算法④动态优先级算法⑤退出程序2.调度算法程序所用PCB结构体需要用到的进程结构体如上图所示1)时间片轮转法主要是设置一个当前时间变量,curTime和时间片roundTime。

遍历进程组的时候,每运行一个进程,就把curTime += roundTime。

进程已运行时间加roundTime2)短作业优先算法遍历进程组,找到未运行完成并且运行时间最短的进程,让它一次运行完成,如此往复,直到所有进程都运行完成为止。

3)动态优先级算法做法跟短作业优先算法类似,此处主要是比较进程的优先数,优先级高者,先执行。

直到全部执行完毕。

当一个进程运行完毕后,适当增减其余进程的优先数,以达到动态调成优先级的效果。

3.程序流程图四、运行截图1)启动后输入5,生成5个进程2)输入1,选择时间片轮转法。

自动输出结果,分别是时间片为1和4的结果3)输入2,选择短作业优先算法4)输入3,选择动态优先级算法5)输入0,重新生成进程,再输入3,生成3个进程,选择2.短作业优先算法6)输入q,退出五、心得体会通过这次实验,让我对操作系统的进程调度有了更进一步的了解。

操作系统单处理机系统的进程调度

操作系统单处理机系统的进程调度

操作系统单处理机系统的进程调度第一篇:操作系统单处理机系统的进程调度一.实验内容描述1.目的(1)了解Windows内存管理器(2)理解Windows的地址过程2.内容任意给出一个虚拟地址,通过WinDbg观察相关数据并找到其物理地址二.理论分析Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上的最小保护单位 1.Windows内存管理器Windows的内存管理主要由Windows执行体中的虚存管理程序负责,并由环境子系统负责,并由环境子系统负责与具体API相关的一些用户态特性的实现。

虚存管理程序是Windows中负责内存管理的那些子程序和数据结构的集合内存管理器的主要任务是:地址变换:将一个进程的虚拟地址空间转译为物理内存地址交换:当内存不足时,将内存中的有些内容转移到磁盘上,并且以后还要再次将这些内容读回2.Windows内存管理策略Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上最小的保护单位。

根据硬件的体系结构不同,页面尺寸被分为两种,大页面和小页面。

X86系统下小页面为4KB,大页面为4MB。

大页面的优点是:当引用同一页面内其他数据时,地址转移的速度会很快。

不过使用大页面通常要较大的内存空间,而且必须用一个单独的保护项来映射,因此可能会造成出现错误而不引发内存访问违例的情况。

通常PC机都为小页面 3.Windows虚拟地址空间布局 x86结构下的布局方式:默认情况下,32位Windows系统中每个用户进程可以占有2GB 的私有地址空间。

操作系统占有另外的2GB 2GB用户的进程地址空间布局如表:2GB的系统地址空间布局如同:3.虚拟地址转译地址转译是指将进程的虚拟地址空间映射到实际物理页面的过程。

x86系统中地址转译过程如图:关键数据结构如下:页目录:每个进程都有一个页目录,它是内存管理器为了映射进程中所有的页表位置而创建的一个页面。

进程也目录的地址被保存在内核进程快KPROCESS中,在x86系统上,它被映射到虚拟地址0xC0300000,当一个进程正在执行时,CPU可以通过寄存器CR3知道该进程页目录的位置。

操作系统 处理机调度 课程设计报告

操作系统 处理机调度 课程设计报告

中南大学《操作系统》课程设计报告设计报告题目:处理机调度模拟程序学院:信息科学与工程学院专业:电子信息0802姓名:王昊学号:0909080925指导教师:张晓勇完成时间:2011年7月12日目录一、课程设计题目 (3)二、基本概念及思想 (3)三、部分程序主要流程图 (9)四、操作截图 (11)五、程序源代码 (12)六、心得体会及总结 (21)一.课程设计题目:课题1:理机调度模拟程序:选择一个调度算法,实现处理机调度。

设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

设计要求:1)进程调度算法包括:时间片轮转法,短作业优先算法,最高响应比优先算法。

2)可选择进程数量3)本程序包括三种算法,可用C语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数及每个进程的运行时间,每个进程的优先数由随机函数产生且优先数随等待时间而变化,执行,显示结果。

二.基本概念及思想:(1)进程的创建:由系统为某个进程设置一个进程控制块PCB,用于对进程进行控制和管理。

进程任务完成,由系统收回其PCB,该进程便消亡。

(2)进程的三种状态:运行、就绪、完成。

进程的三种状态可以通过设计三个链队列来实现:finish为完成队列的头指针,ready为就绪队列的头指针,tail 为循环轮转法队列的尾指针。

因为每一时刻,CPU只能运行一个进程,所以运行队列只有一个run指针指向当前运行进程。

(3)进程调度的功能:按照一定的策略从就绪队列的多个进程中选取一个进程,使其获得CPU而运行。

①动态优先数调度算法:思想:为每一个进程设一个优先数,它总是把处理机给就绪队列中具有最高优先级的进程。

初始的进程优先数是随机产生的,随着进程的运行对优先数进行调整,每次运行时都是从就绪队列中选取优先数最大的进程运行,所以将就绪队列按照优先数的大小从高到低排序,这样,每次取对首进程即可。

计算机操作系统-处理机调度实验报告

计算机操作系统-处理机调度实验报告

中南大学实验名称:处理机调度课程名称:计算机操作系统学生姓名盛希玲学号 ********** 学院信息科学与工程学院专业班级电子信息工程0602 完成时间 2008年10月12日目录一实验内容 (2)二实验目的 (2)三实验题目 (2)四基本思想 (2)五算法分析 (2)六流程图 (3)七算法描述 (4)八运行输出结果 (9)一实验内容选择一个调度算法,实现处理机调度。

二实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。

本实验模拟实现处理机调度,以加深了解处理机调度的工作。

三实验题目设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。

四基本思想先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。

每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。

如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。

在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。

五算法分析定义一个结构体,此包含了PCB的信息:struct PCB{char PID[5]; /*进程名*/int needtime; /*要求运行的时间*/int cputime; /*已运行时间*/int priority; /*优先权(越小越高)*/int starttime; /*进入就绪队列的时间*/int overtime; /*运行完成的时间*/int state; /*状态:1就绪2运行3完成*/struct PCB *next;};子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。

main()函数中用一while循环输出进入时间片的进程状态。

六流程图七算法描述#define NULL 0#define LEN sizeof(struct PCB)#include"stdio.h"#include"stdlib.h"struct PCB{char PID[5]; /*进程名*/int needtime; /*要求运行的时间*/int cputime; /*已运行时间*/int priority; /*优先权(越小越高)*/int starttime; /*进入就绪队列的时间*/int overtime; /*运行完成的时间*/int state; /*状态:1就绪2运行3完成*/struct PCB *next;};struct PCB *create(int num,int n)/*创建进程,并将进程按优先级顺序插入队列中*/ {struct PCB *head,*p,*p1,*p2;int i;head=NULL; /*头指针指零*/for(i=1;i<=num;i++) /*循环建立所有进程*/{printf("请输入第%d个进程的信息\n",i);p=(struct PCB *)malloc(LEN); /*开辟一个空间*/printf("进程名:"); /*输入进程名*/scanf("%s",p->PID);printf("要求运行的时间:"); /*输入要运行的时间*/scanf("%d",&p->needtime);p->cputime=0; /*占用处理机的时间赋为零*/printf("优先权:"); /*输入优先权*/scanf("%d",&p->priority);if(n==1)p->starttime=0; /*进入就绪队列的时间赋为零*/else{printf("进入就绪队列时间:"); /*输入进入就绪队列的时间*/scanf("%d",&p->starttime);}p->overtime=-1; /*运行没有结束所以运行完成的时间赋为-1*/p->state=1; /*状态赋为就绪状态*/p1=head; /*p1指针指向头指针*/if(head==NULL) /*如果头指针为零将头指针指向新建立的进程*/ {head=p;head->next=NULL;}else /*头指针不为零的情况*/{if(n==1)while(p1!=NULL&&p->priority>p1->priority) /*查找插入点*/{p2=p1;p1=p1->next;}elsewhile(p1!=NULL&&p->starttime>p1->starttime) /*查找插入点*/{p2=p1;p1=p1->next;}if(head==p1) /*优先权的值最小作为表头*/{p->next=head;p2=head=p;}else /*否则的话插入*/{p2->next=p;p->next=p1;}}}return(head);}void main(){char now[5];int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;struct PCB*head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3;over=NULL;printf("初始化进程...\n");printf("输入总的就绪进程数:");scanf("%d",&num);head=create(num,1); /*建立就绪进程的链表*/printf("输入将会就绪的进程数:");scanf("%d",&num1); /*建立将会进入就绪进程的链表*/later=create(num1,2);printf("cpu是否开始运行:1是 2不是--");scanf("%d",&cho);if(cho==1) /*处理机开始进行调度*/{printf("现在的时间是:");scanf("%s",now);printf("显示所有就绪的进程:\n");p2=head;printf("进程名\t要求运行时间\t已运行时间\t优先权\t状态(1就绪2运行3结束)\n");while(p2!=NULL){printf("%s\t%d\t\t%d\t\t%d\t%d\n",p2->PID,p2->needtime,p2->cputime ,p2->priority,p2->state);p2=p2->next;}printf("请输入时间片总数:");scanf("%d",&timepiece);printf("请输入时间片的时间:");scanf("%d",&time);printf("运行正式开始!\n");head1=head;printf("\t\t进程名\t要求运行时间\t已运行时间\t优先权\t状态\n"); for(i=1;i<=timepiece;i++) /*将进入时间片运行的进程用头指针head1指示,并改变就绪进程头指针head的指向*/{if(head!=NULL){p=head;head=head->next;}else break;}p->next=NULL;while(head1!=NULL) /*就绪进程头指针不为零就循环*/{head1->state=2; /*状态:1就绪2运行3完成*/for(j=1;j<=time;j++) /*每个时间片所需时间的循环*/{clock++; /*定时器每秒加1*/if(later!=NULL&&clock==later->starttime)/*如果将进入就绪队列的进程时间到达加入就绪队列*/ {l=later;l1=head;later=later->next;if(head==NULL){head=l;head->next=NULL;}else{while(l1!=NULL&&l1->priority<=l->priority){l2=l1;l1=l1->next;}if(l1==head){l->next=head;head=l;}else{l2->next=l;l->next=l1;}}}flag=0;printf("\n%3d秒时间片第%d秒 ",clock,j);q=head1;if(head1->needtime>head1->cputime) /*以运行时间和优先权都加1*/ {head1->cputime++;head1->priority++;while(q) /*运行队列不为零输出其信息*/ {if(q==head1)printf("%s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputime,q->pr iority,q->state);elseprintf("\t\t %s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputim e,q->priority,q->state);q=q->next;}}if(head1->needtime==head1->cputime)/*运行完成将其放入over为头指针的链表中*/ {head1->state=3;head1->overtime=clock;if(over==NULL){over=head1;head1=head1->next;over->next=NULL;}elseif(over!=NULL&&head1!=NULL){p1=head1->next;p0=over;over=head1;over->next=p0;head1=p1;}flag=1;}if(flag==1) break;}if(flag==1) /*有进程结束的情况*/{if(head!=NULL) /*就绪队列不为零将优先权最高的放入运行链表中*/ {q1=head;head=head->next;q2=head1;while(q2!=NULL&&q2->priority<=q1->priority){q3=q2;q2=q2->next;}if(q2==head1){q1->next=head1;head1=q1;}else{q3->next=q1;q1->next=q2;}}}else /*无进程结束的情况,寻找优先权最高的运行*/{head1->state=1;q1=head1;head1=head1->next;q2=head1;while(q2!=NULL&&q2->priority<=q1->priority){q3=q2;q2=q2->next;}if(q2==head1){q1->next=head1;head1=q1;}else{q3->next=q1;q1->next=q2;}}}}printf("cpu结束运行!\n");printf("是否输出所有结束的进程:1是2不是--");scanf("%d",&choo);if(choo==1) /*输出所有完成运行的进程*/{printf("开始时间:%s\n",now);printf("进程名\t要求运行时间\t进入就绪队列的时间\t运行完成的时间\n");while(over!=NULL){printf("%s\t%d\t\t%d\t\t\t%d\n",over->PID,over->needtime,over->startt ime,over->overtime);over=over->next;}}}八运行输出结果初始化进程如右图显示现在的时间和所有就绪的进程输入时间片的总数和每个时间片的时间运行时显示的信息。

操作系统-课程设计报告-处理机调度程序

操作系统-课程设计报告-处理机调度程序

操作系统课程设计报告学校:广州大学学院:计算机科学与教育软件学院班级:计算机127 班课题:处理机调度程序任课老师:陶文正、陈文彬姓名:黄俊鹏学号:1200002111班内序号:27成绩:日期:2015 年 1 月 6 日、设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法2)可选择进程数量3)本程序包括三种算法,用C 语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。

三、设计思路及算法思想1. 界面菜单选项一级菜单提供2 个选项:① 自动生成进程数量② 手动输入所需进程数量一级菜单选择完毕后进入二级菜单:①重新生成进程②时间片轮转法③短作业优先算法④动态优先级算法⑤退出程序2. 调度算法typedef st ruct char name;mr pri-ority; intrunnirtgrime;"肚先註 "运和时Eint arriveTiflie;"到达时剖int beg in Time;"幵皓时旬int TinishTiJiie: "尧成时列int cyclingTlme;double weigthC/clingTime:kint int >PCB;hadRunTimt;finish:"已经运行呼间/At否完咸程序所用PCB结构体需要用到的进程结构体如上图所示1)时间片轮转法主要是设置一个当前时间变量,curTime和时间片roundTime。

遍历进程组的时候,每运行一个进程,就把curTime += roundTime。

操作系统实验之处理机调度实验报告

操作系统实验之处理机调度实验报告
四、开发工具及主要源代码
1、开发工具
Clion for mac 2016,采用 cmake 编译。
2、主要源码
//先来先服务 void FCFS(List *p, int count) {
List temp; int i, j; //按照到达时间排序 for (i = 1; i < count; i++) {
min = 100; temp = p[k].Finish_time; for (j = 0; j < count; j++) {
if (p[j].order != 0 || temp - p[j].Arrival_time < 0) continue;
if (min > p[j].Service_time) {
max = 0;
temp = p[k].Finish_time; //找响应比最高任务 for (j = 0; j < count; j++) {
if (p[j].order != 0 || temp - p[j].Arrival_time <= 0) continue;
if (max < (temp - p[j].Arrival_time) / p[j].Service_time) {
if (temp > p[i].Arrival_time) {
temp = p[i].Arrival_time; k = i; } } //按照响应比大小设置优先级,以及相应参数 for (i = 0; i < count; i++) { p[k].order = ++flag; p[k].Start_time = temp; p[k].Wait_time = temp - p[k].Arrival_time; p[k].Finish_time = temp + p[k].Service_time; p[k].Turnover_time = p[k].Finish_time - p[k].Arrival_time; p[k].WeightedTurn_time = p[k].Turnover_time / p[k].Service_time;

操作系统通用处理器调度演示程序课程设计总结报告Word版

操作系统通用处理器调度演示程序课程设计总结报告Word版

湖南大学信息科学与工程学院《操作系统课程设计》总结报告题目:通用处理器调度演示实验专业:软件工程班级:软件3班、软件4班姓名:朱文喆、黄强学号:201426010306、201426010421设计时间:2017/6/26-2017/7/7一、课程设计目的操作系统课程设计是软件工程专业的主要实践性教学环节。

在进行了专业基础课和《操作系统》课程的学习基础上,设计或分析一个实际的操作系统旨在加深对计算机硬件结构和系统软件的认识,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力,为毕业设计和以后的工程实践打下良好的基础。

二、课程设计内容与要求2.1设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个,也就是能运行的进程数大于处理机个数,为了使系统中的进程有条不紊地工作,必须选用某种调度策略,在一定的时机选择一个进程占有处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

2.2设计要求(多道、单处理机)1) 进程调度算法包括:时间片轮转算法、先来先服务算法、短作业优先算法、静态优先权优先调度算法、高响应比调度算法。

2) 每一个进程有一个PCB,其内容可以根据具体情况设定。

3) 进程数、进入内存时间、要求服务时间、作业大小、优先级等均可以在界面上设定。

4) 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化。

5) 可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间同步关系,故只有两种状态)。

6) 采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列。

7) 有能比较的功能,可比较同一组数据在不同调度算法下的平均周转时间。

8) 具有一定的数据容错性。

三、功能模拟系统分析与设计3.1系统分析本课程设计的目的就是模拟一种通用处理器的五种调度算法来实现进程调度的过程,加深对进程调度的理解,输出采用采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列,进程控制块(PCB)是这个程序设计的核心,PCB包含了到达时间,运行时间,优先级等关键数据,要求可以用五种调度算法演示,我们可以用策略模式把五个算法打包通过一个接口连接CPU,实现算法和CPU的分离,算法有5五种,分别实现不同的调度演示(时间片轮转算法、先来先服务算法、短作业优先算法、静态优先权优先调度算法、高响应比调度算法)我们采用MVC(模型-视图-控制器)的设计方法,输入方式的采用界面直接输入和文件读取输入两种方法,视图主要展示进程的进程名、到达时间、运行时间、优先级、时间片、响应时间、结束时间、周转时间,表示方法我们采用Java图形界面输出,动态演示调度算法的实现过程,以加深对操作系统进程调度的理解。

计算机操作系统进程调度实验报告

计算机操作系统进程调度实验报告

操作系统实验题:设计一若干并发进程的进程调度程序一、实验目的无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。

这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。

进程调度是处理机管理的核心内容。

本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。

通过本实验可以加深理解有关进程控制块、进程队列的概念。

并体会了优先数和先来先服务调度算法的具体实施办法。

二、实验要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.三、实验内容进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。

每个进程有一个进程控制块( PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

就绪进程获得 CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止。

操作系统实验报告一处理机调度

操作系统实验报告一处理机调度

实验课程名称:
workspace[i].offTim=workspace[i].costTim+workspace[i].startTim;
workspace[i].Ti=workspace[i].offTim-workspace[i].upTim;
workspace[i].Tr=workspace[i].Ti/workspace[i].costTim;
}
*T+=workspace[i].Ti;//计算平均周转时间
*W+=workspace[i].Tr;//计算平均带权周转时间
}
}
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)测试用例一结果:
测试用例二结果:
三、实验心得
通过本次实验进一步理解了处理机调度问题的处理算法,学习到算法适用的前提是作业提交成功。

在实验编程过程中由于对一些概念理解不清楚导致实验结果出错,但通过调整修改得出正确结果如上。

在实验过程中代码相对简介,输出界面直观整齐易于分析,但仍有缺陷待改进。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北华航天工业学院《操作系统》课程设计报告课程设计题目:处理机调度程序作者所在系部:计算机与遥感信息技术学院作者所在专业:网络工程作者所在班级: ****** 作者姓名: *******作者学号: ******指导教师姓名: **** 完成时间: 2015.1.5北华航天工业学院教务处制课程设计任务书摘要计算机自从1946年第一台真正意义上的数字电子计算机ENIAC 的诞生以来,已经经历了1854年-1890年、1890年-20世纪早期、20世纪中期、20世纪晚期-现在四个阶段,每一个阶段的发展都发生了质与量的突飞猛进。

然而,计算机的发展只是代表了硬件的提升,对于软件,操作系统的发展更加引人注目。

操作系统(OS)是管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石。

操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。

操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。

操作系统的型态非常多样,不同机器安装的OS可从简单到复杂,可从手机的嵌入式系统到超级电脑的大型操作系统。

目前微机上常见的操作系统有DOS、OS/2、UNIX、XENIX、LINUX、Windows、Netware等。

操作系统的不断提升对于计算机整体性能的提高有着至关重要的作用。

操作系统对于各个方面的要求都不得不提到效率的问题,计算机系统的处理机调度便变得尤为重要。

处理机调度的效率甚至可能成为提高计算机处理速度的瓶颈。

处理机调度就是对系统的资源做出合理的分配,因而,提高处理机的调度算法也变得尤为重要。

关键词:操作系统处理机调度系统资源目录第1章绪论 (1)1.1 处理机调度功能 (1)1.2 处理机调度性能准则 (1)第2章系统需求分析 (3)2.1 时间片轮转调度算法 (3)2.2 短作业优先调度算法 (3)2.3 动态优先级调度算法 (3)第3章系统总体设计 (4)3.1 系统功能设计 (4)3.2 时间片轮转法设计 (4)3.3 短作业优先算法设计 (4)3.4 动态优先级算法设计 (4)第4章系统实现 (6)4.1 时间片轮转法实现 (6)4.2 短作业优先算法实现 (9)4.3 动态优先级算法实现 (12)第5章系统使用说明 (14)第6章课程设计总结 (15)6.1 主要问题及解决办法 (15)6.2 课程设计体会 (15)6.3 自我评定 (15)参考文献 (16)第1章绪论在多道程序设计系统中,内存中有多道程序运行,他们相互争夺处理机这一重要的资源。

处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

1.1 处理机调度功能一般情况下,当占用处理机的进程因为某种请求得不到满足而不得不放弃CPU进入等待状态时,或者当时间片到,系统不得不将CPU分配给就绪队列中另一进程的时候,都要引起处理机调度。

除此之外,进程正常结束、中断处理等也可能引起处理机的调度。

因此,处理机调度是操作系统核心的重要组成部分,它的主要功能如下:(1)记住进程的状态,如进程名称、指令计数器、程序状态寄存器以及所有通用寄存器等现场信息,将这些信息记录在相应的进程控制块中。

(2)根据一定的算法,决定哪个进程能获得处理机,以及占用多长时间。

(3)收回处理机,即正在执行的进程因为时间片用完或因为某种原因不能再执行的时候,保存该进程的现场,并收回处理机。

处理机调度的功能中,很重要的一项就是根据一定算法,从就绪队列中选出一个进程占用CPU运行。

可见,算法是处理机调度的关键。

1.2 处理机调度性能准则处理机调度,有许多不问的调度算法,不同的调度算法具有不同的特性。

因此,在介绍算法之前,先介绍衡量一个算法的基本准则。

衡量和比较调度算法性能优劣主要有一下几个因素:(1)CPU利用率。

CPU是计算机系统中最重要的资源,所以应尽可能使CPU保持忙,使这一资源利用率最高。

(2)吞吐量。

CPU运行时表示系统正处于工作状态,工作量的大小是以每单位时间所完成的作业数目来描述的,这就叫吞吐量。

(3)周转时间。

指从作业提交到作业完成所经过的时间,包括作业等待,在就绪队列中排队,在处理机上运行以及进行输入/输出操作所花时间的总和。

(4)等待时间。

处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。

因此,衡量一个调度算法优劣常常简单的考察等待时间。

(5)响应时间。

指从作业提交到系统作出响应所经过的时间。

在交互式系统中,作业的周转时间并不一定是最好的衡量准则,因此,常常使用另一种度量准则,即响应时间。

从用户观点看,响应时间应该快一点好,但这常常要牺牲系统资源利用率为代价。

第2章系统需求分析FCFS比较有利于长作业SJF比较有利于短作业和优先级调度算法仅对某一类作业有利,相比之下,它能全面满足不同类型作业的需求,较好实现公平性与资源利用率之间的平衡。

对交互型作业,由于通常较短,这些作业在第一队列规定的时间片内完成,可使用户感到满意;对短批作业,开始时在第一队列中执行一个时间片就可完成,便可与交互型作业一样获得快速晌应,否则通常也仅需在第二、第三队列中各执行一个时间片即可完成,其周转时间仍较短;对长批作业,它们依次在第一至第n个队列中轮番执行,不必担心长时间得不到处理。

2.1 时间片轮转调度算法(RR)时间片轮转调度算法的基本思想是:对就绪队列中的每一进程分配一个时间片,时间片的长度q一般从10ms-1100ms不等。

把就绪队列看成是一个环状结构,调度程序按时间片长度q轮流调度就绪队列中的每一进程,使每一进程都有机会获得相同长度的时间占用处理机运行。

时间片轮转调度算法在分时系统中,是一种既简单又有效的调度策略。

一个分时系统有许多终端。

终端用户在各自的终端设备上同时使用计算机。

如果某个终端用户的程序长时间地占用处理机,那么其他终端用户的请求就不能得到即时相应。

一般说来,终端用户提出请求后,能在几秒钟内得到响应也就感到满意了。

采用时间片轮转算法,可以使系统即时地相应各终端用户的请求。

时间片轮转调度算法的性能极大的依赖于时间片长度q的取值,如果时间片过大。

则RR算法就退化为FIFO算法了;反之,如果时间片过小,那么,处理机在各进程之间频繁转接,处理机时间开销变得很大,而提供给用户程序的时间将大大减少。

2.2 短作业优先调度算法(SJF)根据估计运行时间的长短将各个进程排成一个队列(估计运行时间最短的进程放在对首)每次运行将对首进程投入运行,直道运行结束,将此进程连接到完成队列的队尾。

然后,再将下一个对首投入运行,直到所有的进程都运行完毕。

2.3 动态优先级调度算法进程的动态优先级一般根据以下原则确定:根据进程占用有CPU时间的长短来决定。

根据就绪进程等待CPU的时间长短来决定。

第3章系统总体设计3.1 系统功能设计本系统实现了处理机调度。

总体分为3个模块:时间片轮转法、短作业优先算法、动态优先级算法。

如图3-1所示。

图3-1 系统功能模块图3.2 时间片轮转法设计将所有进程按照先来先服务的规则排成一个队列,把CPU分配给就绪队列地对首进程并规定它的执行时间(称次时间为时间片)当时间片用完但并未执行时,剥夺该进程的执行将其连接到完成队列地对尾。

然后在将下一个进程投入运行,直到所有的运行完毕。

时间片轮转调度算法如图3-2所示。

3.3 短作业优先算法设计短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);这是对FCFS算法的改进,其目标是减少平均周转时间。

根据估计运行时间的长短将各个进程排成一个队列(估计运行时间最短的进程放在对首)每次运行将对首进程投入运行,直道运行结束,将此进程连接到完成队列的队尾。

然后,再将下一个对首投入运行,直到所有的进程都运行完毕。

3.4 动态优先级算法设计动态优先级在时间片轮转法基础上完成。

将所有进程按照先来先服务的规则排成一个队列,把CPU分配给就绪队列地对首进程并规定它的执行时间(称次时间为时间片)当时间片用完但并未执行时,剥夺该进程的执行将其连接到完成队列地对尾。

然后在将下一个进程投入运行,直到所有的运行完毕。

每个进程的优先级为50-服务时间。

数字越小优先级越高,数字越大优先级则越低。

优先级随着等待时间的增长而增高(数字减小)。

图3-2 时间片轮转法第4章 系统实现4.1 时间片轮转法实现将系统中所有的就绪进程按照FCFS 原则,排成一个队列。

然后轮流执行进程。

执行过程如图4-1所示。

时间片轮转法代码如下:typedef struct node{ char name[20]; /*进程的名字*/int prio; /*进程的优先级*/int round; /*分配CPU 的时间片*/int cputime; /*CPU 执行时间*/int needtime; /*进程执行所需要的时间*/char state; /*进程的状态,W ——就绪态,R ——执行态,F ——完成态*/ int count; /*记录执行的次数*/struct node *next; /*链表指针*/}PCB;PCB *ready=NULL,*run=NULL,*finish=NULL;void Clear(){ ready=NULL;run=NULL; finish=NULL;}图4-1 时间片轮转法void GetFirst() /*取得第一个就绪队列节点*/{ run = ready;if(ready!=NULL){run ->state = 'R';ready = ready ->next; run ->next = NULL; } }void Output() /*输出队列信息*/{ PCB *p;p = ready;printf("进程名\t优先级\t轮数\tcpu时间\t需要时间\t进程状态\t计数器\n");while(p!=NULL){printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round, p->cputime,p->needtime,p->state,p->count);p = p->next;}p = finish;while(p!=NULL){ printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round ,p->cputime,p->needtime,p->state,p->count);p = p->next; }p = run;while(p!=NULL){ printf("%s\t%d\t%d\t%d\t%d\t\t%c\t\t%d\n",p->name,p->prio,p->round ,p->cputime,p->needtime,p->state,p->count);p = p->next; }}void InsertPrio(PCB *in) /*创建优先级队列,规定优先数越小,优先级越低*/{ PCB *fst,*nxt;fst = nxt = ready;if(ready == NULL){ in->next = ready; ready = in; }else{ if(in ->prio >= fst ->prio){in->next = ready; ready = in; } else{ while(fst->next != NULL){ nxt = fst; fst = fst->next; }if(fst ->next == NULL){ in ->next = fst ->next;fst ->next = in; }else { nxt = in; in ->next = fst; }}}}void InsertTime(PCB *in) /*将进程插入到就绪队列尾部*/{ PCB *fst;fst = ready;if(ready == NULL){ in->next = ready; ready = in; } else{ while(fst->next != NULL) { fst = fst->next; } in ->next = fst ->next;fst ->next = in;}}void InsertFinish(PCB *in) /*将进程插入到完成队列尾部*/{ PCB *fst;fst = finish;if(finish == NULL){in->next = finish; finish = in; } else{ while(fst->next != NULL){ fst = fst->next; } in ->next = fst ->next;fst ->next = in;}}void TimeCreate(int num) /*时间片输入函数*/{PCB *tmp;int i;printf("输入进程名字和进程时间片所需时间:\n");for(i = 0;i < num; i++){ if((tmp = (PCB *)malloc(sizeof(PCB)))==NULL){ perror("malloc"); exit(1);}scanf("%s",tmp->name);getchar();scanf("%d",&(tmp->needtime));tmp ->cputime = 0;tmp ->state ='W';tmp ->prio = 0;tmp ->round = 2;tmp ->count = 0;InsertTime(tmp);}}void RoundRun() /*时间片轮转调度算法*/{int flag = 1;GetFirst();while(run != NULL){ Output();while(flag){ run->count++;run->cputime++;run->needtime--;if(run->needtime == 0){ run ->state = 'F';InsertFinish(run);flag = 0;}else if(run->count == run->round){ run->state = 'W';run->count = 0;InsertTime(run);flag = 0;}}flag = 1;GetFirst();}}4.2 短作业优先算法实现短作业优先算法是对FCFS算法的改进,其目标是减少平均周转时间。

相关文档
最新文档