基于静态优先权和响应比的进程管理系统的设计

合集下载

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

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

操作系统课程设计报告进程调度算法Minix 操作系统实践计算机科学与技术题 目 :姓 名 : 学 号 : 专业 : 指导教师 :实验一1.实验目的通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。

2.实验内容1.用C++语言来实现对n 个进程采用优先权优先算法以及轮转算法的进程调度。

2.每个用来标识进程的进程控制块PCB 用结构来描述,包括以下字段:(1)进程标识ID,其中0 为闲逛进程,用户进程的标识数为1,2,3⋯。

(2)进程优先级Priority ,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,标识数越大,优先级越高。

(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。

(4)进程总共需要运行时间Alltime ,利用随机函数产生。

(5)进程状态,0-就绪态;1-运行态;2-阻塞态。

(6)队列指针next,用来将多个进程控制块PCB 链接为队列。

3.优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。

(2)进程每运行一个时间片,优先数减3。

4.在调度前,系统中拥有的进程数PCB_number 由键盘输入,经初始化后,所有的进程控制块PCB 链接成就绪队列。

5.为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,3.实验步骤进程调度的思想(1)当系统空闲(就绪队列为空)时,系统运行闲逛进程,否则运行其他进程,发生变迁1(就绪→运行)。

(2)在运行进程(包括闲逛进程)的过程中,可能发生变迁2(运行→阻塞),即将运行进程插入到阻塞队列(闲逛进程不能被阻塞),可能有其他新的进程创建PCB,还可能唤醒阻塞队列中的某些进程PCB,发生变迁3(阻塞→就绪),即从阻塞队列中移出并插入就绪队列中。

(3)时间片运行结束后,若进程累计占用CPU 时间大于等于进程需要运行的时间,则进程执行结束,释放其PCB。

操作系统第3章习题-答案

操作系统第3章习题-答案

第3章调度与死锁一、单项选择题1. 在为多道程序所提供的可共享的系统资源不足时,可能出现死锁。

但是,不适当的______也可能产生死锁。

A. 进程优先权B. 资源的线性分配 =C. 进程推进顺序D. 分配队列优先权2. 采用资源剥夺法可解除死锁,还可以采用_____方法解除死锁。

A. 执行并行操作=B. 撤消进程C. 拒绝分配新资源D. 修改信号量3. 产生死锁的四个必要条件是:互斥、________、循环等待和不剥夺。

A. 请求与阻塞=B. 请求与保持C. 请求与释放D. 释放与阻塞4. 发生死锁的必要条件有四个,要防止死锁的发生,可以破坏这四个必要条件,但破坏________条件是不太实际的。

=A. 互斥 B. 不可抢占 C. 部分分配 D. 循环等待5. 在分时操作系统中,进程调度经常采用________算法。

A. 先来先服务B. 最高优先权 =C. 时间片轮转D. 随机6. 资源的按序分配策略可以破坏________条件。

A. 互斥使用资源B. 占有且等待资源C. 非抢夺资源=D. 环路等待资源7. 银行家算法是一种________算法。

A. 死锁解除=B. 死锁避免C. 死锁预防D. 死锁检测8. ________优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。

A. 先来先服务 =B. 静态C. 动态D. 短作业9. 某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是________。

A. 9 =B. 10C. 11D. 1210. 以优先级为基础的进程调度算法可以保证在任何时候正在运行的进程总是诸就绪进程中优先级最高的进程。

上述描述是________。

A. 正确的=B. 错误的11. 当检测出发生死锁时,可以通过撤消一个进程解除死锁。

上述描述是________。

A. 正确的=B. 错误的12. 在下列解决死锁的方法中,属于死锁预防策略的是____。

进程调度模拟设计——优先级法、最高响应比优先调度算法

进程调度模拟设计——优先级法、最高响应比优先调度算法

附件1:课程设计进程调度模拟设计——优先级题目法、最高响应比优先调度算法学院计算机科学与技术专业计算机科学与技术班级计算机科学与技术姓名指导教师2011 年01 月18 日课程设计任务书学生姓名:专业班级:计算机科学与技术指导教师:工作单位:计算机科学与技术学院题目: 进程调度模拟设计——优先级法、最高响应比优先调度算法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日进程调度模拟设计(优先级法、最高响应比优先调度算法)1设计目的与实现功能模拟进程调度,使程序能够完成:选择不同的调度算法(优先级法或者最高响应比法),选毕算法,能够输入若干进程,包括进程的一些基本信息,如进程名、优先级、到达时间和运行时间等;根据选择的调度算法显示进程调度队列;根据选择的调度算法计算平均周转时间和平均带权周转时间。

操作系统最高响应比优先调度算法实验报告

操作系统最高响应比优先调度算法实验报告

进程调度模拟设计——最高响应比优先调度算法实验报告一、实验题目与要求1、实验题目:加深对作业概念的理解。

深入了解批处理系统如何组织作业、管理作业和调度作业。

2、实验要求:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。

实现具体包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。

二、总的设计思想及语言环境、工具1、总的设计思想:最高响应比优先法(HRRN)是对FCFS方式和SJF 方式的一种综合平衡。

HRRN 调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。

响应比R定义如下: R=(W+T)/T=1+W/T其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。

每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。

这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。

这种算法是介于FCFS和SJF 之间的一种折中算法。

由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。

另外,由于每次调度前要计算响应比,系统开销也要相应增加。

2、语言环境:计算机基本配置要求:操作系统:WIN 98/2000/XP/2003 等Windows平台内存:256MB及以上主存64KB(Memory)(以KB为单位分配)开发语言:Visual C++3、工具:Windows平台+Visual C++三、数据结构与模块说明(功能与框图)作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。

为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。

操作系统原理习题集及答案

操作系统原理习题集及答案
1
12.操作系统有多种类型:允许多用户将若干个作业提交给计算机系统集中处理 的操作系统称为﹎﹎A﹎﹎。 A:(1)批处理操作系统 (2)分时操作系统 (3)实时操作系统 (4) 网络操作系 统 13.操作系统有多种类型:允许多个用户以交互方式使用计算机的操作系统,称 为﹎﹎A﹎﹎。 A:(1)批处理操作系统 (2)分时操作系统 (3)实时操作系统 (4) 网络操作系统 14. UNIX 操作系统是著名的﹎﹎A﹎﹎。 A: (1)多道批处理系统 (2)分时系统 (3)实时系统 (4)分布式系统 15. 在设计批处理系统时,首先要考虑的是﹎﹎A﹎﹎。 A:(1)灵活性和可适应性 (2)交互性和响应时间 (3)周转时间和系统吞吐量 (4)实时性和可靠性 16. 在设计分时操作系统时,首先要考虑的是﹎﹎A﹎﹎。 A: (1)灵活性和可适应性 (2)交互性和响应时间 (3)周转时间和系统吞吐量 (4)实时性和可靠性 17.在设计实时操作系统时,首先要考虑的是﹎﹎A﹎﹎。 A: (1)灵活性和可适应性 (2)交互性和响应时间 (3)周转时间和系统吞吐量 (4)实时性和可靠性 18.分时操作系统的主要特征之一是提高﹎﹎A﹎﹎。 A: (1)计算机系统的可靠性 (2)计算机系统的交互性 (3)计算机系统的实时性 (4)计算机系统的安全性 19.批处理系统的主要缺点是﹎﹎A﹎﹎。 A: (1)CPU的利用率不高 (2)失去了交互性 (3)不具备并行性 (4)以上 都不是 20. 分时系统中,为使多个用户能够同时与系统交互,最关键的问题是﹎﹎ A﹎ ﹎。 A: (1)计算机具有足够的运行速度 (2)内存容量应足够大 (3)系统能及时地接 收多个用户输入 (4)能在一短的时间内, 使所有用户程序都能运行 (5)能快速进 行内外存对换 21. 实时操作系统对可靠性和安全性要求极高,它﹎﹎A﹎﹎。 A: (1)十分注重系统资源的利用率 (2)不强调响应速度 (3)不强求系统资源的利用率 (4)不必向用户反馈信息 22. 分时系统的响应时间(及时性)主要是根据﹎﹎A﹎﹎确定的。 A: (1)时间片大小 (2)用户数目 (3)计算机运行速度 (4)用户所能接受的等待时间 (5)控制对象所能接受的时延 23.实时系统的响应时间则是由﹎﹎A﹎﹎确定的。 A:(1)时间片大小 (2)用户数目 (3)计算机运行速度 (4)用户所能接受的等待时间 (5)控制对象所能接受的时延 24. 分时系统中,当用户数目为100时,为保证响应不超过2秒;此时的时间片最 大应为﹎﹎A﹎﹎。 A: (1)10ms (2)20ms (3)50ms (4)100ms (5)200ms 25.假设就绪队列中有 10 个进程,系统将时间片设为 200ms,CPU 进行进程切换 要花费 10ms。则系统开销所占的比率约为﹎﹎A﹎﹎ A: (1)0.5% (2)1% (3)5% (4)10%

响应比最高者优先算法

响应比最高者优先算法

响应比最高者优先算法
在响应比最高者优先算法中,每个进程都有一个初始等待时间和服务
时间。

初始等待时间表示进程进入就绪队列后已经等待的时间,而服务时
间表示进程需要执行的时间。

算法工作过程如下:
1.根据进程的就绪时间和服务时间,计算出每个进程的响应比。

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

2.从就绪队列中选择响应比最高的进程作为下一个要执行的进程。


果有多个进程具有相同的最高响应比,则按照进程的到达时间顺序选择。

3.执行选定的进程,执行完成后更新进程的等待时间和服务时间。

4.将已执行完成的进程从就绪队列中删除。

5.重复步骤2至步骤4,直到所有进程都执行完成。

然而,该算法也存在一些缺点。

首先,由于需要实时计算每个进程的
响应比,因此算法的复杂度较高。

其次,该算法可能导致长服务时间的进
程长时间得不到执行,从而可能造成一些进程的饥饿现象。

为了解决这些问题,可以进行一些改进。

例如,可以引入抢占式调度,允许当有更高优先级的进程到达时,中断当前正在执行的进程并执行新到
达的更高优先级的进程。

这样可以确保高优先级的进程及时得到执行,提
高系统的响应速度。

此外,还可以根据实际情况进行参数调整,例如调整计算响应比时的
权重因子,以更好地平衡等待时间和服务时间的影响。

总之,响应比最高者优先算法是一种有效的进程调度算法,可以提高
系统的响应性能。

然而,在使用该算法时需要注意算法的复杂度和可能导
致的饥饿问题,可以通过引入抢占式调度和调整算法参数等方式进行改进。

操作系统课程设计进程调度模拟设计先来先服务,优先

操作系统课程设计进程调度模拟设计先来先服务,优先

操作系统课程设计进程调度模拟设计先来先服务,优先课程设计课程名字系统软件开发实训A题目进程调度模拟设计——先来先服务、优先级法学院计算机科学与技术学院专业计算机科学与技术专业班级姓名指导教师李玉强2014 年01 月13 日课程设计任务书学生姓名:专业班级:指导教师:李玉强工作单位:计算机科学与技术学院题目: 进程调度模拟设计——先来先服务、优先级法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能与进程调度算法有深入的懂得。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的要紧任务:(包含课程设计工作量及其技术要求,与说明书撰写等具体要求)1.模拟进程调度,能够处理下列的情形:⑴能够选择不一致的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间与运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间与平均带权周转时间。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或者模块说明(功能与框图);⑶源程序的要紧部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结。

时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。

设计报告书收取时间:课程设计验收答辩完结时。

(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或者责任教师)签名: 2013 年 12 月 10日课程设计报告书1.需求分析1.1设计目的(1)阅读操作系统的处理机管理章节内容,对进程调度的功能与进程调度算法有深入的懂得。

(2)掌握一种计算机高级语言的使用。

要求完成的要紧任务: (包含课程设计工作量及其技术要求,与说明书撰写等具体要求) 1.2程序流程图1.3设计要求(1)能够选择不一致的调度算法(要求中给出的调度算法);(2)能够输入进程的基本信息,如进程名、优先级、到达时间与运行时间等; (3)根据选择的调度算法显示进程调度队列;(4)根据选择的调度算法计算平均周转时间与平均带权周转时间。

操作系统 低中高级调度

操作系统 低中高级调度

1. 调度类型高级调度——作业调度批处理系统中使用,周期较长。

低级调度——进程调度是最基本的一种调度,在三种类型的OS中都必须配置。

进程调度可采用非抢占或抢占两种方式。

其中抢占方式允许调度程序根据某种原则,例时间片原则、优先权原则、短进程优先原则等去停止某个正在执行的进程,将已分配给该进程的处理机,重新分配给另一进程。

进程调度的运行频率最高,故算法不能太复杂。

中级调度——引入中级调度的目的是为了提高内存的利用率和系统吞吐量。

中级调度实际上是存储器管理中的对换功能。

2. 调度队列模型3. 选择调度方式和算法的准则周转时间(批处理)面向用户响应时间(分时)的准则截止时间的保证(实时)优先权准则面向系统系统吞吐量高(批处理)的准则处理机利用率好各类资源的平衡利用周转时间——指作业提交系统开始,到作业完成为止的时间间隔。

带权周转时间——作业的周转时间与系统为它提供的实际服务时间之比。

W=T/TS响应时间——从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间。

截止时间——某任务必须开始执行的最迟时间,或必须完成的最迟时间。

吞吐量——单位时间内所完成的作业数。

4. 调度算法(作业调度、进程调度)先来先服务调度算法(FCFS)按进入后备(或就绪)队列的先后选择目标作业(或进程)。

有利于长作业(进程),不利于短作业(进程)。

最短作业优先调度算法SJ(P)F从后备(或就绪)队列中选择估计运行时间最短的作业(或进程)tn+1=a tn+(1-a) tn tn为实际值,tn为预测值SJF有效地降低作业的平均等待时间,提高了系统的吞吐量。

对长作业(或进程)不利,可能死等,且未考虑作业的紧迫程度。

时间片轮转调度算法(进程调度)系统将所有的就绪进程按先来先服务原则,排成一个队列,每次调度时把CPU分配给队首进程,令其执行一个时间片。

就绪队列中所有进程,在一个给定的时间内,均能获得一个时间片的处理机执行时间。

T=nq优先权调度算法适用于作业调度和进程调度。

进程调度实验报告

进程调度实验报告

操作系统实验 报告实验项目: 进程调度学 院: 计算机学院专 业:班 级:学 号:姓 名:1. 实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。

当就绪进程个数大于处理机数时,就必须依照某种策略来决定哪些进程优先占用处理机。

本实验模拟在单处理机情况下的进程调度,加深了解进程调度的工作。

2. 实验内容设计一个按时间片轮转法实现进程调度的程序。

(1)假定系统有五个进程,每一个进程用一个进程控制块PCB 来代表,进程控制块的格式为:其中,进程名——作为进程的标识,假设五个进程的进程名分别为Q 1,Q 2,Q 3,Q 4,Q 5。

指针——进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。

要求运行时间——假设进程需要运行的单位时间数。

已运行时间——假设进程已经运行的单位时间数,初始值为“0”。

状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R ”表示。

当一个进程运行结束后,它的状态为“结束”,用“E ”表示。

(2)每次运行所设计的进程调度程序前,为每个进程任意确定它的“要求运行时间”。

(3)把五个进程按顺序排成循环队列,用指针指出队列连接情况。

另用一标志单元记录轮到运行的进程。

例如,当前轮到Q 2执行,则有:进程名 指针 要求运行时间 已运行时间 状态标志单元(4)进程调度总是选择标志单元指示的进程运行。

由于本实验是模拟进程调度的功能,所以对被选中的进程并不实际的启动运行,而是执行“已运行时间+1”来模拟进程的一次运行,表示进程已经运行过一个单位的时间。

请注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理机运行,直到出现等待事件或运行满一个时间片。

在这时省去了这些工作,仅用“已运行时间+1”来表示进程已经运行满一个时间片。

(5)进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。

基于静态优先权和响应比的进程管理系统的设计_课程设计报告 精品

基于静态优先权和响应比的进程管理系统的设计_课程设计报告 精品

1
基于静态优先权和响应比的进程管理系统的设计
开始
创建进程
输入进程名称、 大小、 创建时间、 服务时间
就绪队列查看
选择调度算法 (FCFS/SPF)
输出结果
结束
2
基于静态优先权和响应比的进程管理系统的设计 程序源代码如下:
//基于静态优先权和响应比的进程管理系统的设计 #include <stdio.h> #include <string.h> #include <stdlib.h> #include<stdbool.h> #define false 0 #define true 1 //定义链表的结构体 typedef struct { char id[20]; //进程名称 int f_priority; //初始优先权 int arrive_time; //到达时间 int service_time; //服务时间 int start_time; //开始时间 int finish_time; //完成时间 int wait_time; //等待时间 float priority; //响应比(优先权) }datatype;//15 //定义链表 typedef struct node{ datatype data; struct node * prior;//前一节点指针 struct node * next; //后一节点指针 22 }listnode,* linklist; linklist head,list_static,list_rp; listnode *p,*q,*m,*n,*rear,*z; //函数说明 int menu_select(); linklist enter(void); void display(linklist head); void display_static(linklist head); void display_rp(linklist head);//30 //主函数 void main() { for(;;){ switch(menu_select()) {

级法、最高响应比优先调度算法报告

级法、最高响应比优先调度算法报告

课程设计题目进程调度模拟设计——优先级法、最高响应比优先调度算法学院计算机科学与技术专业计算机科学与技术班级计算机0606姓名肖文俊指导教师孙玉芬2009 年 1 月9 日课程设计任务书学生姓名:肖文俊专业班级:计算机0606 指导教师:孙玉芬工作单位:计算机科学与技术学院题目: 进程调度模拟设计——优先级法、最高响应比优先调度算法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。

2.设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日目录1设计题目———————————————— 1 2需求分析———————————————— 12.1功能需求—————————————————— 12.1.1进程调度模拟设计优先级法—————------------12.1.2进程调度模拟设计最高响应比优先调度算法————--22.2环境需求—————————————————— 22.3用户界面需求———————————————— 2 3功能设计———————————————— 33.1数据结构—————————————————— 33.2模块说明—————————————————— 3 4开发平台及源程序的主要部分——————— 44.1开发平台—————————————————— 44.2源程序主要部分——————————————— 4 5测试用例,运行结果与运行情况分析———— 85.1测试用例—————————————————— 85.2运行结果—————————————————— 85.3运行情况分析———————————————— 11 6自我评价与总结—————————————111.设计题目1.优先级法、最高响应比优先调度算法需求分析2.1功能需求2.1.1实现优先级法:优先级法可被用作作业或进程的调度策略。

静态优先权优先算法的进程调度程序

静态优先权优先算法的进程调度程序
7
7
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int SequenceNumber=1;//进程编号
int ProcessAmount;//进程数量
int StartCount=0;//调入内存进程计数
struct PCB{//进程控制块
/*数据格式如下
进程名优先级到达时间服务时间
proc12110
proc22111
proc3322
*/
运行结果。如图4.6
图4.6文件读取数据及运行结果
5
根据屏幕提示输入即可。
需要用户注意的是优先级(整数表示)越大优先权越大。
6
本次课程设计,第一天上午去拿课程设计题目采用静态优先权优先算法的进程调度程序,下午开始查找资料并且构思。在网上看到一些课程设计用到的有数据结构体struct,便再度拿出C语言书本以及数据结构课本,主要看了数据结构体和单链表方面的知识。上面也曾说到,程序设计初期打算在单链表中直接使用冒泡排序法进程优先级的排序,总是失败。后来意识到,进程调度不仅要考虑到进程优先级,同时还有进入内存的时间。因为只有到达进入内存的时间,进程才会被调入内存中,进一步通过满足条件被调入CPU中执行,或者说分配CPU进而执行。所以索性模拟出调入内存方法以及调入CPU方法,与此有极大关系的是单链表就绪列表的建立。进行代码编写以及测试,从而模拟进程调度算法完成。
3
3.1
struct PCB
{
int ArrivalTime;
int ServiceTime;
char number[10];
பைடு நூலகம்};

采用静态优先权优先算法的进程调度程序

采用静态优先权优先算法的进程调度程序

采用静态优先权优先算法的进程调度程序学号:姓名:专业:指导教师:日期:目录第1部分课设简介 (3)1.1 课程设计题目 (3)1.2 课程设计目的 (3)1.3 课程设计内容 (3)1.4 时间安排 (3)第2部分实验原理分析 (3)2.1问题描述 (3)2.2解决方法 (4)第3部分主要的功能模块 (5)3.1主要的函数 (5)3.2 测试用例及运行结果 (7)第4部分源代码 (9)第5部分总结及参考文献 (16)5.1 总结 (16)5.2 参考文献 (17)第1部分课设简介1.1 课程设计题目采用静态优先权优先算法的进程调度程序1.2 课程设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。

1)进一步巩固和复习操作系统的基础知识。

2)培养学生结构化程序、模块化程序设计的方法和能力。

