C++实现操作系统进程调度(时间片轮转法)

来源:互联网 发布:网络剧怎么赚钱 编辑:程序博客网 时间:2024/04/30 04:27

要求:
实现操作系统中的进程调度功能。采用时间片轮转法。

代码:

#include<iostream>#include<string>using namespace std;//设置进程的数目static int const MAXNUM=5;//设计进程类class process{public:    char processName;//进程的名称    int totalTime;//进程需要的总时间    int remainTime;//进程当下还需要的时间    char status;//进程现在的状态    //进程的构造函数    process(char ProcessName,int TotalTime,int remainTime,char status);    //进程的析构函数    ~process();};//进程构造函数的实现process::process(char ProcessName,int TotalTime,int RemainTime,char Status){    processName=ProcessName;    totalTime=TotalTime;    remainTime=RemainTime;    status=Status;}//进程析构函数的实现process::~process(){}//输出函数,它只是简单的遍历进程数组,而不做任何修改void Out(process(&processList)[MAXNUM]){    cout<<"Name\t"<<"TotalTime\t"<<"RequireTime\t"<<"Status"<<endl;    for(int i=0;i<MAXNUM;i++){        cout<<processList[i].processName<<"\t"<<processList[i].totalTime<<"\t\t"<<processList[i].remainTime<<"\t\t"<<processList[i].status<<endl;    }}//程序的关键//改变进程的当下需要时间并做判断void change(process(&processList)[MAXNUM]){    for(int i=0;i<MAXNUM;i++){        //如果进程现在的状态是完成,那么就不应该再将其还需要时间减1        if(processList[i].status!='F'){            --processList[i].remainTime;        }else{            //当其状态为完成状态,跳过这一次修改            continue;        }           //判断修改以后的进程需要时间是不是小于等于0        if(processList[i].remainTime<=0){            //是的话,将其状态改为完成            processList[i].status='F';        }else        {            //否则它现在就在执行态            processList[i].status='E';        }        //打印修改后的进程数组        Out(processList);        //对于那些获取一个时间片以后,仍旧没有完成的进程,应该讲其状态重新换为就绪        if(processList[i].status!='F'){            processList[i].status='W';        }    }   }int main(){    //sum 记录需要使用多少次change()    int sum=0;    //初始化进程数组    process processList[]={process('A',3,3,'W'),process('B',4,4,'W'),process('C',2,2,'W'),process('D',1,1,'W'),process('E',5,5,'W')};    cout<<"时间片大小为1,状态位中:W代表就绪(wait),E代表正在执行(execute),F代表已经完成(finish)"<<endl;    //打印最初的进程状态    Out(processList);    //计算总共需要调用函数的次数    for(int i=0;i<MAXNUM;i++){        sum+=processList[i].totalTime;    }    //调用函数    for(int i=0;i<sum;i++){        change(processList);    }    return 0;}

运行结果:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

反思:
在写代码之前一定要想清楚问题是什么,这样可以走很少的弯路。本次的代码没有考虑到心性能因素,毕竟是小代码。大家要好好写代码呀!

0 0
原创粉丝点击