当前位置:文档之家› 优先级调度模拟算法

优先级调度模拟算法

优先级调度模拟算法

优先级调度模拟算法是操作系统中一种常用的任务调度算法。它

根据任务的优先级属性,确定任务的执行顺序,以提高系统的性能和

响应速度。本文将介绍优先级调度模拟算法的原理、应用场景以及实

现步骤,以期帮助读者更好地理解和应用该算法。

首先,我们来了解一下优先级调度模拟算法的原理。在操作系统中,每个任务都会有一个与之关联的优先级属性。优先级通常从1到

10进行划分,数字越大表示优先级越高。优先级调度模拟算法的核心

思想是,系统会首先选取优先级最高的任务进行执行,然后按照优先

级递减的顺序执行其他任务。这样可以使得优先级较高的任务更快地

完成,从而提高系统的整体性能。

优先级调度模拟算法在很多应用场景中都能发挥重要作用。例如,在多任务操作系统中,不同的任务可能有不同的优先级,我们希望高

优先级的任务能够尽快得到执行,以确保系统的实时性和响应能力。

在实时系统中,一些任务可能需要在特定的时间内完成,而优先级调

度模拟算法可以保证这些任务优先得到执行。此外,在计算机网络中,路由器需要根据报文的优先级选择合适的路径进行转发,优先级调度

模拟算法可以帮助实现这一功能。

接下来,让我们了解一下优先级调度模拟算法的实现步骤。首先,需要为每个任务定义一个优先级属性。这个属性可以是一个数字,也

可以是一个标识符。然后,在任务到达系统时,将其加入任务队列中。

在进行任务调度时,可以使用一个优先级队列来存储任务。优先级队列是一种特殊的数据结构,它允许以高效地方式插入和删除具有最高优先级的元素。每当需要选择下一个任务执行时,从优先级队列中选择优先级最高的任务即可。当任务完成后,从队列中移除该任务,并选择下一个优先级最高的任务进行执行。重复这个过程,直到所有任务完成。

总之,优先级调度模拟算法是一种根据任务优先级进行调度的算法。它适用于多任务操作系统、实时系统以及计算机网络等领域。通过合理设置任务的优先级属性,并使用优先级队列进行任务调度,可以提高系统的性能和响应速度。希望本文能够帮助读者更好地理解和应用优先级调度模拟算法。

优先级调度模拟算法

优先级调度模拟算法 优先级调度模拟算法是操作系统中一种常用的任务调度算法。它 根据任务的优先级属性,确定任务的执行顺序,以提高系统的性能和 响应速度。本文将介绍优先级调度模拟算法的原理、应用场景以及实 现步骤,以期帮助读者更好地理解和应用该算法。 首先,我们来了解一下优先级调度模拟算法的原理。在操作系统中,每个任务都会有一个与之关联的优先级属性。优先级通常从1到 10进行划分,数字越大表示优先级越高。优先级调度模拟算法的核心 思想是,系统会首先选取优先级最高的任务进行执行,然后按照优先 级递减的顺序执行其他任务。这样可以使得优先级较高的任务更快地 完成,从而提高系统的整体性能。 优先级调度模拟算法在很多应用场景中都能发挥重要作用。例如,在多任务操作系统中,不同的任务可能有不同的优先级,我们希望高 优先级的任务能够尽快得到执行,以确保系统的实时性和响应能力。 在实时系统中,一些任务可能需要在特定的时间内完成,而优先级调 度模拟算法可以保证这些任务优先得到执行。此外,在计算机网络中,路由器需要根据报文的优先级选择合适的路径进行转发,优先级调度 模拟算法可以帮助实现这一功能。 接下来,让我们了解一下优先级调度模拟算法的实现步骤。首先,需要为每个任务定义一个优先级属性。这个属性可以是一个数字,也 可以是一个标识符。然后,在任务到达系统时,将其加入任务队列中。

在进行任务调度时,可以使用一个优先级队列来存储任务。优先级队列是一种特殊的数据结构,它允许以高效地方式插入和删除具有最高优先级的元素。每当需要选择下一个任务执行时,从优先级队列中选择优先级最高的任务即可。当任务完成后,从队列中移除该任务,并选择下一个优先级最高的任务进行执行。重复这个过程,直到所有任务完成。 总之,优先级调度模拟算法是一种根据任务优先级进行调度的算法。它适用于多任务操作系统、实时系统以及计算机网络等领域。通过合理设置任务的优先级属性,并使用优先级队列进行任务调度,可以提高系统的性能和响应速度。希望本文能够帮助读者更好地理解和应用优先级调度模拟算法。