3)提高学生调试程序的技巧和软件设计的能力。

4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。

1.3 课程设计内容设计并实现一个采用静态优先权算法的进程调度演示程序1.4 时间安排1)分析设计贮备阶段(1 天)2)编程调试阶段(7 天)3)写课程设计报告、考核(2 天)第2部分实验原理分析2.1问题描述(1)每一个进程有一个PCB,其内容可以根据具体情况设定。

(2)进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定(3)可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、作业大小、进程优先级的初始化(4)可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态)(5)采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列(6)有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间(7)具有一定的数据容错性2.2程序设计流程图2.3解决方法通过数组容纳所有数据,根据冒泡排序把数据按从小到大顺序排列,在分析a[0]和其他数据的大小,如果a[0]的完成时间大于其他数据就按照冒泡的排列顺序,如果小,就比较其他数据的优先级,按优先级大小排序。

C++-实现进程调度算法-有先来先服务、优先级调度、短作业优先、响应比高优先

C++-实现进程调度算法-有先来先服务、优先级调度、短作业优先、响应比高优先

课程设计报告书实践课题:操作系统课程设计姓名:学号:完成时间:指导老师:(老师)一、设计摘要利用C++,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先,进一步理解了进程调度各种算法的概念及含义。

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

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

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

三、主要技术/算法简介#include<iostream>using namespace std;#define MAX 10struct task_struct{char name[10]; /*进程名称*/int number; /*进程编号*/float come_time; /*到达时间*/float run_begin_time; /*开始运行时间*/float run_time; /*运行时间*/float run_end_time; /*运行结束时间*/int priority; /*优先级*/int order; /*运行次序*/int run_flag; / *调度标志*/}tasks[MAX];int counter; /*实际进程个数*/int fcfs(); /*先来先服务*/int ps(); /*优先级调度*/int sjf(); /*短作业优先*/int hrrn(); /*响应比高优先*/int pinput(); /*进程参数输入*/int poutput(); / *调度结果输出*/void main(){ int option;pinput();printf("请选择调度算法(0~4):\n");printf("1.先来先服务\n");printf("2.优先级调度\n");printf("3.短作业优先\n");printf("4.响应比高优先\n");printf("0.退出\n");scanf("%d",&option);switch (option){case 0:printf("运行结束。

