- 本博客转载自http://blog.csdn.net/houchaoqun_xmu/article/details/55539362请尊重版权完整
操作系统系列
学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘。等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍。读研第一学期,发现很多东西都可以从博客上学习到,也有不少博主呕心沥血整理了挺多有用的博文。于是,本人借此契机,也慢慢开始整理一些博文,不断改进完善中。整理博文(IT)有如下目的:
- 首要目的:记录“求学生涯”的所学所悟,不断修改,不断更新!(有读者的互动)
- 其次目的:在这“开源”的时代,整理并分享所学所悟是一种互利的行为!
博文系列:操作系统课程的相关实验
6个实验相关的代码下载地址:http://download.csdn.net/detail/houchaoqun_xmu/9865648
-------------------------------
先来先服务FCFS和短作业优先SJF进程调度算法
一、概念介绍和案例解析
FCFS调度算法
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
- 案例剖析:
- 案例剖析2:采用FCFS调度算法时的调度性能
- SJF调度算法:
- 该算法对长作业不利,如作业C的周转时间由10增至16,其带权周转时间由2增至3.1。更严重的是,如果有一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度。
- 该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理。
- 由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。
二、实验介绍
- 问题描述:
设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1,… ,Tn时刻到达系统,它们需要的服务时间分别为S1,… ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
- 程序要求:
---- 进程个数n;每个进程的到达时间T1, … ,Tn和服务时间S1, … ,Sn;选择算法1-FCFS,2-SJF。
---- 要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间。
---- 输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等。
---- 输出:要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。
三、程序设计和开发
- 程序设计:
- Initial()进行初始化。
- input()对到达时间和服务时间进行输入。
- get_firstProcess()获得第一个进程,FCFS和SJF算法的实现相同。
- FCFS()对算法进行处理。
- SJF()对算法进行处理。
- choose_Algorithm();对实现算法的类别进行选择:具有容错性特征。
- FCFS:
- SJF:
四、实验结果分析
- FCFS算法:
- SJF算法: