进程调度算法模拟程序设计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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

进程调度模拟程序设计-----FCFS算法简单实现

题目描述: 一.实验目的和要求 加深对进程概念和进程调度过程/算法的理解。本实验要求用高级语言编写和调试一个模拟动态优先权的进程调度算法程序。 二、实验内容 1.给出进程调度的算法描述(如基于...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

【进程调度】模拟进程调度的过程

1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 ...

Linux编程:模拟进程调度算法

稍稍有点操作系统基础的朋友应该知道进程的调度算法,在这里Koala还是给大家略微介绍一下接下来将要用到的几种算法: 先来先服务(FCFS) 采用FCFS调度,先请求CPU的进程会先分配到CPU。 ...
  • KoalaZB
  • KoalaZB
  • 2016年12月10日 23:28
  • 2156

进程调度模拟(C语言)

在CSDN里的第一篇,从之前UNIX程序设计课的学期作业里找了个当时的模拟进程调度的代码贴上。不足之处,请见谅。   #include #include using namespace std...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

进程的优先调度算法的c语言实现

在进程中实现优先级算法可以使用最小堆排列来实现。 一般在优先级调度算法中要实现的操作 1.从后备作业队列中选择一个优先级最高的作业将他们调入内存,分配必要的资源。此处的优先级越高关键字越小 2....

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程调度算法模拟程序设计C++
举报原因:
原因补充:

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