进程调度算法模拟,用动态优先数及时间片轮转法实现进程调度_Java语言模拟实现

 

//process类

import java.util.Date;

public class process {

	private  int ID_name;    //进程ID名
	private  int PRIORITY;        //优先数
	private  int CPUTIME;         //进程已进行时间
	private  int ALLTIME;         //进程还需要的时间
	private  String STATE;          //进程状态

	//设置 process类的构造方法
	process(int i, int PRIORITY , int CPUTIME , int ALLTIME , String STATE){

		this.ID_name = i;
		this.PRIORITY = PRIORITY;
		this.CPUTIME = CPUTIME;
		this.ALLTIME = ALLTIME;
		this.STATE = STATE;

	}

	public  int getID_Name()
	{
		return ID_name;
	}

	public  int getPRIORITY()
	{
		return PRIORITY;
	}

	public  int getCPUTIME()
	{
		return CPUTIME;
	}

	public  int getALLTIME()
	{
		return ALLTIME;
	}


	public  String getSTATE()
	{
		return STATE;
	}

	public  int setPRIORITY(int i)
	{
		return PRIORITY-=i;
	}

	public  int setCPUTIME(int i)
	{
		return CPUTIME+=i;
	}

	public  int setALLTIME(int i)
	{
		return ALLTIME-=i;
	}

}

 


//process_Arraylist类

package ArrayList;

import java.util.ArrayList;

public class processArrayList {

	public static void main(String[] args) {
	// TODO Auto-generated method stub

		ArrayList<process> process_list = new ArrayList<>();    //创建数组列表存放进程对象
		 
		// 将创建的对象加入数组列表中
		process_list.add( new  process(0, 9, 0, 3, "ready" ));
		process_list.add( new  process(1, 38, 0, 3, "ready" ));
		process_list.add( new  process(2, 30, 0, 6, "ready" ));
		process_list.add( new  process(3, 29, 0, 3, "ready" ));
		process_list.add( new  process(4, 0, 0, 4, "ready" ));
		 
		System.out.println("ID_name   PRIORITY   CPUTIME   ALLTIME   STATE ");
		for (process p : process_list)
			System.out.printf("      %d              %d                %d               %d          %s \n",
		p.getID_Name(),p.getPRIORITY(),p.getCPUTIME(),p.getALLTIME(),p.getSTATE() );
		 
		while(process_list.size() > 0) {
			int id = getID( process_list) ;
			process p = process_list.get(id);
			if(p.getALLTIME() == 0) {
				System.out.println("运行完成的进程:");
				System.out.printf("      %d              %d                %d               %d          %s \n",
				p.getID_Name(),p.getPRIORITY(),p.getCPUTIME(),p.getALLTIME(),p.getSTATE() );
				process_list.remove(id);
			}
			else {
				System.out.println("正在运行的进程:"); 
				    System.out.printf("      %d              %d                %d               %d          %s \n",
				p.getID_Name(),p.getPRIORITY(),p.getCPUTIME(),p.getALLTIME(),p.getSTATE() );
				p.setPRIORITY(3);         //优先级减3
				p.setCPUTIME(1);          //运行时长加1
				p.setALLTIME(1);          // 还需时长减1
				System.out.println("当前进程运行完的结果:");
				System.out.printf("      %d              %d                %d               %d          %s \n",
				p.getID_Name(),p.getPRIORITY(),p.getCPUTIME(),p.getALLTIME(),p.getSTATE() );
			}
		}

	}

	public static  int getID( ArrayList<process> process_list){
	    int size = process_list.size();
	    int id = 0;
	    int p = process_list.get(0).getPRIORITY();
	    for(int i=1; i<size ; i++){
	    	if( process_list.get(i).getPRIORITY() >p ){
			    p = process_list.get(i).getPRIORITY();
			    id = i;
		    }
	    }
	    return id;
	   }
	
}


}

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值