Update lab3/scheduler.cpp
This commit is contained in:
		
							parent
							
								
									485d24557f
								
							
						
					
					
						commit
						805d1bb949
					
				|  | @ -9,14 +9,87 @@ | |||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| void fifo() { | ||||
| 	cout << "fifo" << endl; | ||||
| } | ||||
| 
 | ||||
| struct process_detail { | ||||
| 	vector<int> burst_times; | ||||
| 	//cpu_burst_times[0] is arrival time
 | ||||
| 	int pid; | ||||
| 	vector<int> cpu_burst_times; | ||||
| 	vector<int> io_burst_times; | ||||
| 	int in_cpu; | ||||
| 	int ptr = 0; | ||||
| }; | ||||
| 
 | ||||
| struct clock{ | ||||
| 	int push_signal; //boolean
 | ||||
| 	int timer; | ||||
| 	 | ||||
| }; | ||||
| 
 | ||||
| //// operator overloading
 | ||||
| //struct CompareHeight {
 | ||||
| //    bool operator()(struct process_detail p1, struct process_detail p2)
 | ||||
| //    {
 | ||||
| //        // return "true" if "p1" is ordered
 | ||||
| //        // before "p2", for example:
 | ||||
| //        return p1.height < p2.height;
 | ||||
| //    }
 | ||||
| //};
 | ||||
| 
 | ||||
| 
 | ||||
| vector<struct process_detail> processes; | ||||
| vector<struct process_detail> ready_queue; | ||||
| queue<struct process_detail> ready_queue_fifo; | ||||
| vector<struct process_detail> waiting; | ||||
| struct process_detail* CPU = NULL; | ||||
| int clock = 0; | ||||
| 
 | ||||
| void fifo() { | ||||
| 	 | ||||
| 	//clock initialized to 0
 | ||||
| 	struct clock time; | ||||
| 	memset(&time, 0, sizeof(struct clock)); | ||||
| 	int process_count = processes.size(); | ||||
| 	 | ||||
| 	//ready queue initialized as process 1 will arrive at time 0
 | ||||
| 	ready_queue_fifo.push(processes[0]); | ||||
| 	processes[0].i++; | ||||
| 	 | ||||
| 	while(true){ | ||||
| 		 | ||||
| 		//managing arrival times
 | ||||
| 		for(int i = 0; i < process_count; ++i) { | ||||
| 			//if process not in cpu
 | ||||
| 			if(proccesses[i].in_cpu != 1) { | ||||
| 				if(time.timer == processes[i].cpu_birst_times[0]) { | ||||
| 					ready_queue_fifo.push(processes[ptr]); | ||||
| 					processes[i].i++; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		//THE FIFO RULE
 | ||||
| 		if(CPU == NULL) { | ||||
| 			CPU = ready_queue_fifo.front(); | ||||
| 			CPU->in_cpu = 1; | ||||
| 			ready_queue_fifo.pop(); | ||||
| 		} | ||||
| 		else{ | ||||
| 			//check cpu_burst complete
 | ||||
| 			for(int i = 0; i < process_count; ++i) { | ||||
| 				if(proccesses[i].in_cpu == 1) { | ||||
| 					if(timer.push_signal + CPU->cpu_birst_times[1] == time.timer){ | ||||
| 						waiting.push_back(CPU); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		time.timer++; | ||||
| 		 | ||||
| 	} | ||||
| 	 | ||||
| 	cout << "fifo" << endl; | ||||
| 	return; | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char **argv) { | ||||
| 
 | ||||
|     if(argc != 3) | ||||
|  | @ -30,10 +103,9 @@ int main(int argc, char **argv) { | |||
|     char *file_to_search_in = argv[1]; | ||||
| 	char *scheduler_algorithm = argv[2]; | ||||
| 
 | ||||
|     vector<struct process_detail> processes_detail; | ||||
|     ifstream file(file_to_search_in, ios::binary); | ||||
|     string buffer; | ||||
| 
 | ||||
|     int pid = 1; | ||||
| 
 | ||||
|     while(getline(file, buffer)) { | ||||
| 		if(buffer[0] == '<'){ | ||||
|  | @ -45,10 +117,20 @@ int main(int argc, char **argv) { | |||
| 		memset(&pd,0,sizeof(struct process_detail)); | ||||
| 
 | ||||
| 		while(iss>>word){ | ||||
| 			pd.burst_times.push_back(stoi(word)); | ||||
| 			cout << stoi(word) << endl; | ||||
| 			if(i == 0){ | ||||
| 				pd.cpu_burst_times.push_back(stoi(word)); | ||||
| 			} | ||||
| 			else if(i % 2 == 0){ | ||||
| 				pd.io_burst_times.push_back(stoi(word)); | ||||
| 			} | ||||
| 			else if(i % 2 == 1){ | ||||
| 				pd.cpu_burst_times.push_back(stoi(word)); | ||||
| 			} | ||||
| 			i++; | ||||
| //			cout << stoi(word) << endl;
 | ||||
| 		} | ||||
| 		processes_detail.push_back(pd); | ||||
| 		pd.pid = pid; | ||||
| 		processes.push_back(pd); | ||||
|     } | ||||
| 
 | ||||
| 	map<string, int> temp; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue