# 模拟操作系统优先级调度进程

//////////////////////////////////////////////////////////////////////////
//Run.h

#ifndef C_H_H
#define C_H_H
#include <conio.h>
#include <iostream>
#include <windows.h>
#include "PCB.h"

#endif

int FindMax(PCB*pcb);

bool Decide (PCB*pcb);

PCB* Input();

void Deal(PCB*);

bool m_IsNum(char );

bool m_IsNum(char *  );

int GetPcbNum(PCB * pcb);

void show(PCB * pcb);

void showRunning(PCB*pcb,int );


////Run.cpp

#include "Run.h"

int FindMax(PCB*pcb)//找最大的优先级。
{

int num=pcb->CountPcb;
int max=0;
for(int i=0;i<num;i++){
if(pcb[i].priority>=max)
if(pcb[i].time>0 ){
max=pcb[i].priority;		//优先级最大而且还没有运行完毕，就将其优先级赋给max.
}
}
for(int j=0;j<num;j++){
if(max==pcb[j].priority){
if(pcb[j].time>0){
return j;				//优先级最大而且没有运行完毕，就返回下标。
}
}
}
return 0;

}

bool Decide (PCB *pcb)
{
int s=0;
for(int i=0;i<pcb->CountPcb;i++){
s+=pcb[i].time;
}
if(s==0)return false;
else
return true;  //没有运行完。
}

bool m_IsNum(char c)//输入合法性。
{
return ( c<= '9' && c>='0');
return false;
}

bool m_IsNum(char *  lpc)//重载函数，输入合法性。
{
int i=0;
while (lpc[i]!=0)
{
if (lpc[i]>'9' || lpc[i] <'0') return false;
i++;
}
return true;

}

int GetPcbNum(PCB * pcb)
{
return pcb->CountPcb;
}

void show(PCB * pcb)
{
int totaltime=0;
for (int ii=0;ii<pcb->CountPcb;ii++)
{
totaltime+=pcb[ii].time;
}
system("cls");
int num=pcb->CountPcb;

cout<<"	"<<"PCBname		"<<"Priority	"<<"Time		"<<"State"<<endl;
cout<<"																			 "<<totaltime<<endl;
for(int i=0;i<num;i++)
{
cout<<""<<endl;
cout<<"	"<<pcb[i].name<<"		"<<pcb[i].priority<<"		"<<pcb[i].time<<"		"<<pcb[i].state<<endl;
cout<<""<<endl;
}

}

void showRunning(PCB * pcb,int maxmark)
{
int totaltime=0;
for (int ii=0;ii<pcb->CountPcb;ii++)
{
totaltime+=pcb[ii].time;
}
system("cls");
int num=pcb->CountPcb;
cout<<"	"<<"PCBname		"<<"Priority	"<<"Time		"<<"State"<<endl;
cout<<"																			 "<<totaltime<<endl;
for(int i=0;i<num;i++)
{
if(i==maxmark)
{
cout<<""<<endl;
cout<<"	"<<pcb[i].name<<"		"<<pcb[i].priority<<"		"<<pcb[i].time<<"		"<<pcb[i].state<<"     √"<<endl;
cout<<""<<endl;
}
else
{
cout<<""<<endl;
cout<<"	"<<pcb[i].name<<"		"<<pcb[i].priority<<"		"<<pcb[i].time<<"		"<<pcb[i].state<<endl;
cout<<""<<endl;
}
}
}

PCB* Input()
{
char*  temp="INput";
int num;
system("cls");
cout<<endl<<"			=====>>>>>>>>>INPUT<<<<<<<<<=====			"<<endl<<endl;
while(!m_IsNum(temp))//直到输入的为数字。
{
cout<<endl<<"		Input The number of PCB you want to get in:  ";
cin>>temp;
}
num =atoi(temp);
int count=0;
char * numtemp="cc";
char * tiemtemp="dd";
while(count<num)
{

cout<<""<<endl;
cout<<endl<<"	The PCB "<<++count<<endl;
--count;
cout<<endl<<"	PCBname:            ";
while (!m_IsNum(numtemp))
{
cout<<endl<<"	Priority:           ";
cin>>numtemp;
}
while (!m_IsNum(tiemtemp))
{
cout<<endl<<"	Time                ";
cin>>tiemtemp;
}

count++;
numtemp=new char[];
tiemtemp=new char[];
}
}

void Deal(PCB* pcb)//PCB一次运行的处理。
{
Sleep(2000);
for (int i=0;i<pcb->CountPcb;i++)
{
if (pcb[i].time==0)
{
pcb[i].state="Done";
}
else
pcb[i].state="Enable";//都置为Enable;
}

int maxmark=FindMax(pcb);
if (pcb[maxmark].time>0)
{
pcb[maxmark].state="Running";

if (pcb[maxmark].priority>0)
{
pcb[maxmark].priority--;
}

pcb[maxmark].time--;
showRunning(pcb,maxmark);
}

if(pcb[maxmark].time==0)
{
pcb[maxmark].state="Done";

pcb[maxmark].priority=0;//如果一个进程运行完毕，其优先级就置为0；
show(pcb);

}

}


// PCB.h: interface for the PCB class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PCB_H__D437D36E_79E5_40FA_B1C3_5903CA35AA07__INCLUDED_)
#define AFX_PCB_H__D437D36E_79E5_40FA_B1C3_5903CA35AA07__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <string>
using namespace std;
class PCB
{

public:
int priority;
int time;
string name;
string state;
int CountPcb;

public:
PCB();
virtual ~PCB();

};

#endif // !defined(AFX_PCB_H__D437D36E_79E5_40FA_B1C3_5903CA35AA07__INCLUDED_)


//Deal.cpp

#include <iostream>
#include <cstring>
#include <conio.h>
#ifndef C_H_H
#define C_H_H
#include "PCB.H"
#include "Run.h"
#endif

int main()
{
while(1)
{
{
}
cout<<endl<<endl<<"	按任意键开始_/"<<endl;
getch();

}
return 0;
}



#### Nachos操作系统课设 浅谈优先级调度

2016-12-23 23:36:17

#### 操作系统の以优先级调度算法的实现

2018-05-17 08:11:58

#### 操作系统进程优先级调度实验

2016-11-08 13:43:19

#### 【操作系统】C语言模拟操作系统优先数调度算法

2016-09-01 17:34:00

#### 操作系统进程调度，优先级反转，调度策略

2014-09-28 18:35:30

#### nachos基于优先级的线程调度实验

2013年05月28日 10KB 下载

#### C++进程优先级调度进程优先级调度进程优先级调度

2009年11月06日 36KB 下载

#### C++先来先服务法与优先级法进程调度算法模拟程序

2012年04月24日 7KB 下载

#### 操作系统大作业（优先级调度算法，内存管理，磁盘管理）

2011年11月13日 3.63MB 下载

#### Nachos操作系统：Pro1_5:实现优先级调度

2016-10-29 17:44:55