实验二、进程调度模拟实验

本次实验主要探讨了操作系统中的进程调度,通过模拟不同调度算法,分析其对系统性能的影响,包括周转时间、等待时间和响应时间等关键指标。
摘要由CSDN通过智能技术生成

import java.util.ArrayList;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

import com.sun.jndi.url.iiopname.iiopnameURLContextFactory;

 
 class PCB {
   
	String name;//进程名
	int arriveTime;//到达时间
	int serveTime;//服务时间
	int beginTime;//开始时间
	int finshTime;//结束时间
	int roundTime;//周转时间
	int priority;//优先权
	String processState = "W";//进程状态
	double aveRoundTime;//带权周转时间
	int cpuTime =0;//在时间轮转调度算法中,记录该进程真实服务时间已经用时的时长
	int waitTime;//记录每个进程到达后的等待时间,只用于最高响应比优先调度算法中
	boolean firstTimeTag=false;//在RR算法中标识开始时间是否第一次计算
	
	public PCB() {
   
		
	}
	public PCB(String name,int priority, int arriveTime, int serveTime,int cpuTime) {
   
		this.name = name;
		this.priority = priority;
		this.arriveTime = arriveTime;
		this.serveTime = serveTime;
		this.cpuTime = cpuTime;
	}
 
	public String toString() {
   
		String info=new String("进程名: "+name+" 进程状态:"+processState+" 优先数:"+ priority
				+" 到达时间:"+arriveTime+" 服务时间:"+serveTime+" 已用CPU时间:"+cpuTime );
		return info;
	}
	
}
   
		
	

public class processMenu {
   
		 
	public static void main(String[] args) {
   
			
			 process p = new process();
			
				
			
			 

			 p.init();
			 
			 
			 while(true) {
   
				 System.out.println("请选择要验证的进程调度算法:1.先来先服务(A)  2.短作业优先(B)  3.最高优先数调度(C)  4.多级反馈队列(D)   5.结束程序(E)");
				 Scanner scanner = new Scanner(System.in);
				 String string = scanner.next();
				 switch(string) {
   
				 case "A":
					 p.FCFS();
					 break;
				 case "B":
					  p.SJF() ;
					 break;
				 case "C":
					 p.HPF();
					 break;
				 case "D":
					 p.MFQ();
					 break;
				 case "E":
						 System.out.println("程序结束!");
						 System.exit(-1);
				 }
			 }
			
		 }	 
			 
		 }
		 
		  class process {
   
			  
			  	Queue<PCB> P1 = new LinkedList<PCB>();
			  	Queue<PCB> P2 = new LinkedList<PCB>();
			  	Queue<PCB> P3 = new LinkedList<PCB>();
			  ArrayList<PCB> pcb;// 存放所有进程
			 LinkedList<PCB> link;// 存放进入就绪队列的进程
			 ArrayList<PCB> new_jcb;// 存放按指定调度算法结束的进程
			 PCB nowProess, nextProess;// 当前应执行进程
			LinkedList<PCB> t1,t5,t10;
			LinkedList [] a = new LinkedList[3];
			 int sum = 0;
			 public void init() {
   //初始化
			  pcb = new ArrayList<PCB>();
			  link = new LinkedList<PCB>();
			  new_jcb = new ArrayList<PCB>()
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值