天津市建设工程网站,东莞建设网住房保障专栏,怎么做网站盈利,泉州seo不到首页不扣费#include#include#include#includeusing namespace std;unsigned int q_id0; //用于队列进程号的全局变量unsigned int l_id0; //用于链表进程号的全局变量unsigned int stime0; //系统时间#xff0c;开始为0struct Pro //调度进程的数据结构{unsigned int PID; //进程标志号…#include#include#include#includeusing namespace std;unsigned int q_id0; //用于队列进程号的全局变量unsigned int l_id0; //用于链表进程号的全局变量unsigned int stime0; //系统时间开始为0struct Pro //调度进程的数据结构{unsigned int PID; //进程标志号unsigned int starttime; // 开始执行时间unsigned int endtime; //结束时间unsigned int needtime; // 预计执行时间unsigned int runtime; //已经运行时间unsigned int count; //计数器};struct node{queue qu; //队列unsigned int priority; //队列优先级当前进程在处于哪个优先级unsigned int capacity; //时间片};class diaodu //调度类{public:diaodu(){capacity30; //初始化时间片为30}void create_q_pro(); //创建进程queue的函数void create_l_pro(); //创建进程list的函数void create_node(); //创建node队列void Fcfs(); //先来先服务调度算法void Sjf(); //短作业优先调度算法void RR(); //时间片轮转算法void Djfkdl(); //多级反馈队列算法private:queueQueue; //队列listPlist; //链表listListQ; //链表队列unsigned int capacity; //时间片};void diaodu::create_q_pro(){Pro item;item.PIDq_id;item.count0;item.needtimerand()%10010;item.runtime0;Queue.push(item);printf(创建进程 PID %d: 执行所需时间 %d\n,item.PID,item.needtime);}void diaodu::create_l_pro(){Pro item;item.PIDl_id;item.count0;item.needtimerand()%20010;item.runtime0;Plist.push_back(item);printf(创建进程 PID %d: 执行所需时间 %d\n,item.PID,item.needtime);}void diaodu::create_node(){node nod;int i;nod.priority1; //初始队列最高优先级1nod.capacity20; //初始时间片20for(i0;i10;i) //创建一个node类型并放入ListQ内{Pro item;item.PIDq_id;item.count0;item.needtimerand()%10010;item.runtime0;nod.qu.push(item);printf(创建进程 PID %d: 执行所需时间 %d\n,item.PID,item.needtime);printf(\n);}ListQ.push_back(nod);}void diaodu::Fcfs(){int i,rd;printf(-------先来先服务调度算法-------\n);for(i0;i10;i){create_q_pro();printf(\n);}while(!Queue.empty()){Pro *pQueue.front();p-starttimestime;printf(进程PID%d: 执行所需时间%d 开始执行时间%d ,p-PID,p-needtime,p-starttime);Sleep(p-needtime);p-endtimestimep-needtime;printf(结束时间%d\n,p-endtime);printf(\n);Queue.pop();stimep-endtime;rdrand()%10;if(rd6){create_q_pro();printf(\n);}}}void diaodu::Sjf(){int i,rd;printf(-------短作业优先调度算法-------\n);stime0;for(i0;i10;i){create_l_pro();printf(\n);}while(!Plist.empty()){std::list::iterator qPlist.begin();for(std::list::iterator pPlist.begin();p!Plist.end();p) //找到最短预计执行时间的进程{if(p-needtimeneedtime){qp;}}q-starttimestime;printf(进程PID%d: 执行所需时间%d 开始执行时间%d ,q-PID,q-needtime,q-starttime);Sleep(q-needtime);q-endtimestimeq-needtime;printf(结束时间%d\n,q-endtime);printf(\n);stimeq-endtime;Plist.erase(q); //擦除进程rdrand()%10;if(rd6){create_l_pro();printf(\n);}}}void diaodu::RR(){int i,rd;stime0;printf(-------时间片轮转法(时间片 %d)-------\n,capacity);for(i0;i10;i){create_q_pro();printf(\n);}while(!Queue.empty()){Pro *pQueue.front();p-starttimestime;printf(进程PID%d: 执行还需时间%d 开始执行时间%d ,p-PID,p-needtime,p-starttime);if(p-needtimecapacity){Sleep(capacity);p-needtime-capacity;p-runtimecapacity;stimecapacity;(p-count);printf(第 %d 次执行已执行时间 %d\n,p-count,p-runtime);Queue.push(Queue.front());Queue.pop();}else{Sleep(p-needtime);stimep-needtime;p-endtimestime;p-runtimep-needtime;(p-count);printf(第 %d 次执行已执行时间 %d 结束时间 %d 执行完毕\n,p-count,p-runtime,p-endtime);p-needtime0;Queue.pop();}printf(\n);rdrand()%10;if(rd6){create_q_pro();printf(\n);}}}void diaodu::Djfkdl(){int rd,flag0; //flag标志是否有新进程进入初级队列stime0;printf(-------多级反馈队列调度-------\n\n,capacity);create_node();for(list::iterator iterListQ.begin();iter!ListQ.end();){printf(队列优先级 %d 队列时间片 %d\n,iter-priority,iter-capacity);while(!iter-qu.empty()){list::iterator iter1iter;Pro *piter-qu.front();p-starttimestime;printf(进程PID%d: 执行还需时间%d 开始执行时间%d ,p-PID,p-needtime,p-starttime);if(p-needtimeiter-capacity){Sleep(iter-capacity);p-needtime-iter-capacity;p-runtimeiter-capacity;stimeiter-capacity;(p-count);printf(第 %d 次执行已执行时间 %d\n,p-count,p-runtime);if(iter1ListQ.end()) //如果没有下一队列则创建下一队列{node nod;nod.qu.push(iter-qu.front());nod.priorityiter-priority1;nod.capacityiter-capacity*2;ListQ.push_back(nod);}else //有下一队列把当前进程放到下一队列队尾{iter1-qu.push(iter-qu.front());}iter-qu.pop();}else{Sleep(p-needtime);stimep-needtime;p-endtimestime;p-runtimep-needtime;(p-count);printf(第 %d 次执行已执行时间 %d 结束时间 %d 执行完毕\n,p-count,p-runtime,p-endtime);p-needtime0;iter-qu.pop();}printf(\n);rdrand()%10;if(rd7) //有新进程进入高优先级队列{list::iterator iter2ListQ.begin();Pro item;item.PIDq_id;item.count0;item.needtimerand()%10010;item.runtime0;iter2-qu.push(item);printf(创建进程 PID %d: 执行所需时间 %d\n,item.PID,item.needtime);printf(\n);if(iter2-prioritypriority) //若当前队列优先级不是最高优先级{flag1;break;}}}if(flag1){iterListQ.begin();}else{iter;}flag0;}}int main(){diaodu schedul;schedul.Fcfs(); //先来先服务printf(\n\n\n);Sleep(1000);schedul.Sjf(); //短作业优先Sleep(1000);schedul.RR(); //时间片轮转Sleep(1000);*/schedul.Djfkdl(); //多级反馈队列return 0;}