操作系统课设-进程调度模拟设计(先来先服务、优先级法)

进程调度模拟设计 ——先来先服务、优先级法 1.需求分析 1.1设计目的 1.阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 2.掌握一种计算机高级语言的使用。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.2设计要求 1.能够选择不同的调度算法(要求中给出的调度算法); 2.能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等; 3.根据选择的调度算法显示进程调度队列; 4.根据选择的调度算法计算平均周转时间和平均带权周转时间。 2. 功能设计 2.1数据结构 1.进程的结构定义: struct Node{ int num; string name; double run_time; double arrive_time; double start_time; double end_time; int priority; double turn; double turn_weight; Node *next;

}; 其中,num表示进程序号,name表示进程名称,run_time;表示进程运行时间,arrive_time表示进程到达时间,start_time表示进程开始执行的时间,end_time表示进程执行结束的时间,priority表示进程的优先级别(用1、2、3……表示,且越大优先级越高),turn表示该进程的周转时间,即进程结束时间减去进程开始到达时间,turn_weight表示带权周转时间,即进程的周转时间除以进程的运行时间。 2.使用链表储存进程(逆序存储)

先来先服务,时间片调度,优先级调度算法实验报告

先来先服务,时间片调度,优先级调度算法实验报告 先来先服务、时间片调度、优先级调度算法实验报告 1. 引言 本次实验旨在研究和比较先来先服务(FCFS)、时间片调度(RR)和优先级调度(Priority Scheduling)三种常见的进程调度算法。进 程调度是操作系统中的重要概念之一,合理的进程调度算法可以提高 系统效率,优化资源利用。 2. 先来先服务算法 •先来先服务算法是一种简单的调度算法,按照进程到达的顺序进行调度。 •优点:简单易实现,适用于长作业。 •缺点:容易造成短作业等待时间过长,无法满足实时性要求。 3. 时间片调度算法 •时间片调度算法将CPU时间划分为一段一段的时间片,每个进程在一个时间片内执行。 •若进程未完成,会被放入就绪队列的末尾,等待下一个时间片。•优点:公平,适用于短作业,能满足实时性要求。 •缺点:时间片过长,会导致长作业等待时间过长。

4. 优先级调度算法 •优先级调度算法根据进程的优先级来确定调度顺序,拥有最高优先级的进程先执行。 •静态优先级可在创建进程时确定,动态优先级可根据进程执行情况进行调整。 •优点:适用于实时任务和长作业,可根据需求调整优先级。 •缺点:可能导致低优先级任务等待时间过长,存在优先级反转问题。 5. 实验结果与分析 通过对三种调度算法的实验测试,得出以下结论: •FCFS算法在长作业的情况下表现较好,但对于短作业不友好,容易造成长时间等待; •RR算法适用于短作业,能保证公平性,但时间片过长可能导致长作业等待时间过长; •优先级调度算法较为灵活,能满足实时性要求,但可能导致低优先级任务长时间等待。 综上所述,不同的调度算法适用于不同的场景,根据需求选择合适的算法可提高系统效率。

操作系统实验一进程调度模拟算法

操作系统实验一进程调度模拟算法 进程调度是操作系统中的一个重要功能,它负责为计算机系统中的各 个进程分配CPU时间,使得所有进程都能够得到公平的执行机会。进程调 度算法的选择对于系统的性能和响应时间有着重要影响。本文将介绍几种 常见的进程调度算法,并进行模拟实验,分析它们的优缺点。 FCFS算法是最简单的调度算法之一,在该算法中,按照进程到达的 先后顺序分配CPU时间。FCFS算法的优点是简单易懂,公平性高,但其 缺点是无法有效处理短作业和长作业混合的情况。长作业会导致其他短作 业等待时间过长,从而影响系统的响应时间。 2. 最短作业优先调度算法(Shortest Job First,SJF) SJF算法是一种非抢占式的调度算法,它会根据每个进程的执行时间 来选择下一个执行的进程。该算法的优点是可以最小化平均等待时间,但 其缺点是无法预测进程的执行时间,如果估计不准确,会导致长作业等待 时间过长。 3. 最高响应比优先调度算法(Highest Response Ratio Next,HRRN) HRRN算法是一种动态优先级调度算法,它根据每个进程的等待时间 和服务时间的比值来选择最优的进程。该算法考虑了进程的等待时间和服 务时间的关系,能够相对公平地分配CPU时间,并且能够避免长作业的垄断。 4. 时间片轮转调度算法(Round Robin,RR) RR算法是一种抢占式的调度算法,它将所有进程按照到达顺序分配 一个时间片,每个进程得到执行的时间是固定的。当一个进程的时间片用

