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

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

代码:

#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;
}

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

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

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值