操作系统进程调度

华中农业大学 学生实验报告

课程名称 计算机操作系统 实验名称 进程调度 实验类型 验证 设计
综合 创新
【实验目的】
实验目的:
(1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,使 学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。
(2)了解进程(线程)的调度机制。
(3)学习使用进程(线程)调度算法,掌握相应的与调度有关的 API 函数。

实验要求:
(1)经调试后程序能够正常运行。
(2)采用多进程或多线程方式运行,体现了进程或作业先来先服务、高优先权、按时间片轮转,高相应比优先调度算法。
(3)程序界面美观。
【实验内容】
进程调度相关算法:实现先来先服务、短作业优先、按时间片轮转、按优先级、高响应比优先。

【实验环境】(含主要设计设备、器材、软件等)
Pc电脑一台

【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、数据等)
内容:

  1. FCFS(先来先服务)和SJF(短作业优先)调度方法
    先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。

  2. 时间片轮转(RR)调度算法是专门为分时系统设计的。它类似于 FCFS调度,但是增加了抢占以切换进程。该算法中,将一个较小时间单元定义为时间量或时间片。时间片的大小通常为 10~100ms。就绪队列作为循环队列。CPU 调度程序循环整个就绪队列,为每个进程分配不超过一个时间片的 CPU。为了实现 RR 调度,我们再次将就绪队列视为进程的 FIFO 队列。新进程添加到就绪队列的尾部。CPU 调度程序从就绪队列中选择第一个进程,将定时器设置在一个时间片后中断,最后分派这个进程。

3.高优先级调度算法:该算法用于作业调度时,系统从后备作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行。当该算法用于进程调度时,将把处理机分配给就绪进程队列中优先级最高的进程。高优先级调度算法分为抢占的高优先级调度算法和非抢占的高优先级调度算法。非抢占式优先级算法,这种调度方式下,系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程就能一直执行下去,直至完成;或因等待某事件的发生使该进程不得不放弃处理机时,系统才能将处理机分配给另一个优先级高的就绪进程。抢占式优先级调度算法,在这种调度方式下,进程调度程序把处理机分配给当时优先级最高的就绪进程,使之执行。一旦出现了另一个优先级更高的就绪进程时,进程调度程序就停止正在执行的进程,将处理机分配给新出现的优先级最高的就绪进程。

4.高响应比调度算法:该算法实际上是一种动态优先调度算法,它以相应比作为作业或进程的动态优先权,其目的是既照顾短作业,又考虑到作业的等待时间,使长作业不会长期等待;但每次调度前,都要进行响应比计算,会增加系统开销。响应比 = 相应时间 / 要求服务时间 = 等待时间 + 要求服务时间 / 要求服务时间。

程序说明及实现:

FCFS 程序截图:

RR 代码截图:

Prioity 代码截图:

HRRF代码截图:

FCFS 结果截图:
先选择FCFS,设置四个进程;到达时间为分别为480,530,590,530,运行时间分别为12,50,10,20.
根据结果即可得到如下:

SJF结果截图:
先选择SJF, 设置四个进程;到达时间为分别为480,530,590,530,运行时间分别为12,50,10,20.
根据结果即可得到如下:

RR结果:
四个进程所需时间分别为2 5 1 6
结果如下:

Priority 结果:
四个进程的优先级分别为5 6 3 1
每个进程执行一个时间单位后优先级自动下降1

HRRF结果截图:
P1,p2,p3,p4

【实验结果或总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意见)

  1. 本次实验描述了5 种算法 :实现先来先服务、短作业优先、按时间片轮转、按优先级、高响应比优先。首先 对比的是先来先服务和短作业优先算法,如果长作业靠前,则不适合用先来先服务;而短作业优先的则并不能很好的考虑到紧急的作业,也不利于那些长作业;而时间片轮转法,对于每个进度都较为公平,但没考虑到紧急作业;按优先级的算法只考虑到了紧急情况,并没有考虑到作业的长短;所以在调度算法里,高响应比算法可能更好。
  2. 不同调度算法在代码思路和代码实现方面有较大的差异,综合考虑到数据结构和算法;先来先服务算法和短作业优先算法可以用栈来实现;按优先级调度算法可以用优先级队列来实现等等。
  3. 通过这次实验懂得了理论和代码的差距,虽然理论课听懂了但实践起来也有些差距。
  4. 通过这次实验更加深入的理解了进程调度的各个算法的实现,思想及适合的情况。希望自己抽空可以用C++来实现这些功能。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值