完后,它会被放到就绪队列的末尾,等待下一次调度。RR算法的优点是 实现简单,能够保证所有进程能够得到公平的执行机会,但其缺点是当进 程数量较大时,调度开销会增加。 在进程调度的模拟实验中,首先需要定义进程的数据结构,包括进程ID、到达时间、优先级、执行时间等属性。然后,模拟进程的到达过程, 可以使用随机数生成器模拟进程的到达时间和执行时间。接下来,根据选 择的调度算法,模拟进程的执行过程。最后,根据模拟结果进行分析比较。 在模拟实验中,通过修改进程到达时间和执行时间的参数,可以模拟 不同类型的进程,如长作业和短作业混合,优先级不同的进程等。通过比 较不同调度算法的平均等待时间、响应时间等指标,可以评估不同调度算 法的性能。 总之,进程调度是操作系统中一个重要的功能。不同的调度算法有不 同的优缺点,适用于不同的应用场景。通过模拟实验,可以更好地了解和 比较不同调度算法的性能。对于实际应用中的进程调度算法选择,需要根 据具体的需求和条件进行评估。

优先级调度算法doc

优先级调度算法.doc 优先级调度算法是一种常见的任务调度方法,广泛应用于操作系统和多任务处理领域。它根据任务的优先级来决定任务的执行顺序,优先级高的任务先于优先级低的任务执行。这种算法可以保证重要任务及时得到处理,提高系统的响应速度和效率。 一、优先级调度算法的原理 优先级调度算法的基本原理是将系统中的任务按照优先级分为多个队列,每个队列中的任务按照优先级从高到低的顺序排列。当系统空闲时,从最高优先级队列中选择一个任务执行,如果该任务需要等待,则等待直到其到达执行时间。当有多个任务同时处于就绪状态时,系统会选择优先级最高的任务执行。 二、优先级调度算法的分类 根据任务优先级的确定方式不同,优先级调度算法可以分为静态优先级调度算法和动态优先级调度算法。 1.静态优先级调度算法 静态优先级调度算法是指在任务调度前,预先确定每个任务的优先级,然后按照优先级顺序执行任务。这种算法的优点是简单易行,适用于任务数量较少且固定的情况。但是,如果任务的优先级发生变化或者有新的任务加入,需要重新安排任务的执行顺序,这会增加系统的开销。 2.动态优先级调度算法 动态优先级调度算法是指根据任务的执行情况和系统资源的使用情况动态地调整任务的优先级。这种算法的优点是能够适应系统环境的变化,提高系统的效率和响应速度。但是,动态优先级调度算法的实现较为复杂,需要系统提供实时的任务调度和资源分配支持。 三、优先级调度算法的应用

优先级调度算法广泛应用于操作系统、多任务处理、实时系统等领域。例如,Unix/Linux操作系统中的进程调度就是基于优先级调度算法实现的。在工业控制领域,实时操作系统的任务调度也是基于优先级调度算法实现的。此外,在云计算、大数据等领域,优先级调度算法也得到了广泛应用。 四、优先级调度算法的优缺点 1.优点: (1) 可以根据任务的紧急程度和重要性来确定任务的优先级,从而保证重要任务及时得到处理。 (2) 可以根据任务的执行情况和系统资源的使用情况动态地调整任务的优先级,提高系统的效率和响应速度。 (3) 可以支持多任务处理和并行计算,充分发挥系统资源的利用效率。 2.缺点: (1) 如果任务的优先级确定不合理,会导致一些重要任务得不到及时处理,影响系统的性能和效率。 (2) 如果系统中的任务数量过多,会导致任务调度和管理的开销增大,增加系统的负担。 (3) 对于一些具有依赖关系的任务,如果仅仅根据优先级进行调度,可能会导致任务执行的顺序不正确,影响系统的正确性。 五、总结 优先级调度算法是一种常见的任务调度方法,它可以保证重要任务及时得到处理,提高系统的响应速度和效率。在实际应用中,需要根据具体的应用场景和需求选择合适的优先级调度算法,并注意避免其缺点和局限性。