一种静态优先级保序饱和分配算法

一种静态优先级保序饱和分配算法
[ 5]
个任务分配相同的系 统优先 级 , 此 时已有 的最优 分配算 法不 再适用 , 而是需要考虑有 限优先 级情况 下的优 先级分 配。最 优分配往往意味着优先 级数目最少。 目前 , 对有限优 先级 情况 下最 优 分配 的研 究 尚不 充分。 文献 [ 8] 提出了常量法 , 它使 用固定数 目的优 先级分 配 , 实现 简单 , 但仅适用于任务周期与截止期相等的情况 , 且分配后任 务集的可调 度性下 降很 多。文献 [ 9] 提出 一种 A G P( assig n ment of pr ior ity g roup) 算法 , 即适 用截止 期范围 更广的最 少 优先级分 配 算 法 , 即 但一 般 情况 下 算 法复 杂 度 太 高。文 献 [ 10] 提 出 一 种 L N PA ( least number prior ity assignment ) 算 法 , 即适用于任意截止期的最少优先级分配算法 , 其算法复杂 度较高。 A G P 和 L N PA 共同 的特点 是系统 优先级 分配不 必 依照自然优先级 , 从而能够找到全局最优的分配方案 ; 但是当
41
任务数目较多时 , 算 法复杂度 较高。文 献 [ 11] 提 出一种 基于 RM 自然优先级的最优分配算法 ( 本文沿用文 献 [ 10] 的 说法 , 称之为 RM L east) , 其复杂度低 , 但仅适用于任务周 期与截止 期相等的情况。 本文针对现有研究的不足 , 利用自然优先级先验知 识 , 提 出一种保序饱和分配算法。此算法是适用于任意截止期模型 的最优保序分配。进一步分析了所有任务周期不小于其相对 截止时 间的 情 况 , 此 时 DM 保序 饱 和分 配是 最 少优 先级 分 配。本文算法复杂度低 , 可调度判定总次数等于任务总 数。

