进程调度模拟
来源:互联网 发布:淘宝网金丝绒 编辑:程序博客网 时间:2024/06/03 21:09
实验平台:windows 7,vs2010
实验目标:模拟短作业优先算法,时间片轮转算法,和优先数算法,并动态画出Grant图,计算每个进程的响应时间和周转时间
数据结构:
class process{vector<string>process_name;vector<int>arrive_time;vector<int>run_time;vector<int>priority;vector<string>result_name;vector<int>result_time;public:process(void);process(string file){ifstream fin(file);while(!fin.eof()){string name;int arrive_time;int run_time;int priority;fin>>name>>arrive_time>>run_time>>priority;this->process_name.push_back(name);this->arrive_time.push_back(arrive_time);this->run_time.push_back(run_time);this->priority.push_back(priority);}fin.close();}void SJF(void); void Preemptive_SJF();int get_minremaintime(int time_bar,vector<int>remain_time);int get_minruntime(int time_bar); void RR(int time_piece); void PR(void); int get_topprocess(); vector<int> get_response_time(); vector<int> get_cycle_time(); void display(); ~process(void);};
1)最短作业优先算法
非抢占式代码:
int process::get_minruntime(int time_bar){int state=1;int min_runtime = 999;bool flag;for (int i = 1; i < process_name.size(); i++){flag = false;flag=time_bar<arrive_time.at(i); //加入time_bar判断是否在当前时间之前到达for (int j = 1; j < result_name.size(); j++){if (process_name.at(i) == result_name.at(j)){flag = true;break;}}if (!flag){if (run_time.at(i) < min_runtime){state = i;min_runtime = run_time.at(i);}}}return state;}//==========================//最短作业优先调度,默认按照到达时间排序//作者:林欣 20151025//在第一个到达的进程执行后,不断寻找时间最短的进程//==========================void process::SJF(){int state;int time_bar=0;result_name.push_back(process_name.at(0));result_time.push_back(run_time.at(0));for (int i = 1; i < process_name.size(); i++){state = this->get_minruntime(time_bar);result_name.push_back(process_name.at(state));result_time.push_back(run_time.at(state));time_bar+=run_time.at(state);}}
抢占式代码:
//========================//抢占式最短优先//作者:林欣 20151026//========================int process::get_minremaintime(int time_bar,vector<int>remain_time){int state=0;int min_remaintime = 999;bool flag;for (int i = 0; i < process_name.size(); i++){flag = false;flag=(time_bar<arrive_time.at(i)); //加入time_bar判断是否在当前时间之前到达if (!flag){if (remain_time.at(i) <= min_remaintime&&remain_time.at(i)>0){state = i;min_remaintime = remain_time.at(i);}}}return state;}void process::Preemptive_SJF(){vector<int>remain_time(run_time);int state=0;int state_t=-1;int time_bar=0;bool flag=true;do{state=get_minremaintime(time_bar,remain_time);if(state_t!=state){result_name.push_back(process_name.at(state));result_time.push_back(1);remain_time.at(state)--;time_bar++;}else{time_bar++;result_time.at(result_time.size()-1)++;remain_time.at(state)--;}state_t=state;flag=false;for(int i=0;i<process_name.size();i++){flag=flag||remain_time.at(i)!=0;if(flag)break;}}while(flag);}
2)时间片轮转算法
/========================//时间片轮转调度//作者:林欣 20151025//到达时间在当前时间之前且还没有执行完的,按时间片加入结果//========================void process::RR(int time_piece){int round = 0;int time_bar = 0;bool flag = false;int total_time = 0;for (int i = 0; i < process_name.size(); i++){total_time += run_time.at(i);}//cout << total_time;do{for (int i = 0; i < process_name.size(); i++){if (arrive_time.at(i) <= time_bar&&run_time.at(i)>round*time_piece)//到达时间在当前时间之前且还没有执行完的{int time_left = run_time.at(i) - round*time_piece;if (time_left >= time_piece){result_name.push_back(process_name.at(i));result_time.push_back(time_piece);time_bar += time_piece;}else{result_name.push_back(process_name.at(i));result_time.push_back(time_left);time_bar += time_left;}}}round++;if (time_bar == total_time)flag = true;} while (!flag);}
3)优先数算法:
//===================//优先级优先调度算法//作者:林欣 20151025//类似最短时间优先调度//======================int process::get_topprocess(){int state = 0;int topprocess = 999;bool flag;for (int i = 0; i < process_name.size(); i++){flag = false;for (int j = 1; j < result_name.size(); j++){if (process_name.at(i) == result_name.at(j)){flag = true;break;}}if (!flag){if (priority.at(i)<topprocess){state = i;topprocess = priority.at(i);}}}return state;}void process::PR(){int state;result_name.push_back(process_name.at(0));result_time.push_back(run_time.at(0));for (int i = 1; i < process_name.size(); i++){state = this->get_topprocess();result_name.push_back(process_name.at(state));result_time.push_back(run_time.at(state));}}
4)计算响应时间:
//=========================//计算响应时间//作者:林欣 20151025//需紧跟调度函数后执行,与调度顺序结果对应//=========================vector<int> process::get_response_time(){vector<int>resposetime_t;vector<int>resposetime;resposetime_t.push_back(0);int time = 0;for (int i = 1; i < process_name.size(); i++){time += result_time.at(i - 1);resposetime_t.push_back(time);}for (int i = 0; i < process_name.size(); i++){for (int j = 0; j < resposetime_t.size(); j++){if (process_name.at(i) == result_name.at(j)){resposetime.push_back(resposetime_t.at(j));break;}}}return resposetime;}
5)计算周转时间
//===============================//周转时间//作者:林欣 20151025//==========================vector<int> process::get_cycle_time(){int time;int time_bar;vector<int>cycle_time;vector<int>response_time(get_response_time());for (int i = 0; i < process_name.size(); i++){time = 0;time_bar = 0;for (int j = 0; j < result_name.size(); j++){if (result_name.at(j) == process_name.at(i))time += result_time.at(j);time_bar += result_time.at(j);if (time == run_time.at(i))break;}cycle_time.push_back(time_bar-response_time.at(i));}return cycle_time;}
6)显示
void process::display(){for(int i=0;i<result_name.size();i++){cout.width(result_time.at(i)*2+1);cout.setf(ios::left);cout<<result_name.at(i);}cout<<endl;for(int i=0;i<result_name.size();i++){cout.width(result_time.at(i)*2+1);cout.setf(ios::left);cout<<result_time.at(i);}cout<<endl;for(int i=0;i<result_name.size();i++) {for(int j=0;j<result_time.at(i)*2;j++){cout<<'*';}cout<<" ";}vector<int>cycle_time(this->get_cycle_time());vector<int>response_time(this->get_response_time());cout<<"\nname:"<<" response_time"<<" cycle_time"<<endl;for(int i=0;i<process_name.size();i++){cout<<" "<<process_name.at(i)<<" "<<response_time.at(i)<<" "<<cycle_time.at(i)<<endl;}}
0 0
- 进程调度模拟程序
- 进程调度模拟
- 模拟进程调度
- 进程调度模拟
- 进程调度模拟算法
- 模拟设计进程调度
- 进程调度模拟
- 模拟进程调度
- 模拟进程调度
- 模拟进程调度
- 模拟进程调度算法
- 进程调度模拟
- 处理机进程调度模拟
- C 模拟进程调度
- 进程调度模拟算法
- 进程调度模拟
- 【进程调度】模拟进程调度的过程
- 操作系统进程调度模拟程序
- 配置Eclipse用于Android开发
- SSL自签署证书生成脚本
- Android上ROS开发介绍与安装简介
- mysql show status 解释
- swift 对象方法
- 进程调度模拟
- 第三章:接口和API设计
- sql: group by 和 limit的使用
- Android:LayoutInflater 如何使用
- J2EE spring日志
- 写一个ajax例子的小问题
- Sublime Text 3 常用插件以及安装方法(转)
- usaco.section1.2.Dual Palindromes
- 《How Tomcat Works》学习笔记(一)