linux操作系统课程设计—进程调度优先数法与简单轮转法
- 格式:doc
- 大小:352.00 KB
- 文档页数:18
Linux进程调度算法分析摘要:基于X86平台Linux2.6.26内核进程调度部分代码,刨析Linux进程调度算法,对算法的原理,实现和复杂度进行了分析并提出了算法改进措施。
1. Linux进程调度概述Linux系统支持用户态进程和内核线程,需要说明的是,Linux没有提供用户态线程支持,实现用户态线程需要引入第三方线程库。
操作系统进程调度是整个操作系统理论的核心,在设计进程调动机制需要考虑的具体问题主要有:1)调度的时机:在什么情况下,什么时候进行调度。
2)调度的“政策”(policy):根据什么准则挑选下一个进入运行的进程。
3)调度的方式:是“可剥夺”(preemptive)还是“不可剥夺”(nonpreemptive)。
图1.2.1给出了Linux进程状态转换关系:图1 Linux进程状态转换图Linux进程调度分为自愿调度和强制调度两种。
1)在内核空间,一个进程可以通过schedule()启动一次调度,也可以在调用schedule()之前,将本进程状态设置为TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE,暂时放弃运行而进入睡眠。
这通常发生在来自用户空间的系统调用被阻塞。
在用户空间,用户进程可以通过系统调用nanosleep()达到目的。
2)调度还可以是非自愿的。
在一定条件下,内核会强制性剥夺当前进程运行而调度其他进程进入运行。
Linux调度政策基础是时间片轮转+优先级抢占的结合,为了满足不同应用的需要,内核提供了三种调度方法:1)SCHED_FIFO实时调度策略,先到先服务2)SCHED_RR实时调度策略,时间片轮转3)SCHED_NORMAL 分时调度策略(在2.6内核以前为SCHED_OTHER)。
用户进程可以通过系统调用sched_setscheduler()设定自己的调度策略。
SCHED_FIFO和SCHED_RR的区别是,前者只有在就绪队列中有优先级更高的进程,或进程被阻塞,或自愿调用阻塞原语(如sleep_on_interruptible)的情况下,才会放弃CPU,而如果调度策略是后者,当前进程与就绪队列里其他进程按Round Robin方式共享CPU。
学号:课程设计课程名字系统软件开发实训A题目进程调度模拟设计——时间片轮转、优先级法学院专业班级姓名指导教师2014 年01 月17 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 进程调度模拟设计——时间片轮转、优先级法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结。
时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。
设计报告书收取时间:课程设计验收答辩完结时。
(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或责任教师)签名: 2013 年 12 月 10日进程调度模拟设计——时间片轮转、优先级法1设计目的1.1 阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解,能够使用其中的方法来进行进程调度模拟设计。
1.2 练掌握并运用时间片轮转和优先级法,掌握一种计算机高级语言的使用。
2 设计要求2.1 能够选择不同的调度算法(要求中给出的调度算法);2.2 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;2.3 根据选择的调度算法显示进程调度队列;2.4 根据选择的调度算法计算平均周转时间和平均带权周转时间。
进程调度先来先服务时间片轮转法优先服务调度处理器调度免费下载C或C++/*标题:设计一:进程调度设计目的:进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。
在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。
本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。
设计题目:设计一个按先来先服务,算法时间片轮转法,优先数调度算法实现处理器调度的程序。
*//*亲爱的同学们,大家好。
欢迎访问我的百度空间,在此我向大家提供免费的资料,这是我们实习要做的。
主要是因为我看到很多下载都要金币,而我自己没有金币,不爽。
现在我提供免费下载,做个好人。
复制到VC++时可能有些格式问题,稍微修改一下就OK了,程序本身不存在问题的。
大三第一个学期实习的哦*//*先来先服务:是一种最简单的调度算法,每次调度都从后备作业或者进程当中选择一个或者多个最先进入该队列的作业或进程,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
当调用FCFS算法时,系统为它们分配处理机,让它们运行。
该算法的优点是比较利于长作业(进程),而缺点是不利于短作业(进程)。
算法时间片轮转法:系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。
当执行完时间片时,计时器就会发出中断请求,调度程序就会停止该进程的执行,并把它送往就绪队列的末尾;然后再把处理机分配给就绪队列中新的队首进程,同时也分配时间片给它。
这样保证就绪队列中的所有进程在一个给定的时间片当中都能够获得一个时间片的处理机执行时间。
而时间片的大小最好取适中的,即略大于一次典型的交互所需时间。
优先数调度算法:该方法又分成两种算法分支,分别是非抢占式优先权算法和抢占式优先权调度算法。
河南中医学院《linux操作系统》课程设计报告题目:基于Linux的进程调度模拟程序所在院系:信息技术学院专业年级:2011级计算机科学与技术完成学生:2011180021 郭姗指导教师:阮晓龙完成日期:201X 年06 月22 日目录1. 课程设计题目概述32. 研究内容与目的43. 研究方法54. 研究报告65. 测试报告/实验报告76. 课题研究结论87. 总结91、课程设计题目概述随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。
如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。
因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。
本文就是对进程调度进行研究、实验的。
本文首先对Linux系统进行了简要的介绍, 然后介绍了进程管理的相关理论知识。
其次,又介绍最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法的相关知识,并对进程调度进行最高优先数优先的调度算法和先来先服务算法模拟实验,并对比分析两种算法的优缺点,从而加深对进程概念和进程调度过程/算法的理解设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。
也就是说能运行的进程数大于处理机个数。
linux进程调度方法linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务 3,SCHED_RR实时调度策略,时间片轮转实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。
SHCED_RR和SCHED_FIFO的不同:当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。
放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
SCHED_FIFO一旦占用cpu则一直运行。
一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。
而RR可以让每个任务都执行一段时间。
相同点: RR和FIFO都只用于实时任务。
创建时优先级大于0(1-99)。
按照可抢占优先级调度算法进行。
就绪态的实时任务立即抢占非实时任务。
所有任务都采用linux分时调度策略时。
1,创建任务指定采用分时调度策略,并指定优先级nice值(-20~19)。
2,将根据每个任务的nice值确定在cpu上的执行时间(counter)。
3,如果没有等待资源,则将该任务加入到就绪队列中。
4,调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算(counter+20-nice)结果,选择计算结果最大的一个去运行,当这个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。
5,此时调度程序重复上面计算过程,转到第4步。
6,当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。
操作系统中的进程调度算法在计算机操作系统中,进程调度是一项重要的任务,它决定了多个进程在CPU上的执行顺序。
进程调度算法的设计对于提高系统的运行效率、资源利用率和用户体验非常关键。
本文将介绍几种常见的进程调度算法,并讨论它们的优缺点。
1. 先来先服务调度算法(FCFS)先来先服务调度算法是一种最简单的调度算法,按照进程到达的顺序进行调度。
当一个进程到达后,它将被放入就绪队列中,等待CPU 的执行。
当前一个进程执行完毕后,下一个进程将获得CPU的调度,并开始执行。
这种算法非常直观和公平,但有可能导致长作业等待时间较长的问题,即所谓的"饥饿"现象。
2. 最短作业优先调度算法(SJF)最短作业优先调度算法是以进程执行时间为依据的调度算法。
在这种算法中,操作系统会首先选择执行时间最短的进程。
这样可以最大程度地减少平均等待时间,并提高系统的吞吐量。
然而,该算法可能会导致长执行时间的进程等待时间过长,容易出现"饥饿"现象。
3. 优先级调度算法优先级调度算法根据进程的优先级来进行调度。
每个进程都有一个与之相关的优先级数值,数值越小表示优先级越高。
操作系统会选择具有最高优先级的就绪进程来执行。
这种算法仅适用于静态优先级的系统,如果优先级可以动态调整,则可能导致优先级倒置的问题。
4. 时间片轮转调度算法(RR)时间片轮转调度算法是一种常用的调度算法,特别适用于分时操作系统。
在这种算法中,每个进程被分配一个固定的时间片,当时间片用尽后,操作系统会将CPU资源分配给下一个就绪进程。
这种算法保证了公平性,并且可以在一定程度上避免长作业等待时间过长的问题。
5. 多级反馈队列调度算法多级反馈队列调度算法采用多个就绪队列,每个队列具有不同的优先级和时间片大小。
新到达的进程首先进入最高优先级队列,如果时间片用尽或者被抢占,进程将被移到下一个优先级队列中。
这种算法综合了优先级和时间片轮转的优点,适用于多种类型的作业。
优先级调度算法和时间片轮转调度算法是两种不同的操作系统进程或任务调度算法。
下面我将分别解释这两种算法:
1. 优先级调度算法:
优先级调度算法是一种非抢占式的调度算法,在这种算法中,每个进程被赋予一个优先级,调度器总是选择优先级最高的进程来执行。
如果多个进程具有相同的优先级,则可以按照FCFS (先进先出)的方式进行调度。
这种算法的优点是简单且易于实现,但可能导致某些进程长时间得不到执行,因此公平性较差。
2. 时间片轮转调度算法:
时间片轮转调度算法是一种抢占式的调度算法,在这种算法中,每个进程被分配一个时间片,当进程在执行过程中用完时间片后,调度器将剥夺该进程的CPU并分配给下一个等待的进程。
如果一个进程在时间片用完之前阻塞或完成,调度器将进行特殊处理。
这种算法的优点是公平性较好,每个进程都有机会获得执行,但实现起来相对复杂。
优先级调度算法和时间片轮转调度算法各有优缺点,适用于不
同的场景。
在实际应用中,操作系统通常会根据具体需求选择适合的调度算法。
学号:课程设计课程名字系统软件开发实训A题目进程调度模拟设计——时间片轮转、优先级法学院专业班级姓名指导教师2014 年01 月17 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 进程调度模拟设计——时间片轮转、优先级法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结。
时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。
设计报告书收取时间:课程设计验收答辩完结时。
(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或责任教师)签名: 2013 年 12 月 10日进程调度模拟设计——时间片轮转、优先级法1设计目的1.1 阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解,能够使用其中的方法来进行进程调度模拟设计。
1.2 练掌握并运用时间片轮转和优先级法,掌握一种计算机高级语言的使用。
2 设计要求2.1 能够选择不同的调度算法(要求中给出的调度算法);2.2 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;2.3 根据选择的调度算法显示进程调度队列;2.4 根据选择的调度算法计算平均周转时间和平均带权周转时间。
操作系统的进程调度算法操作系统作为计算机系统的核心软件之一,负责管理计算机的资源和控制计算机的操作流程。
在操作系统中,进程调度算法是一项重要的功能,它决定了系统如何合理地分配CPU时间片给不同的进程,以提高系统的性能和响应速度。
一、进程调度算法的基本原理进程调度算法的核心原理是通过合理地选择下一个要执行的进程,使系统能够更加高效地利用CPU资源。
常见的进程调度算法包括先来先服务(FCFS)、短作业优先(SJF)、轮转法(RR)等。
1. 先来先服务(FCFS)调度算法先来先服务调度算法按照进程到达的先后顺序依次执行,无论进程所需的执行时间长短。
这种算法简单直接,但可能导致长时间的等待和低响应速度,特别是在执行时间较长的进程出现时。
2. 短作业优先(SJF)调度算法短作业优先调度算法按照进程的执行时间长度进行排序,先执行执行时间最短的进程。
这种算法可以减少平均等待时间,提高系统的响应速度。
但在执行时间较长的进程到达时,会导致长时间的等待。
3. 轮转法(RR)调度算法轮转法调度算法将CPU时间片分配给每个进程,每个进程在一个时间片内执行一段时间,然后切换到下一个进程。
这种算法可以保证公平性,避免了长时间等待的情况。
但如果时间片的长度过小,会导致频繁的进程切换,影响系统的效率。
二、进程调度算法的实现方式进程调度算法的实现方式可以分为两种主要类型:非抢占式和抢占式。
1. 非抢占式调度非抢占式调度算法在进程开始执行后,只有在进程自愿释放CPU 资源或完成执行后,才会将CPU分配给下一个进程。
这种调度算法简单可靠,但可能导致长时间等待和优先级反转的问题。
2. 抢占式调度抢占式调度算法允许操作系统在进程执行过程中主动抢占CPU资源,将其分配给优先级更高的进程。
这种调度算法能够在紧急情况下提高系统的响应速度,但可能导致进程间频繁切换的开销。
三、进程调度算法的优化策略为了进一步提高系统的性能和响应速度,操作系统可以采用一些优化策略来改进进程调度算法。
解读Linux系统中的进程调度解读Linux系统中的进程调度解读Linux系统中的进程调度操作系统要实现多进程,进程调度必不可少。
有人说,进程调度是操作系统中最为重要的一个部分。
我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。
而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。
如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。
所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程。
那么进程调度也就不会太重要。
哪个进程可执行,就让它执行去,没有什么需要多考虑的。
反之,如果系统负载非常高,时时刻刻都有N多个进程处于可执行状态,等待被调度运行。
那么进程调度程序为了协调这N个进程的执行,必定得做很多工作。
协调得不好,系统的性能就会大打折扣。
这个时候,进程调度就是非常重要的。
尽管我们平常接触的很多计算机(如桌面系统、网络服务器、等)负载都比较低,但是linux作为一个通用操作系统,不能假设系统负载低,必须为应付高负载下的进程调度做精心的设计。
当然,这些设计对于低负载(且没有什么实时性要求)的环境,没多大用。
极端情况下,如果CPU的负载始终保持0或1(永远都只有一个进程或没有进程需要在CPU上运行),那么这些设计基本上都是徒劳的。
优先级现在的操作系统为了协调多个进程的“同时”运行,最基本的手段就是给进程定义优先级。
定义了进程的优先级,如果有多个进程同时处于可执行状态,那么谁优先级高谁就去执行,没有什么好纠结的了。
那么,进程的优先级该如何确定呢?有两种方式:由用户程序指定、由内核的调度程序动态调整。
(下面会说到)linux内核将进程分成两个级别:普通进程和实时进程。
实时进程的优先级都高于普通进程,除此之外,它们的调度策略也有所不同。
linux任务调度机制
Linux任务调度机制是指Linux操作系统如何分配和管理系统资源以满足系统中各种不同类型的任务。
它的主要功能是决定哪个进程应该在何时运行,并通过分配CPU时间和其他资源来保证不同任务之间的公平性和优先级。
Linux操作系统使用两种不同的任务调度机制:进程调度和I/O调度。
进程调度是Linux操作系统中最常见的任务调度机制。
它负责分配和管理CPU 时间,以确保进程在适当的时间内运行。
进程调度器使用一个优先级队列来管理所有需要运行的进程,并根据优先级和其他因素来决定进程的运行顺序。
在Linux中,进程调度器是通过时间片轮转机制来实现的。
它将CPU时间划分为固定长度的时间片,并将每个进程分配一个时间片。
当时间片用完后,进程调度器将暂停当前进程,并将CPU分配给下一个就绪进程。
I/O调度器是Linux操作系统中另一个重要的任务调度机制。
它用于管理系统中所有的I/O请求。
在Linux中,I/O调度器使用队列算法来管理所有的I/O请求,以便根据优先级和其他因素来决定它们的运行顺序。
常见的I/O调度算法包括最先到达优先和最短寻道优先。
总之,Linux任务调度机制是操作系统保证所有任务被公平分配系统资源的关键部分。
它确保所有进程和I/O请求在适当的时间内得到执行,以提高系统的性能和稳定性。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 1 《操作系统原理》 课程设计报告
姓 名: 吴沛儒 班 级: BX0907 学 号: 9 指导老师: 胡静
二〇一一年十二月十二日 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
2 目录 一、 《操作系统原理》课程设计的目的与要求 .......................................... 错误!未定义书签。 1、 目的 .................................................................................................. 错误!未定义书签。 2、 要求 .................................................................................................. 错误!未定义书签。 二、 简述课程设计内容、主要功能和实现环境 ...................................... 错误!未定义书签。 1. 课程设计内容 ...................................................................................... 错误!未定义书签。 三、 任务的分析、设计、实现和讨论 ...................................................... 错误!未定义书签。 1、 任务的分析 ...................................................................................... 错误!未定义书签。 2、 任务的设计与实现 .......................................................................... 错误!未定义书签。 五、 附录 ...................................................................................................... 错误!未定义书签。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
3 进程调度—优先数法与简单轮转法 一、 《操作系统原理》课程设计的目的与要求 1、 目的 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。 2、 要求 (1) 设计一个有n个进程并发的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块一般应该包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 (2) 调度程序应包含2种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 (3) 算法应能显示或打印各个进程的PID、状态(运行状态R、等待状态W等)和参数(已运行时间等)的变化情况,便于观察诸进程的调度过程 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。
二、 简述课程设计内容、主要功能和实现环境 1. 课程设计内容 进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。 2. 主要功能 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。 3. 实现环境 本次课程设计结合算法的特点,采用Windows操作系统平台。开发工具为Microsoft Visual C++6.0。
三、 任务的分析、设计、实现和讨论 1、 任务的分析 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。 下面介绍优先数法和简单轮转法两种进程调度算法: 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 4 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。
进程控制块结构如下:
进程控制块链结构如下:
其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。
2、 任务的设计与实现
进程ID 链指针 优先数/轮转时间片数 占用CPU时间片数 进程所需时间片数 进程状态
TAIL RUN 1 … R HEAD 3
… W 5 … W 2 … W 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
5 算法流程图:
3、 操作过程和结果分析 优先数调度算法测试数据:
优先数调度算法程序运行结果截图: 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
6 图1.1 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
7 图1.2 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
8 简单轮转调度算法测试数据:
简单轮转调度算法程序运行结果截图:
图2.1 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
9 图2.2 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
10 图2.3 结果截图 4、 思考题的解答和讨论 通过以上的调度算法测试数据,得出以下不同算法的不同调度性能结果: 算法 比较项 (时间轮转法)RR (最高优先数)HRP
调度方式 抢占式 (按时间片) 非抢占式 响应时间 对于短进程提供良好的响应时间 提供良好的响应时间 开销 低 可能高
对待进程的作法 公平对待 良好的均衡(进程) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 11 四、 《操作系统》课程设计小结 当我在回首这一个星期的时候,不因虚度光阴而悔恨,也不因碌碌无为而羞耻。我想,这可能是我一学期中最丰富而有意义的一个星期了。
从大一开始我的理论知识就比实践知识好的多,每门课都如此,实训是我最头疼的一件事。课本上记得很牢的东西到了实际操作的时候感觉都用不上,做个实验就手忙脚乱的。所以我感觉,这个星期的课设不仅学到了在理论课上学不到的知识,更是让我对自己的实践操作有了信心。
本次课程设计的题目之一是进程调度——优先数法与简单轮转法。在多任务系统中,进程调度是CPU管理的一项核心工作。根据调度模式的不同,多任务系统有两种类型,即非抢占式和抢占式。其中,优先数法是非抢占式调度策略,而简单轮转法是抢占式调度策略。进程调度算法是系统效率的关键,它确定了系统对资源,特别是对CPU资源的分配策略,因而直接决定着系统最本质的性能指标,如相应速度和吞吐量等。常用的调度算法有:先进先出法,短进程优先法,时间片轮转法(时间片轮转法还分为可变时间片轮转法和简单循环轮转法),优先级调度法。简单循环轮转法中的时间片q是一个十分重要的因素,它的计算公式为q=t/n。q的选择对进程调度有很大的影响。q取的太大,轮转法就会退化成先进先出算法;而取的太小,则会导致系统开销增加,将时间浪费在进程切换上。所以q必须取值适中,使就绪队列中的所有进程都能得到同样的服务。但我们这次的实验中暂时还没有考虑到时间片q对算法的影响,只是测试了这个调度策略的算法。
这次我们的实验测试并比较了简单轮转法和优先数法这两种调度策略的性能。不同的算法有它自己不同的长处,简单轮转法虽然能够使每个进程可以以相等的速度向前进展,但对于紧急进程的处理就显然不及优先数法。可是优先数法的开销较高,而且可能对于较短而且优先级低的进程会花较长的时间等待。不过它还是具有良好的均衡性。实际应用中,经常是多种策略结合使用。如时间片轮转法中也可以适当考虑优先级因素,对于紧急的进程可以分配一个长一点的时间片,或连续运行多个时间片等。这样取长补短,合理利用各种不同算法的优势,让CPU的运行效率大大提高。
人们总是在寻找更好的解决方案,让算法的性能和开销得到一个相对较好的平衡。我在寻找这样的一个解决方案时,同学对我说虽然老师没有在课上讲过这个策略,但其实书上有关于更好的调度策略。也就是多级反馈队列调度。这种算法可以先用较小的时间片处理完那些用时较短的进程,而给那些用时较长的进程分配较大的时间片,以免较长的进程频繁被中断而影响处理机的效率。这也就是上面所提到的“多种策略结合使用,如时间片轮转法中也可以适当考虑优先级因素”。