⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fifo.cpp

📁 ssd5 fifo.h 模拟打印机全部源代码
💻 CPP
字号:
#include<iostream>
using namespace std;
#include "fifo.h"

fifo::fifo(int seconds_per_page):simulator(seconds_per_page){}

void fifo::simulate(string file){
	loadworkload(file);

	queue<event> waiting;
	queue<event> servicing;

	int time_counter = 0;  
	int service_time = workload.front().arrival_time();
    int sz = workload.size(); 
	float aggregate_latency = 0;
	int complete_jobs = 0;  
 
	 cout<<"FIFO Simulation"<<endl<<endl;

	 while(!workload.empty()){
		 for(;complete_jobs < sz; time_counter++){
			 event e;
		     while(1){
				 if(!workload.empty()){
					 e = workload.front();
					 
					 if(time_counter == e.arrival_time()){
						 waiting.push(e);      
						 cout <<"\tArriving:  " << e.getjob()
						   << " at " << time_counter <<" seconds "<<  endl;      
						 if(servicing.empty()){
						   servicing.push(e);       
						   cout <<"\tServicing:  " << servicing.front().getjob()
							<< " at " << time_counter <<" seconds "<<  endl;
						 }
						 workload.pop(); 
					 }else
						 break;
				 }else
					 break;
			 }

			 if(waiting.empty()){
				 continue;
			 }
			 
			 if(servicing.empty()){
				 waiting.pop();
				 e = waiting.front();
				 servicing.push(e);   
				 cout <<"\tServicing:  " << servicing.front().getjob()
				   << " at " << time_counter <<" seconds "<<  endl;    
				 aggregate_latency += service_time - waiting.front().arrival_time();
			 }
			 
			 if(time_counter == servicing.front().getjob().getnumpages() * seconds_per_page +
				 service_time - 1){
				 service_time = time_counter + 1; 
				 servicing.pop();
				 complete_jobs++;
			 }

		 }
	 }

	 cout<<endl<<"\tTotal jobs: " << complete_jobs <<endl;
	 cout<<"\tAggregate latency: " <<aggregate_latency <<" seconds " <<endl;
	 cout<<"\tMean latency: "<< aggregate_latency/complete_jobs <<" seconds" << endl;  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -