一、实验目的: 通过实验抢占式短作业优先调度算法(Preemptive Shortest Job First, PSJF),加深对操作系统调度算法的理解,掌握抢占式调度算法的设计与实现。 实验设备与实验环境: 计算机,Java编译系统,idea,ChatGPT 二、实验程序设计内容:
- 实现抢占式短作业优先调度算法(PSJF)。
- 设计一个模拟环境,包括进程的到达时间和执行时间,用于测试PSJF算法的效果。
- 运行模拟环境,观察PSJF算法在不同进程情况下的调度表现。
- 收集实验数据,分析不同参数对PSJF算法性能的影响。
三、实验程序设计思路及流程图
- 初始化进程列表,包括进程的到达时间和执行时间。
- 使用优先队列(PriorityQueue)实现PSJF算法,根据进程的剩余执行时间动态调度进程执行顺序。
- 模拟时间片轮转,按时间片依次执行进程,当一个进程执行完毕或被抢占时,重新调度进程执行顺序。
- 输出每个进程的执行情况,包括开始执行时间和完成执行时间,以及整体的调度情况。
四、实验源程序及注释: package homework.os;
/**
* Date:2024/3/25 10:14
* Description:SJF
*
* @author Leon
* @version 1.0
*/
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;
class Process {
int id;
int arrivalTime;
int burstTime;
public Process(int id, int arrivalTime, int burstTime) {
this.id = id;
this.arrivalTime = arrivalTime;
this.burstTime = burstTime;
}
}
public class exm3 {
public static void main(String[] args) {
List<Process> processes = new ArrayList<>();
init(processes);
SJF(processes);
}
static void init(List<Process> processes){
Scanner scanner = new Scanner(System.in);
System.out.println("Plz input the number of process:");
int n=scanner.nextInt();
for(int i=1;i<=n;i++){
System.out.println("input the arrivalTime and burstTime of process"+i);
int arrivalTime=scanner.nextInt();
int burstTime=scanner.nextInt();
processes.add(new Process(i,arrivalTime,burstTime));
}
}
public static void SJF(List<Process> processes) {
PriorityQueue<Process> queue = new PriorityQueue<>((p1, p2) -> p1.burstTime - p2.burstTime);
int currentTime = 0;
int completedProcesses = 0;
while (completedProcesses < processes.size()) {
for (Process p : processes) {
if (p.arrivalTime == currentTime) {
queue.add(p);
}
}
if (!queue.isEmpty()) {
Process currentProcess = queue.poll();
System.out.println("Executing Process " + currentProcess.id + " at time " + currentTime);
currentProcess.burstTime--;
if (currentProcess.burstTime == 0) {
completedProcesses++;
System.out.println("Process " + currentProcess.id + " completed at time " + (currentTime + 1));
} else {
queue.add(currentProcess);
}
}
currentTime++;
}
}
} 五、实验程序测试过程及解释说明 Plz input the number of process: 4 input the arrivalTime and burstTime of process1 0 6 input the arrivalTime and burstTime of process2 1 4 input the arrivalTime and burstTime of process3 2 8 input the arrivalTime and burstTime of process4 3 5 六、实验程序测试过程与结果分析、 Executing Process 1 at time 0 Executing Process 2 at time 1 Executing Process 2 at time 2 Executing Process 2 at time 3 Executing Process 2 at time 4 Process 2 completed at time 5 Executing Process 4 at time 5 Executing Process 4 at time 6 Executing Process 4 at time 7 Executing Process 4 at time 8 Executing Process 4 at time 9 Process 4 completed at time 10 Executing Process 1 at time 10 Executing Process 1 at time 11 Executing Process 1 at time 12 Executing Process 1 at time 13 Executing Process 1 at time 14 Process 1 completed at time 15 Executing Process 3 at time 15 Executing Process 3 at time 16 Executing Process 3 at time 17 Executing Process 3 at time 18 Executing Process 3 at time 19 Executing Process 3 at time 20 Executing Process 3 at time 21 Executing Process 3 at time 22 Process 3 completed at time 23 七、理论学习与实践能力锻炼方面的个人心得体会 通过实验,我对抢占式短作业优先调度算法有了更深入的理解,了解了其优先级调度的原理和实现方式。 实验过程中,我发现PSJF算法能够有效减少平均等待时间和周转时间,提高系统的效率和响应速度。 在设计和实现PSJF算法的过程中,我学会了如何利用数据结构和算法来解决实际的调度问题,提高了编程能力和算法设计能力。 通过分析实验数据,我发现不同进程的到达时间和执行时间对PSJF算法的影响,进一步加深了对调度算法性能的认识。 |