进程调度过程的模拟——时间轮转法 c++实现

模拟若干个进程的运行过程,将其存入进程文件中。如:进程1:运行5秒后有3秒的I/O操作,之后有10秒的运行,结束。可以写成:”p1:r5,io3,r3 e;” 

编程实现调度算法函数,定义时间片大小和并发进程个数,不断从进程文件中读出进程信息,模拟进程的运行及调度过程;

#include 
#include 
#include
#include
#include
#include
using namespace std;
struct process{
    char state;  // 状态:w(就绪),r(运行),f(完成),b(阻塞)
    int name;
    int runone,runio,runtow; //
    int needTime;  // 还需运行时间
    int runTime;   // 服务时间
    int endTime;   // 结束时间
}pro[1000];
char s[1000][18];
queue  wait,finish;
vector  block;
int sum=0,silce; //时间片的长度
void prin(){
        printf("******************************************************\n");
        printf("进程相关信息如下:\n");
        printf("进程名(ID) ");
        printf("到达时间  ");
        printf("还需时间  ");
        printf("运行时间  ");
        printf("运行状态  \n");
        for(int i=0;i0){
                pro[run].runone--;
                pro[run].needTime--;
                pro[run].runTime++;
            }
            for(vector::iterator iter=block.begin();iter!=block.end();++iter)
            {
                log=*iter;
                pro[log].runio--;
                pro[log].needTime--;
                if(pro[log].runio==0){ //io阻塞完成
                    pro[log].state='w';
                    wait.push(log);
                    block.erase(iter);
                    iter--;
                }
            }
            if(pro[run].runone==0&&pro[run].runio>0){ //进入io阻塞
                block.push_back(run);
                pro[run].state='b';
                ok=false;
                prin();
                break;
            }
            if(pro[run].runone==0&&pro[run].runio==0&&pro[run].runtow>0){
                pro[run].runtow--;
                pro[run].needTime--;
                pro[run].runTime++;
            }
            if(pro[run].runone==0&&pro[run].runio==0&&pro[run].runtow==0){ //完成
                finish.push(run);
                pro[run].state='f';
                pro[run].endTime=ostime;
                ok=false;
                prin();
                break;
            }

            prin();
            if(ostime

你可能感兴趣的:(操作系统)