1、编写程序,模拟短作业优先任务。JAVA

时间: 2024-02-15 20:05:05 浏览: 23
好的,以下是一个简单的 Java 代码实现短作业优先调度算法的模拟: ```java import java.util.*; class Process implements Comparable<Process> { private int pid; // 进程 ID private int arrivalTime; // 到达时间 private int burstTime; // 执行时间 private int waitingTime; // 等待时间 private int turnaroundTime; // 周转时间 private int remainingTime; // 剩余时间 public Process(int pid, int arrivalTime, int burstTime) { this.pid = pid; this.arrivalTime = arrivalTime; this.burstTime = burstTime; this.remainingTime = burstTime; } public int getPid() { return pid; } public int getArrivalTime() { return arrivalTime; } public int getBurstTime() { return burstTime; } public int getWaitingTime() { return waitingTime; } public int getTurnaroundTime() { return turnaroundTime; } public int getRemainingTime() { return remainingTime; } public void setWaitingTime(int waitingTime) { this.waitingTime = waitingTime; } public void setTurnaroundTime(int turnaroundTime) { this.turnaroundTime = turnaroundTime; } public void setRemainingTime(int remainingTime) { this.remainingTime = remainingTime; } @Override public int compareTo(Process other) { return this.burstTime - other.burstTime; } } public class SJF { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 输入进程数和每个进程的到达时间和执行时间 System.out.print("请输入进程数:"); int n = input.nextInt(); Process[] processes = new Process[n]; for (int i = 0; i < n; i++) { System.out.print("请输入进程 " + (i+1) + " 的到达时间和执行时间:"); int arrivalTime = input.nextInt(); int burstTime = input.nextInt(); processes[i] = new Process(i+1, arrivalTime, burstTime); } // 对进程按到达时间进行排序 Arrays.sort(processes, Comparator.comparingInt(Process::getArrivalTime)); // 模拟调度过程 int currentTime = 0; double waitingTimeSum = 0, turnaroundTimeSum = 0; PriorityQueue<Process> pq = new PriorityQueue<>(); for (int i = 0; i < n || !pq.isEmpty(); ) { // 将到达时间小于等于当前时间的进程加入优先队列 while (i < n && processes[i].getArrivalTime() <= currentTime) { pq.offer(processes[i]); i++; } // 如果队列为空,则当前时间后移 if (pq.isEmpty()) { currentTime++; continue; } // 取出优先级最高的进程 Process currentProcess = pq.poll(); // 计算等待时间和周转时间 currentProcess.setWaitingTime(currentTime - currentProcess.getArrivalTime()); currentProcess.setTurnaroundTime(currentProcess.getWaitingTime() + currentProcess.getBurstTime()); // 更新统计数据 waitingTimeSum += currentProcess.getWaitingTime(); turnaroundTimeSum += currentProcess.getTurnaroundTime(); // 执行当前进程 currentTime += currentProcess.getBurstTime(); // 更新队列中进程的剩余时间 while (i < n && processes[i].getArrivalTime() <= currentTime) { pq.offer(processes[i]); i++; } for (Process p : pq) { p.setRemainingTime(currentTime - p.getArrivalTime()); } // 如果当前进程执行完后还有剩余时间,则重新加入队列 if (currentProcess.getRemainingTime() > 0) { pq.offer(currentProcess); } } // 输出平均等待时间和平均周转时间 double avgWaitingTime = waitingTimeSum / n; double avgTurnaroundTime = turnaroundTimeSum / n; System.out.println("平均等待时间:" + avgWaitingTime); System.out.println("平均周转时间:" + avgTurnaroundTime); } } ``` 在上面的代码中,我们定义了一个 `Process` 类来表示进程,其中包含了进程的 ID、到达时间、执行时间、等待时间、周转时间和剩余时间等信息。我们使用一个优先队列来模拟短作业优先调度算法,每次取出队列中执行时间最短的进程执行,如果当前进程执行完后还有剩余时间,则重新加入队列。最后输出平均等待时间和平均周转时间。 注意,上面的代码中并没有对进程的到达时间进行限制,实际上在短作业优先调度算法中,进程的到达时间也是一个很重要的因素,如果两个进程的执行时间相同,那么优先选择到达时间更早的进程。因此,在实际应用中还需要对到达时间进行处理,例如先按到达时间排序,然后再按执行时间排序。

相关推荐

最新推荐

recommend-type

详解Java编写并运行spark应用程序的方法

主要介绍了详解Java编写并运行spark应用程序的方法,内容详细,结合了作者实际工作中的问题进行具体分析,具有一定参考价值。
recommend-type

Java 模拟cookie登陆简单操作示例

主要介绍了Java 模拟cookie登陆简单操作,结合实例形式分析了Java 模拟cookie登陆的相关原理与基本实现技巧,需要的朋友可以参考下
recommend-type

用JAVA编写计算器程序(模拟Windows计算器)

编写模拟Windows的计算器,其实这个程序很简单的,想知道的话,可以看一看。
recommend-type

java编写创建数据库和表的程序

主要为大家详细介绍了java编写创建数据库和表的程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

基于循环队列的排队买票模拟程序

编程建立循环队列存储结构,对排队买票过程进行模拟。要求程序在控制台屏幕上显示字符菜单: 1. 排队——输入新到达的买票人姓名,加入买票队列中; 2. 售票——排队队列中最前面的人购票成功,显示信息并将其从队列...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。