任务1、FCFS与SJF调度算法分析
实验内容与步骤:
1-1启动并进入Windows环境,利用VC++ 6.0编译环境调试任务1.cpp中的代码。
1-2观察代码及程序运行结果,分析FCFS和SJF算法的优缺点。
FCFS算法: 算法容易实现。但效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短。因此优待了长作业而不利于短作业;有利于CPU繁忙型作业,而不利于I/O繁忙型作业。
SJF算法:算法易于实现。但效率不高,主要弱点是忽视了作业等待时间;会出现饥饿现象。
任务2、观察程序中的考虑不周之处并修改
实验内容与步骤:
2-1继续阅读代码,分析其逻辑,通过不同的输入测试程序运行结果,发现程序中存在的问题。
没有考虑到当前一个任务的结束时间小于下一个任务的提交时间,应该把下一个任务的开始时间设置为这个任务的提交时间,不应该是前一个任务的结束时间的情况:
2-2修改FCFS算法代码,解决发现的问题。
答:修改部分的截图
2-3修改SJF算法代码,解决发现的问题。
任务3、实现HRRN算法(完成任务4后选做)
实验内容与步骤:
3-1类比SJF算法的实现HRRN算法。
任务4、处理机调度算法练习
练习内容:
4-1下表给出作业1、2、3到达时间和运行时间。分别采用短作业优先调度算法和先来先服务调度算法(不抢占),绘制表格计算每个作业的完成时间、周转时间、带权周转时间、平均周转时间、平均带权周转时间。(时间单位:小时,以十进制进行计算。)
作业号 | 到达时间 | 运行时间 |
1 | 0.0 | 8.0 |
2 | 0.4 | 4.0 |
3 | 1.0 | 1.0 |
4-2 假设有四个作业,它们提交、运行时间如下表所示。若采用响应比高者优先调度算法(不抢占),试问平均周转时间和平均带权周转时间为多少? (要求:求解应体现计算过程,时间单位:小时,以十进制进行计算。)
作业号 | 到达时间 | 运行时间 |
1 | 8.0 | 2.0 |
2 | 8.3 | 0.5 |
3 | 8.5 | 0.1 |
4 | 9.0 | 0.4 |
答:
实验总结
分别画出FCFS、SJF算法的流程图: