实验一 模拟时间片轮转法
一、实验目的:
用C或C++模拟时间片轮转法
二、实验内容:
随机输入进程的个数,每个进程的名称及每个进程需要工作的时间,随机CPU时间片,通过模拟程序显示出进程占用CPU的过程。
三、示例:
A B C (进程名称)
2 3 4 (每个进程需要工作的时间)
CPU时间片设置为1
第一次轮转 A B C
1 2 3
第二次轮转 A B C
0 1 2
第三次轮转 B C
0 1
第四次轮转 C
0
通过模拟程序输出CPU对进程的处理过程为:ABCABCBCC
//模拟时间片轮转法
#include <iostream>
#include <string>
using namespace std;
typedef struct Process {
string processName; //进程名
double processTime; //进程占用时间
};
void FIFS(Process p[],int n, double cpuTime) //模拟优先调度算法
{
bool flag = true; //控制轮转
while(flag)
{
for(int i = 1; i <= n; i++) //一次进程调度
{
if(p[i].processTime > 0)
{
cout<<p[i].processName<<" ";
p[i].processTime -= cpuTime;
//cout<<p[i].processTime<<" ";
}
}
if(p[n].processTime <= 0)
{
flag = false;
}
}
}
int main()
{
int processNum; //进程数
double cpuTime; //时间片
cout << "输入进程数目pNum ( pNum > 0):"<< endl;
cin>>processNum;
Process *p = new Process[processNum+1];
cout<<"输入时间片cpTime ( cpTime > 0):"<<endl;
cin>>cpuTime;
for(int i = 1; i <= processNum; i++)
{
cout<<"输入第"<<i<<"个进程的名字和时间"<<endl;
cin>>p[i].processName;
cin>>p[i].processTime;
}
cout<<"cpu对进程的处理过程为:"<<endl;
if(processNum > 0 && cpuTime > 0)
{
FIFS(p,processNum,cpuTime);
}
delete[] p;
}