操作系统-实验三 模拟处理机HRRN调度算法(Java实现)

                                                             实验三  模拟处理机HRRN调度算法

 

一、实验目的:用c,c++,java设计HRRN调度算法程序。

二、实验内容:本实验随机输入的进程个数、进程名称、进程提交到系统的时间、进程运行所需时间。通过模拟程序。显示以下信息:

1)处理机对进程的调度过程。

2)计算这N个进程的平均周转时间。

三、HRRN(最高响应比调度算法)原理

最高响应比调度:在每次调度作业时,先计算后备队中每个作业的响应比,然后挑选响应比高者投入运行。

响应比R定义:

                  R=(w+S)/S

  (R:响应比,W=等待时间,S=运行时间)

 响应比R= 周转时间 / 运行时间

          =(运行时间 + 等待时间)/ 运行时间

          = 1 +(等待时间 / 运行时间)

四、示例

如:输入

进程个数:5

进程名称   到达系统时间   所需服务时间

A              0           3

B              2           6

C              4           4

D              6           5

E              8           2

显示运行结果:

进程名称  到达系统时间 所需服务时间  开始时间  结束时间

A              0           3           0          3

B              2           6           3          9

C              4           4           9          13   

E              8           2           13         15

D              6           5           15         20

5个进程的平均周转时间:(3+7+9+7+14)/5=8

 

五、运行结果

操作系统-实验三 模拟处理机HRRN调度算法(Java实现)_第1张图片

操作系统-实验三 模拟处理机HRRN调度算法(Java实现)_第2张图片

 

背景: 这是我们操作系统课程的一道实验题

做这道题,我只花了打算8分钟左右的样子,因为这道题和之前实验二的一道题差不多

 

解题思路:

首先进行根据提交时间排序一下,然后依次根据进程数来选择遍历次数

初始化当前时间为最先到达内存的进程的提交时间

然后判断在这个时间点有哪些任务已经到达内存,依次放入另外一个集合

对这个集合进行响应比排序,将响应比最高的进程进行执行,执行结束后当前时间为当前时间加上这个进程的所需时间

然后再判断在这个时间点有哪些任务已经到达内存,依次放入另外一个集合

代码如下:

package com.eternally.dfs;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * HRRN算法
 * @author Administrator
 *
 */

public class Test2 {
	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		String name;
		float ttime;
		float needtime;
		List list = new ArrayList<>();
		for(int i = 0; i < n;i ++) {
		    name=in.next();
		    ttime=in.nextFloat();
		    needtime=in.nextFloat();
		   Pcb pcb = new Pcb(name, ttime, needtime);
		   list.add(pcb);
		}
		Collections.sort(list);
		System.out.println("作业号       提交时间       所需时间       开始时间       完成时间");
		float sum=list.get(0).ttime;
		List list2 = new ArrayList<>();
		float sum1=0;
		
		for(int i = 0;i list1=new ArrayList<>();
		    for(int j = 0;j < list.size();j ++) {
			if(list.get(j).getTtime()<=sum) {
			    list1.add(list.get(j));
			}
		    }
		    
		    for(int j = 0;j < list1.size()-1;j ++) {
			for(int k = 0;k list,int i,int j){
	        final List l=list;
	        l.set(i, l.set(j, l.get(i)));
	    }
}

 

 

 

 

代码如下:

package com.eternally.dfs;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * HRRN算法
 * @author Administrator
 *
 */
class Pcb implements Comparable{
    public String name;
    public float ttime;
    public float needtime;
    public Pcb(String name, float ttime, float needtime) {
	this.name = name;
	this.ttime = ttime;
	this.needtime = needtime;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public float getTtime() {
        return ttime;
    }
    public void setTtime(float ttime) {
        this.ttime = ttime;
    }
    public float getNeedtime() {
        return needtime;
    }
    public void setNeedtime(float needtime) {
        this.needtime = needtime;
    }
    @Override
    public int compareTo(Pcb o) {
	if(this.ttime>o.ttime) {
	    return 1;
	}
	return -1;
    }
    
  
}
public class Test2 {
	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		String name;
		float ttime;
		float needtime;
		List list = new ArrayList<>();
		for(int i = 0; i < n;i ++) {
		    name=in.next();
		    ttime=in.nextFloat();
		    needtime=in.nextFloat();
		   Pcb pcb = new Pcb(name, ttime, needtime);
		   list.add(pcb);
		}
		Collections.sort(list);
		System.out.println("作业号       提交时间       所需时间       开始时间       完成时间");
		float sum=list.get(0).ttime;
		List list2 = new ArrayList<>();
		float sum1=0;
		
		for(int i = 0;i list1=new ArrayList<>();
		    for(int j = 0;j < list.size();j ++) {
			if(list.get(j).getTtime()<=sum) {
			    list1.add(list.get(j));
			}
		    }
		    
		    for(int j = 0;j < list1.size()-1;j ++) {
			for(int k = 0;k list,int i,int j){
	        final List l=list;
	        l.set(i, l.set(j, l.get(i)));
	    }
}

 

你可能感兴趣的:(计算机)