进程调度算法模拟程序设计C++

原创 2015年07月09日 16:05:22
#include <iostream>
#include <windows.h>
using namespace std;
//#define N 3

typedef struct{
	int ID;
	int PRIORITY;
	int CPUTIME;
	int ALLTIME;
	int STARTBLOCK;
	int BLOCKTIME;
	int STATE;
	int REACH;
	int TIME;
}PROCESS;

void textColor(int color)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
int main()
{
	int i, max, time, l, ll, time1, flag = 0, total = 0, N, server[10], sum = 0;
	PROCESS pro[10];
	textColor(13);
	cout << "注意:本程序状态代表如下" << endl << "0-运行 1-阻塞 2-就绪 3-结束 4-未到达" << endl << endl;
	textColor(15);
	cout << "输入进程数:";
	cin >> N;
	cout << "输入时间片长度。";
	cin >> time;
	cout << "请输入各进程初始状态:" << endl;
	cout << "ID PRIORITY REACH ALLTIME STARTBLOCK BLOCKTIME" << endl;
	for (i = 0; i < N; i++)
	{
		pro[i].CPUTIME = 0;
		pro[i].TIME = 0;
		cin >> pro[i].ID >> pro[i].PRIORITY >> pro[i].REACH;
		cin >> pro[i].ALLTIME >> pro[i].STARTBLOCK >> pro[i].BLOCKTIME;
		server[i] = pro[i].ALLTIME;
		if (pro[i].REACH == 0)pro[i].STATE = 0;
		else pro[i].STATE = 4;
	}
	do{
		cout << endl << "当前时间为" << total;
		textColor(12);
		cout << endl << "========================各进程状态为======================" << endl;
		textColor(15);
		cout << "ID  PRIORITY  CPUTIME  ALLTIME  STARTBLOCK  BLOCKTIME  STATE" << endl;
		for (i = 0; i < N; i++)
		{
			cout << pro[i].ID << "      " << pro[i].PRIORITY << "        " << pro[i].CPUTIME << "        ";
			cout << pro[i].ALLTIME << "      " << pro[i].STARTBLOCK << "        " << pro[i].STATE << "        ";
			total += time;

		}
		for (i = 0; i < N; i++)
		{
			if (pro[i].STATE == 4 && pro[i].REACH < total)
			{
				pro[i].STATE = 1;
			}
		}
		for (i = 0; i < N; i++)
		{
			time1 = pro[i].ALLTIME;
			if (pro[i].STATE == 0)
			{
				if (pro[i].ALLTIME <= time)
				{
					//pro[i].CPUTIME+=time1;
					pro[i].ALLTIME = 0;
					pro[i].STATE = 3;
					pro[i].TIME = total - time + time1;
				}
				else{
					//pro[i].CPUTIME+=time;
					pro[i].ALLTIME = time;
					pro[i].STARTBLOCK--;
					if (pro[i].STARTBLOCK == 0)
					{
						pro[i].STATE = 1;
						pro[i].BLOCKTIME = time1;
						pro[i].STARTBLOCK = time1;
					}
					pro[i].PRIORITY = 3;
					pro[i].TIME = total;
				}
			}
			if (pro[i].STATE == 1)
			{
				pro[i].BLOCKTIME--;
				if (pro[i].BLOCKTIME == 0)pro[i].STATE = 2;
				pro[i].TIME = total;
			}
			if(pro[i].STATE == 2)
			{
				//pro[i].CPUTIME+=time;
				pro[i].PRIORITY++;
				pro[i].TIME = total;
			}
		}
		max = -100;
		ll = -1;
		l = -1;
		for (i = 0; i < N; i++)
		{
			if (pro[i].PRIORITY > max && (pro[i].STATE = 0 || pro[i].STATE == 2))
			{
				l = i;
				max = pro[i].PRIORITY;
			}
			if (pro[i].STATE == 0)ll = i;
		}
		if (l != -1 && l != ll)pro[l].STATE = 1;
		if (ll != -1)pro[ll].STATE = 2;
		flag = 0;
		if (flag ==0)
		{
			break;
		}
	}while (1);
	cout << endl << "当前时间为" << total;
	textColor(12);
	cout << endl << "========================各进程状态为======================" << endl;
	textColor(15);
	cout << "ID  PRIORITY  CPUTIME  ALLTIME  STARTBLOCK  BLOCKTIME  STATE" << endl;
	for (i = 0; i < N; i++)
	{
		cout << pro[i].ID << "      " << pro[i].PRIORITY << "        " << pro[i].CPUTIME << "        ";
		cout << pro[i].ALLTIME << "      " << pro[i].STARTBLOCK << "        " << pro[i].STATE << "        ";
		total += time;

	}
	cout << "各个进程运行结束!" << endl;
	cout << "进程号 到达时间 结束时间 周转时间 带权周转时间" << endl;
	textColor(10);
	for (i = 0; i < N;i++)
	{ 
		cout << pro[i].ID << "      " << pro[i].REACH << "        " << pro[i].TIME << "        " << pro[i].TIME - pro[i].REACH << "      " << (float)(pro[i].TIME - pro[i].REACH) / server[i] << "        ";
		sum += pro[i].TIME - pro[i].REACH;
	}
	cout << "平均周转时间为:" << (float)sum / N << endl;
	textColor(15);
	return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

操作系统-------进程调度算法(C++实现)

(1)    优先数法 进程就绪队列按优先数大小从高到低排列,链首进程首先投入运行。进程每执行一次,进程需要的时间片数减1、该进程的优先数减3。这样,该进程如果在一个时间片中没有完成,其优先数降低一级...
  • M_GSir
  • M_GSir
  • 2016年11月10日 22:45
  • 2944

用C++模拟操作系统进程调度的几种算法

***************************************     *****1.******* 先来先服务算法 ***********     *****2.********  ...
  • kai8wei
  • kai8wei
  • 2015年11月30日 23:52
  • 1950

C++实现进程调度的算法

  • 2012年12月01日 15:14
  • 153KB
  • 下载

进程调度算法的设计

#include  #include    #define MAX 5 using namespace std; enum Status{running,ready,blocked}; ...
  • h820911469
  • h820911469
  • 2012年08月04日 08:40
  • 586

五种进程调度算法的总结;

五种进程调度算法总结
  • xuzhiwangray
  • xuzhiwangray
  • 2016年01月22日 22:51
  • 5643

操作系统的常见进程调度算法

先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你...
  • leex_brave
  • leex_brave
  • 2016年06月11日 21:46
  • 8576

几种进程调度算法总结

一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法(FCFS)      先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采...
  • ttyue_123
  • ttyue_123
  • 2016年08月09日 21:43
  • 1528

(作业、进程)调度算法

(1)先来先服务调度算法(FCFS)(作业、进程调度) (2)短作业优先调度算法(SJF)(作业、进程调度) (3)时间片轮转调度算法(进程调度) (4)优先级调度算法(作业、进程调度) (5)高响应...
  • Alpaca12
  • Alpaca12
  • 2016年05月17日 14:10
  • 1850

调度算法的介绍及优缺点

调度算法是根据系统的资源分配策略所规定的资源分配算法。有的调度算法适用于作业调度,有的适用于进程调度,有的两者都适用。 先了解几个术语 到达时间、服务时间、开始时间 完成时间、等待时间 周转时间...
  • u011774517
  • u011774517
  • 2017年03月11日 16:55
  • 5020

进程调度算法例题

设有P1、P2、P3、P4共4个进程同时依次进入就绪队列中,它们需要的处理器时间和优先级别如下所示: 进程 使用处理器时间(秒) 优先数 P1           20              ...
  • hy2011034628
  • hy2011034628
  • 2013年06月29日 00:29
  • 3254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程调度算法模拟程序设计C++
举报原因:
原因补充:

(最多只允许输入30个字)