这种抢占式的优先权调度算法

这种抢占式的优先权调度算法

的末尾,把处理机分配给新到的高优先权进程。
第三章 处理机调度
第三章 处理机调度
3. 多级反馈队列调度算法的性能 (1) 终端型作业用户。 (2) 短批处理作业用户。 (3) 长批处理作业用户。
第三章 处理机调度
练习——多级反馈队列调度算法
进程都具有相同的优先权初值,则显然是最先进入就绪队列
的进程,将因其动态优先权变得最高而优先获得处理机,此 即FCFS算法。若所有的就绪进程具有各不相同的优先权初值,
那么,对于优先权初值低的进程,在等待了足够的时间后,
其优先权便可能升为最高,从而可以获得处理机。当采用抢 占式优先权调度算法时,如果再规定当前进程的优先权以速
二队列的末尾,再同样地按FCFS原则等待调度执行;如果
它在第二队列中运行一个时间片后仍未完成,再依次将它 放入第三队列,……,如此下去,当一个长作业(进程)从第一 队列依次降到第 n 队列后,在第 n 队列中便采取按时间片轮 转的方式运行。
第三章 处理机调度
(3) 仅当第一队列空闲时,调度程序才调度第二队列 中的进程运行; 仅当第1~(i-1) 队列均空时,才会调度第i 队列中的进程运行。如果处理机正在第i队列中为某进程 服务时,又有新进程进入优先权较高的队列 ( 第 1~(i-1) 中 的任何一个队列),则此时新进程将抢占正在运行进程的 处理机,即由调度程序把正在运行的进程放回到第i队列
第三章 处理机调度
第三章 处理机调度
3.2.3 基于时间片的轮转调度算法
1. 时间片轮转法
在早期的时间片轮转法中,系统将所有的就绪进程按先
来先服务的原则,排成一个队列,每次调度时,把 CPU 分 配给队首进程,并令其执行一个时间片。时间片的大小从几 ms到几百ms。当执行的时间片用完时,由一个计时器发出 时钟中断请求,调度程序便据此信号来停止该进程的执行, 并将它送往就绪队列的末尾;然后,再把处理机分配给就绪 队列中新的队首进程,同时也让它执行一个时间片。这样就 可以保证就绪队列中的所有进程,在一给定的时间内,均能 获得一时间片的处理机执行时间。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本课程设计的要求是: (1)设计一个完整的进程调度系统,系统中至少包括 5 个进程; (2)定义 PCB; (3)采用链表管理就绪队列; (4)结果要能够显示出进程的调度序列及进 入系统的时间、运行时间等必要信息。 (5)设计的输入数据要能体现算法的思想。
计划与进度安排: 1月2日 1 月 3 日到 4 日 1 月 5 日到 6 日 1月7日 1月8日 按照课程设计要求建立流程图,架起大概框架 输入主函数和各个过程的程序 调试程序并记录调试中的问题,努力解决 系统测试,演示设计成果,将调试结果截图保留下来 整理完善课程设计说明书
1
开始
创建进程
输入进程名称、 大小、 创建时间、 服务时间
就绪队列查看
选择调度算法 (FCFS/SPF)
输出结果
结束
程序源代码如下:
//基于静态优先权和响应比的进程管理系统的设计
#include <stdio.h> #include <iostream.h> #include <string.h> #include <stdlib.h> #include <conio.h>//定义链表的结构体 typedef struct { char id[20]; //进程名称 int f_priority; //初始优先权 int arrive_time; //到达时间 int service_time; //服务时间 int start_time; //开始时间 int finish_time; //完成时间 int wait_time; //等待时间 float priority; //响应比(优先权)
2
}datatype; //定义链表 typedef struct node{ datatype data; struct node * prior;//前一节点指针 struct node * next; //后一节点指针 }listnode,* linklist; linklist head,list_static,list_rp; listnode *p,*q,*m,*n,*rear,*z; //函数说明 int menu_select(); linklist enter(void); void display(linklist head); void display_static(linklist head); void display_rp(linklist head); //主函数 void main() { for(;;){ switch(menu_select()) { case 1: printf("\t*******************************\n"); printf("\t************创建进程***********\n"); printf("\t*******************************\n"); head=enter(); system("cls"); break; case 2: printf("\t*******************************\n"); printf("\t**********显示就绪队列*********\n"); printf("\t*******************************\n"); display(head); break; case 3: printf("\t*******************************\n"); printf("\t***********静态优先权**********\n"); printf("\t*******************************\n"); display_static(head); break;
5
//****************** //***显示进程队列*** //****************** void display(linklist head) { listnode *p; if(head==NULL||head->next==NULL) {printf("\n\t 空 队 列 任 意 键 返 回 主 菜 单 ");getch();system("cls");return;} p=head->next; printf("\n\t*************** 以下为队列信息************"); printf("\n\t 进程名\t 初始优先权\t 达到时间\t 服务时间\t"); printf("\n\t----------------------------------------------------\n"); while(p!=NULL) { printf("\t%s",p->data.id); printf("\t%d",p->data.f_priority); printf("\t\t%d",p->data.arrive_time); printf("\t\t%d",p->data.service_time); printf("\n\t----------------------------------------------------\n"); p=p->next; } getch(); system("cls"); } //****************** //**静态优先权算法** //****************** void display_static(linklist head) { int size=0; //假设当前时间为 0 int time=0; //假设未进程满足条件 bool have=false; listnode *p,*q,*rear,*m,*n,*z; if(head==NULL||head->next==NULL) {printf("\n\t 空 队 列 ");getch();system("cls");return;}
scanf("%d",&sn); getchar(); if(52<sn&&sn<48) { printf("\n\t 输入错误,重选 0-4:"); sn=NULL; continue; } else
4
break; } return sn; } //**************** //**建立进程队列** //**************** linklist enter(void) { linklist head=(listnode *)malloc(sizeof(listnode)); listnode *p,*rear; char flag='y'; rear=head; while(flag=='y') {
任意键返回主菜单
//创建一个新的链表用来存储静态优先权算法后得到的执行队列 linklist list_static=(listnode *)malloc(sizeof(listnode));
6
rear=list_static; p=(listnode *)malloc(sizeof(listnode)); //取得链表节点数 p=head->next; while(p!=NULL){ size++; p=p->next; } p=head->next; printf("%d",size); //临时指针 m=(listnode *)malloc(sizeof(listnode)); m->data=head->next->data; q=(listnode *)malloc(sizeof(listnode)); q->data=head->next->data; //最外层循环 选取新排列的链表 for(int i=1;i<=size;i++){ have=false; //遍历链表 挑选出符合条件的进程 while(p!=NULL){ //如果当前时间下 有进程已到达 if(p->data.arrive_time<=time){ have=true; //如果其优先权比原有优先权大 则替换 选出其中优先权最大的 if(q->data.f_priority<p->data.f_priority){ //把 p 节点 复制成 q q->data=p->data; } } //进程还未到达 选出到达时间最小且优先权最大的 if(p->data.arrive_time>time){ //同时到达 if(m->data.arrive_time==p->data.arrive_time){ //优先权 if(m->data.f_priority<p->data.f_priority){ m->data=p->data; } } if(m->data.arrive_time>p->data.arrive_time){ m->data=p->data; } } p=p->next;
设计过程、步骤(可加页) : ①进程创建模块 此模块用来创建进程实体,设置进程的到达时间、服务时间、开始时间。 ②就绪队列模块 此模块用链式队列来实现,用来存放已经创建的进程,为下面的两个模块 来服务。 ③静态优先权模块 此模块是先进先出算法的实现模块,此模块遍历模块中的就绪队列来找到 到达时间的从小到的大的序列。 ④响应比模块 此模块是短进程优先调度算法的实现模块,此模块遍历中的就绪队列来找 到服务时间从小打到的序列。
相关文档
最新文档