操作系统:多级反馈队列调度算法模拟(Java实现)

一、实验目的:

 分析操作系统的核心功能模块,理解相关功能模块实现的数据结构和算法,并加以实现,
 加深对操作系统原理和实现过程的理解。

二、实验内容:

多级反馈队列调度的模拟
本算法设置了三个优先级从高到低的队列,时间片长度分别为:

  • 队列一:2
  • 队列二:4
  • 队列三:8

三、实现思路:

  1. 采用自定义类Progress实例化进程对象,组成进程数组;
  2. 初始化三个优先级从高到低(时间片长:2、4、8)的队列;
  3. 按照:
  • 首次加入的进程入最高优先级队列尾等待;

  • 某队列内时间片完而进程还没结束就立即调入次级优先级队列尾等待继续运行;

  • 只要有进程进入高优先级队列内,便对低优先级队列中的进程进行抢占式运行;

    的思想每一秒对每个队列内的进程具有的进程标识符、到达时间、运行时间、仍需运行时间(方便显示)等属性进行更新和输出,以此模拟实际操作系统的调度状态。

四、主要的数据结构:

/*三个队列*/
private static Queue<Progress> firstQueue = new LinkedList<>();
private static Queue<Progress> secondQueue = new LinkedList<>();
private static Queue<Progress> thirdQueue = new LinkedList<>();

/**
 * 内部进程类:模拟进程
 */
private static class Progress implements Comparable<Progress> {
   
    String id;     //进程标识符
    int reachTime; //到达时间
    int cpuTime;   //运行时间
    int needTime;  //仍需时间
    char state;    //进程状态
    /*重写比较器*/
    @Override
    public int compareTo( Progress b ) {
   
        //按reachTime从小到大排序
        return Float.compare(reachTime, b.reachTime);
    }
}
/*进程数组*/
Progress[] pro = new Progress[proNum];

五、程序流程图:

操作系统:多级反馈队列调度算法模拟(Java实现)_第1张图片

六、源代码:

package com.algorithm.multiStageFeedback;

import java.util.*;

/**
 * @Class MSFQS
 * @Description 多级反馈队列调度算法
 * @Author Naren
 * @Date 2020/5/30 10:46
 * @Version 1.0
 */
public class MSFQS {
   
    /*三个队列*/
    private static Queue<Progress> firstQueue = new LinkedList<>();
    private static Queue<Progress> secondQueue = new LinkedList<>();
    private static Queue<Progress> thirdQueue = new LinkedList<>();
    private static int firstTime;  //第一队列cpu时间片
    private static int secondTime; //第二队列cpu时间片
    private static int thirdTime;  //第三队列cpu时间片
    private static int proNum;     //进程数量
    private static Scanner sc = new Scanner(System.in);

    /**
     * 内部进程类:模拟进程
     */
    private static class Progress implements Comparable<Progress> {
   
        String id;     //进程标识符
        int reachTime; //到达时间
        int cpuTime;   //运行时间
        int needTime;  //仍需时间
        char state;    //进程状态

        /*重排输出格式*/
        @Override
        public String toString() {
   

你可能感兴趣的:(操作系统,算法,操作系统,算法,java)