コード例 #1
0
void run_simulation(int algorithm, int quantum)
{
    switch(algorithm) {
        case STRIDE:
            stride_scheduling(quantum);
            break;
        case PS:
            priority_scheduling();
            break;
        case RR:
            rr_scheduling(quantum);
            break;
        case FCFS:
        default:
            first_come_first_serve();
            break;
    }
}
コード例 #2
0
ファイル: cpusched.c プロジェクト: cdalong/csc360
void stride_scheduling(int quantum)
{
	
  	
  	total_priority = 0;
  	global_tickets = 10000;
  	/*  divide tickets by piority */
  	
  	int i,p;
   	for ( p =0; p<num_tasks; p++){
		if (tasks[p].stride <= current_pass && tasks[p].finish_time == 0)	
	     total_priority += tasks[p].priority;
	    
			
       }
       
       if (total_priority == 0){
		   compute_and_print_stats();
		   exit(0);
	   }
  	for ( i =0; i<num_tasks; i++){ 
		
		 
		tasks[i].stride = tasks[i].priority * tasks[i].schedulings;
		 /*printf("Stride: %d %d \n", tasks[i].stride, current_pass);*/
		 
	
		 
		
		 if (global_tickets - tasks[i].tickets <=0){
			/* printf ("Not enough tickets \n");*/
		 break;
	 }
	 
	 
	 
			if (tasks[i].stride > current_pass || tasks[i].finish_time != 0)
			{
				tasks[i].tickets = 0;
		     
		     tasks[i].upperbound = 0;
			 global_tickets-= tasks[i].tickets;
			 tasks[i].lowerbound= 0;
			 current_pass++;
			}
		 
		 else{
			/* printf("Total Priority : %d\n", total_priority);*/
			 tasks[i].tickets = tasks[i].priority *(10000/total_priority);
		     
		     tasks[i].upperbound = global_tickets;
			 global_tickets-= tasks[i].tickets;
			 tasks[i].lowerbound= global_tickets+1;
			/* printf(" Upper; %d Lower  %d\n", tasks[i].upperbound, tasks[i].lowerbound);*/
		 
	 }
 }
		 
		 

		
	
		srand ( time(NULL) );
		int r = rand() % (10000 - global_tickets + 2);
		r = 10000 - r; 
		
		int j;
		 for (j =0; j<num_tasks; j++)
		 
		 {
			 
			 if (tasks[j].upperbound >= r && r >= tasks[j].lowerbound)
			 
			 {
				 /*task runs*/
				
				 
				 
				 if (tasks[j].length - quantum - tasks[j].cpu_cycles<=0 )
				 
				 {
					/* printf("Running task %d:\n\n" , j);*/
					 int  p = tasks[j].length- tasks[j].cpu_cycles;
				    tasks[j].cpu_cycles += p;
				    tasks[j].schedulings +=1; 
				    current_tick += p;
				    tasks[j].finish_time = current_tick;
				   /* printf("finish time %f current tick %d  schedulings %d\n" , tasks[j].finish_time, current_tick, tasks[j].schedulings);*/
				    
				   /* printf("TASK %d FINSIHED \\n\n\n", j);*/
				   current_pass++;
				   usleep(10000);
			     }
				 
				else {
					/*printf("Running task %d:\n" , j);*/
				   tasks[j].cpu_cycles += quantum;
				   current_tick+= quantum;
				   tasks[j].schedulings += 1; 
				  /* printf("Cycles %f current tick %d  schedulings %d\n" , tasks[j].cpu_cycles, current_tick, tasks[j].schedulings);*/
				   current_pass++;
				    usleep(10000);
				   
				 }
				 
			 }
			 
			 
		 }
		 		
		
		 stride_scheduling(quantum);
		
	
	  
		 printf("STRIDE SCHEDULING appears here\n");
    exit(1);
	
}