当前位置: 首页 > 知识库问答 >
问题:

CPU 调度模拟器 FIFO 实现

慕容聪
2023-03-14

我很好奇如何在Java中实现FIFO(先进先出)算法。我已经创建了3个类,但必须实现FIFO和SJF(最短作业优先)的调度算法。

对于模拟器类,我们有以下变量:

private CPU cpu1;
private ArrayList<Process> ready;
private ArrayList<Process> finished;
private int time;

那么方法是:

public Process select(ArrayList<Process> ready){
    if(SCHEDULING_ALGORITHM.equals("FIFO"))
    {
        //add code here
    }
    else if(SCHEDULING_ALGORITHM.equals("SJF"))
        //add code here
    }

其他方法有:

public void addProcess(String name, int start, int length)
{
    Process temp = new Process(name, start, length);
    ready.add(temp);
}

还有另外两个类进程和CPU。进程保存有关应存储在那里的单个进程的任何信息。

共有1个答案

祁远
2023-03-14

先进先出是队列的确切结构。您可以使用Java的ArrayDeque实现为FIFO实现创建队列。使用 ArrayDeque 上的 poll() 方法将下一个对象从队列中取出。

ArrayDeque<Object-Type-Here> queue = new ArrayDeque<>();
//add your objects to the queue here in a first-in-first-out manner
------------------------------
//Here's how to get the first thing out of the queue
queue.poll();

对于SJF,可以使用最小堆。为此,请使用Java的PriorityQueue实现。您可能需要实现Comparable或创建compareTo函数,具体取决于您想要实现解决方案的方式。compareTo函数将允许priorityQueue像最小堆那样自动排序。也可以使用poll()方法。

PriorityQueue<Object-Type-Here> pq = new PriorityQueue<>();
//add your objects to the min-heap here for a shortest-job-first implementation
 类似资料:
  • 所以我有一个FCFS和SJF CPU模拟器调度算法,但是我正在努力实现最短剩余时间优先算法。 这是我目前掌握的情况。 基本上,该函数接收提交时间和突发时间的列表,并返回响应、转身和等待时间的列表。我一直试图先用就绪队列编辑我短暂工作的残余,但没有成功。 有人能给我指一下正确的方向吗?

  • SRTF cpu调度分为三个部分,一个进程花费cpu突发时间,然后是IO突发时间,接着是cpu突发时间。混乱的是,SRTF需要应用在哪个突发时间上,是在总cpu突发时间上还是仅在第一次cpu运行中给出的cpu突发时间(分别在第二次cpu突发时间)上?

  • 多CPU与CPU间调度 SMP(对称多处理器)系统中,所有的CPU共享全部资源(总线,内存,I/O等),最大的特点就是所有资源共享,多个CPU之间没有区别。 NUMA(非一致内存访问)的基本特征是具有多个CPU节点,每个CPU节点由多个CPU组成,并且具有独立的本地内存与I/O槽口等。因此,虽然每个 CPU都可以访问整个系统的内存,但是访问本地节点内存的速度远远高于访问其它节点的内存。详见《SMP

  • 我读到java中的线程调度程序在单个进程中每次只运行一个线程。 假设我们有一个JVM运行一台CPU机器。因此,如果我启动10个线程,它们将由同一个线程调度程序管理。

  • 我使用Windows10和android studio V3.1.2我想在android studio中使用AVD我下载systemImages for API 27并将其放入sdk,systemImages文件夹中,它工作正常,没有问题。我创建了一个虚拟设备。现在,当我启动它时,事件日志中出现以下错误: 模拟器:panic:缺少“x86”CPU的模拟器引擎程序。 我该怎么办?这正在发生

  • 问题内容: 考虑以下代码: writer.c reader.c 我的问题是: 由于事先不知道foo和bar将有多少个字节,我如何知道要从reader.c读取多少个字节? 因为例如,如果我在reader中读取10个字节,而foo和bar小于10个字节,那么我会将它们都放在同一个变量中,而这是我不希望的。 理想情况下,我将对每个变量都具有一个读取功能,但是我又一次事先不知道数据将具有多少字节。 我考虑