抢占式优先级调度算法课程设计

抢占式优先级调度算法课程设计 一、概述 抢占式优先级调度算法是一种常见的进程调度算法,它能够有效地提高系统的响应速度和资源利用率。本文将介绍抢占式优先级调度算法的原理、实现方法以及应用场景,并结合一个简单的课程设计来说明其具体实现过程。 二、原理 抢占式优先级调度算法是基于进程优先级的,每个进程都有一个对应的优先级,优先级越高的进程会被更早地执行。在抢占式调度中,如果有一个新进程到达或者一个已经就绪的进程的优先级发生了变化,那么当前正在执行的进程会被强制中断,让出CPU资源给更高优先级的进程。 三、实现方法 1. 进程控制块 在操作系统中,每个进程都有一个对应的PCB(Process Control

Block)结构体来存储其相关信息,包括进程ID、状态、寄存器值等。在抢占式调度中,还需要为每个PCB加上一个priority字段来表示该进程的优先级。 2. 任务队列 为了实现抢占式调度算法,需要将所有就绪状态的进程按照其priority 值从高到低排序,并将它们放入一个任务队列中。当CPU空闲时,会从队列中取出优先级最高的进程进行执行。 3. 中断处理 在抢占式调度中,当有新进程到达或者已有进程的优先级发生变化时,需要立即将当前正在执行的进程中断,并将其放回任务队列中等待下 一次调度。这个过程需要通过操作系统提供的中断处理机制来实现。 四、应用场景 抢占式优先级调度算法适用于对响应速度要求较高的系统,例如实时 操作系统、多媒体处理等领域。它能够及时地响应用户请求,并且能 够充分利用CPU资源,提高系统的效率。 五、课程设计

下面以一个简单的课程设计为例来说明抢占式优先级调度算法的具体实现过程。 1. 需求分析 设计一个简单的多线程程序,模拟抢占式优先级调度算法。程序需要具备以下功能: - 支持创建多个线程并指定其优先级; - 线程可以随机休眠一段时间并输出一些信息; - 程序可以在任意时刻修改某个线程的优先级,并重新调整任务队列顺序; - 程序可以在任意时刻查看当前所有线程状态和优先级。 2. 设计思路 根据需求分析,我们可以设计一个基于PCB的多线程模型,每个线程都对应一个PCB结构体,并且有一个对应的任务队列来存储所有就绪状态的线程。程序需要提供以下接口: - create_thread(priority, func, args):创建一个新的线程,并指定其优先级、执行函数和参数;

优先级调度算法实验报告

优 先 级 调 度 算 法 实 验 报 告 院系:****************学院班级:*********** 姓名:*** 学号:************

一、实验题目:优先级调度算法 二、实验目的 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先级算法的具体实施办法。 三、实验内容 1.设计进程控制块PCB的结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 2.编写优先级调度算法程序 3.按要求输出结果。 四、实验要求 每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。(一)进程控制块结构如下: NAME——进程标示符 PRIO/ROUND——进程优先数 NEEDTIME——进程到完成还需要的时间片数 STATE——进程状态 NEXT——链指针 注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行

计算; 2.各进程的优先数或,以及进程运行时间片数的初值,均由用户在程序运行时给定。 (二)进程的就绪态和等待态均为链表结构,共有四个指针如下:RUN——当前运行进程指针 READY——就需队列头指针 TAIL——就需队列尾指针 FINISH——完成队列头指针 五、实验结果:

六、实验总结: 首先这次实验的难度不小,它必须在熟悉掌握数据结构的链表和队列的前提下才能完成,这次实验中用了三个队列,就绪队列,执行队列和完成队列,就绪队列中的优先级数是有序插入的,当进行进程调度的时候,需要先把就绪队列的队首节点(优先级数最大的节点)移入执行队列中,当执行进程结束后,判断该进程是否已经完成,如果已经完成则移入完成队列,如果没有完成,重新有序插入就绪队列中,这就是这次实验算法的思想。 附录(算法代码):

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

