예제 #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 priority_scheduling()
{

    int current_task = 0;
    int current_tick = 0;
	int highest_priority = 0;
	int lowest_time = 999;
	int i;
	
	
	for (i=0;i<num_tasks;i++){
		
		if (tasks[i].priority > highest_priority&&tasks[i].finish_time == 0){
			
			highest_priority = tasks[i].priority;
		}
		
	}
	for (i=0;i<num_tasks;i++){
		
		if(tasks[i].priority == highest_priority&&tasks[i].finish_time == 0){
			
			if (tasks[i].arrival_time <= lowest_time&&tasks[i].finish_time == 0){
				
					lowest_time = tasks[i].arrival_time;
			
		}
		}
		}
		
		
	
		
		for (i=0;i<num_tasks;i++){
			
			if(tasks[i].priority == highest_priority && lowest_time == tasks[i].arrival_time &&tasks[i].finish_time == 0){
				tasks[i].schedulings +=1;
				
				
				for(;;){
				current_tick +=1;
				tasks[i].cpu_cycles +=1;
				
			
				
					if (tasks[i].cpu_cycles >= tasks[i].length) {
            float quantum_fragment = tasks[i].cpu_cycles -
                tasks[current_task].length;
            tasks[i].cpu_cycles = tasks[i].length;
            tasks[i].finish_time = current_tick - quantum_fragment;
            tasks[i].schedulings = 1;
            i++;
            if (i > num_tasks) {
				
                break;
            }
            tasks[i].cpu_cycles += quantum_fragment;
            count++;
            if (count==num_tasks)
            {
				compute_and_print_stats();
				exit(0);
				
			}
            priority_scheduling();
        }
				
				
				}
				
			}
			
		}

}