1. 程式人生 > >時間片輪轉排程演算法

時間片輪轉排程演算法

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);
     
	}

}