课程设计 题目进程调度模拟设计——优先级法、最高响应比优先调度算法 学院计算机科学与技术 专业 班级 姓名 指导教师吴利军 2013 年 1 月15 日 课程设计任务书 学生姓名: 指导教师:吴利军工作单位:计算机科学与技术学院 题目: 进程调度模拟设计——优先级法、最高响应比优先调度算法初始条件: 1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1.模拟进程调度,能够处理以下的情形: ⑴能够选择不同的调度算法(要求中给出的调度算法); ⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等; ⑶根据选择的调度算法显示进程调度队列; ⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。 2.设计报告内容应说明: ⑴需求分析; ⑵功能设计(数据结构及模块说明); ⑶开发平台及源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法); 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,一律按0分记) 指导教师签名:年月日

系主任(或责任教师)签名:年月日 进程调度模拟设计 优先级法、最高响应比优先调度算法 1.设计目的与实现功能 模拟进程调度,使程序能够完成:能够输入若干进程,包括进程的一些基本信息,如进程名、优先级、到达时间和运行时间等,选择不同的调度算法(优先级法或者最高响应比法),选择算法后,根据选择的调度算法显示进程调度队列;根据选择的调度算法计算平均周转时间和平均带权周转时间。 2.需求分析 2.1实验原理 最高响应比优先算法(HRN):最高响应比是对先来先服务和最短进程优先法德一种综合平衡。HRN调度策略同时考虑每个进程的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的进程投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该进程的估计需要的执行时间,W为进程在后备状态队列的等待时间。每当要进行进程调度是,系统计算每个进程的响应比,选择其中R最大者投入执行。 优先级法:系统和用户按某种原则为进程制定一个优先级来表示该进程所享有的调度优先权。根据优先级的高低来对进程加以调度。 3. 数据结构 3.1主要结构及函数 struct timer //时间类型

实验四使用动态优先权的进程调度算法的模拟

实验四使用动态优先权的进程调度算法的模拟 一、引言 在操作系统中,进程调度算法的选择对于系统资源的合理分配和性能的优化至关重要。动态优先权调度算法是一种用于调度多个进程的算法,其根据进程的优先级来动态调整进程的执行顺序。本实验旨在模拟动态优先权调度算法的工作原理和效果。 二、实验原理 动态优先权调度算法中,每个进程都有一个初始的优先级,并且随着时间的推移,根据其等待时间的增加,调整进程的优先级。进程的等待时间是指从进程到达就绪队列的时间开始,到进入运行状态之前所经过的时间。 在动态优先权调度算法中,优先级是根据公式计算的: 优先级=初始优先级+等待时间/需要运行时间 该算法的目标是使等待时间较长的进程获得更高的优先级,从而提高系统的响应速度和吞吐量。 三、实验步骤 1.创建一个进程控制块(PCB)的数据结构,其中包含进程的信息,如进程ID、到达时间、需要运行时间、等待时间和优先级等。 2.创建就绪队列和完成队列,用于存放已到达但尚未执行的进程以及已完成执行的进程。

3.从文件读取进程信息,初始化进程控制块,并将进程按照到达时间 的先后顺序插入到就绪队列中。 4.初始化系统时间、当前运行的进程以及系统的空闲时间。 5.依次从就绪队列中选取优先级最高的进程执行,更新进程的等待时 间和优先级。 6.在进程执行完毕后,将其移到完成队列中,并更新系统的空闲时间。 7.当所有进程都已执行完毕时,计算平均等待时间和平均周转时间。 8.输出每个进程的执行情况,包括进程的到达时间、执行时间、等待 时间和周转时间等。 9.结束实验。 四、实验结果分析 通过模拟动态优先权调度算法,我们可以得到每个进程的等待时间和 周转时间,以及整个系统的平均等待时间和平均周转时间。通过比较不同 进程调度算法的效果,可以评估动态优先权调度算法在提高系统响应速度 和吞吐量方面的优势。 五、实验总结 本实验通过模拟动态优先权调度算法,深入了解了其工作原理和效果。动态优先权调度算法在提高系统响应速度和吞吐量方面有明显的优势,通 过动态调整进程的优先级,能够使等待时间较长的进程获得更高的执行顺序,从而提高了系统的性能。

优先级调度算法

