时间片轮转调度算法

时间片轮转调度算法:每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

public class process {

	/**
	 * @param args
	 */
	public static void RR(int[] arriveTime,int[] serviceTime,int q){
		Queue<Integer> queue=new LinkedList<Integer>();
	     queue.offer(0);
	     int[] temp=new int[arriveTime.length];
	     for(int s=0;s<serviceTime.length;s++){
	    	 temp[s]=serviceTime[s];
	     }
	     int[] finishTime=new int[serviceTime.length];
	     int j;
	     int i=1;
	     int time=finishTime[0];
	     int count=0;
	     for(int m=0;m<arriveTime.length;m++)
	    	 count+=serviceTime[m];
	    	 int tmp=-1;
	    	 while(!queue.isEmpty()){
	    		 temp[queue.peek()]=temp[queue.peek()]-q;
	    		 if(temp[queue.peek()]>=0){
	    			 time=q+time;
	    			 finishTime[queue.peek()]=time;
	    		 }
	    		 if(temp[queue.peek()]<0){
	    			 time=temp[queue.peek()]+q+time;
	    			 finishTime[queue.peek()]=time;
	    			 temp[queue.peek()]=0;
	    		 }
	    		 for(j=i;j<arriveTime.length;j++){
	    			 if(arriveTime[j]<=time){
	    				 queue.offer(j);
	    				 i++;
	    			 }else
	    				 continue;
	    			 }
	    			 if(temp[queue.peek()]==0){
	    				 finishTime[queue.peek()]=time;
	    				 if(queue.isEmpty()!=true){
	    					 queue.poll();
	    				 }
	    			 }
	    			 else{
	    				 tmp=queue.peek();
	    				 queue.poll();
	    				 queue.offer(tmp);
	    			 }
	    		 }
	    		 
	    	 
	    	 int[] waitTime=new int[arriveTime.length];
    		 int waitTimeTotal=0;
    		 for(int jj=0;jj<arriveTime.length;jj++){
    			 waitTime[jj]=finishTime[jj]-arriveTime[jj];
    			 waitTimeTotal+=waitTime[jj];
    		 }
    		 double aveWaitTime=(double)waitTimeTotal/arriveTime.length;
    		 System.out.println(aveWaitTime);
	     
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arrive={0,1,2,3,4};
		int[] service={6,2,5,9,8};
		RR(arrive,service,4);
     
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值