算法设计思想: (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为: 进程名 指针 要求运行时间 等待时间 响应比 状态 其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。 指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。 要求运行时间——假设进程需要运行的单位时间数。 等待时间——自最近一次调度运行至今等待的时间数,当进程被调度时等待时间清零。 响应比——进程调度程序运行前计算每个进程的响应比,调度时总是选取响应比大的进程先执行,每次执行一个固定的时间片。 状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“等待时间”和“要求运行时间”。 (3) 为了调度方便,把五个进程按给定的响应比从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。例: 队首标志 K2 K1 P1 K2 P2 K3 P3 K4 P4 K5 P5 0 K4 K5 K3 K1 2 3 1 2 4 1 5 3 4 2 R R R R R PCB1 PCB2 PCB3 PCB4 PCB5 (4) 处理器调度总是选队首进程运行。采用动态改变响应比的办法,进程每运行一次重新计算各进程的响应比。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:要求运行时间-1、等待时间为0。其它进程等待时间+1,重新计算各进程的响应比,并从大到小排序。 提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。 0,则再将它加入队尾(因其响应比最小。);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。(5) 进程运行一次后,若要求运行时间 (6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化及各进程的参数。 (8) 为五个进程任意确定一组“等待时间”和“要求运行时间”,启动所设计的进程调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。

操作系统-优先级调度算法实验报告

学号专业姓名 实验日期8 教师签字成绩 实验报告 【实验名称】设计一个按优先级调度的算法 【实验目的】1、理解按优先级调度算法的内涵,并熟练掌握该算法。 2、学会采用动态优先级调度算法模拟处理cpu的进程调度过程。【实验流程图】 【实验内容】 #include #include

#define N 20 struct PCB//进程控制块定义 { char pname[N]; int pro; char state; int runtime; struct PCB *next; }; struct PCB *head_input; struct PCB *head_run; struct PCB *head_run_pre; unsigned long current; //记录系统当前时间的变量 //-----定义建立就绪队列函数------- int readydata() //建立就绪队列函数 { if(head_input->next==NULL) { return 0; } struct PCB *p1=head_input->next,*pmax,*p2; int maxpro=0xffff; pmax=p1; p2=head_input; //head_run_pre=head_input; while(p1!=NULL) { if(p1->propro; head_run_pre=p2; pmax=p1; } p2=p1; p1=p1->next; } head_run=pmax; head_run_pre->next=head_run->next; return 1; } void runprocess() //运行进程函数 { head_run->runtime-=10; head_run->pro++; struct PCB *p1,*p2; printf("Time slice is %d",current); current+=10; printf(" %s starts\n",head_run->pname); printf("Time slice is %d",current); printf(" %s ends\n",head_run->pname); if(head_run->runtime<=0) {//判断进程是否运行结束 // delete(*head->run); } else { p1=head_input; p2=head_input->next; p1->next=head_run; head_run->next=p2; } } int readyprocess() { while(1) { if(readydata()==0) return 0; else runprocess(); } } void Init() { head_input=new PCB; head_input->next=NULL; current=0; int numpro; printf("请输入要建立的进程数:\n\n"); scanf("%d",&numpro); printf("please input the information of the processes\n");

优先级调度算法

优先级调度算法LT

{prt2 (algo,p); p=p->next; } p=finish; while(p!=NULL) {prt2(algo,p); p=p->next; } getchar(); } void insert(PCB *q) {PCB *p1,*s,*r; int b; s=q; p1=ready; r=p1; b=1; while((p1!=NULL)&&b) if(p1->prio>=s->prio) {r=p1; p1=p1->next; } else b=0; if(r!=p1) {r->next=s; s->next=p1; } else {s->next=p1; ready=s; } } void create(char alg) { PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; cout<<"输入进程名及其需要运行的时间:"<

{p=new PCB; cin>>na; cin>>time; strcpy(p->name,na); p->cputime=0; p->needtime=time; p->state='w'; p->prio=100-time; if(ready!=NULL) insert(p); else {p->next=ready; ready=p; } cout<<"输入进程名及其需要运行的时间:"<next; run->state='R'; } void priority(char alg) { while(run!=NULL) {run->cputime=run->cputime+10; run->needtime=run->needtime-10; run->prio=run->prio-10; if(run->needtime==0) {run->next=finish; finish=run; run->state='F'; run=NULL; if(ready!=NULL) firstin(); } else if((ready!=NULL)&&(run->prioprio)) { run->state='W'; insert(run); firstin(); } prt(alg); }

相关主题
文本预览
相关文档 最新文档