资源简介

内容描述: (1)设计进程控制块PCB表结构,分别适用于优先权调度算法和时间片轮转调度算法。 PCB结构中一般包括以下信息:进程名、进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。可以根据调度算法的不同,对PCB结构作适当的增删。 (2)建立进程就绪队列。对两种不同算法编制入链子程序。 (3)编制两种进程调度算法:允许用户在程序运行时选择使用某一种调度算法。 a)抢占式动态优先权调度算法; b)时间片轮转调度算法。 通过VC++6.0实现!

资源截图

代码片段和文件信息

#include  
#include  
#include 
#include  
#include 
#include   //控制字符长度头文件
using namespace std;

#define TXIANGYING 5 //响应时间为5s
#define minprio 20   //优先权高低控制标准
#define ADDPRIO 1    //定义优先权增加幅度
#define UPDATETIME 2 //定义优先权增加间隔


typedef struct node 

  char name[20];      //进程名字
  int prio;           //进程的优先级 
  int round;          //分配CPU的时间片 
  int needtime;       //进程执行所需要的时间 
  char state[8];         //进程的状态,Wait——就绪态,Run——执行态,Finish——完成态 
  int count;          //记录执行的次数
  int arrive;          //到达时间
  int zhouzhuan ;      //周转时间
  double ave_daiquan ;  //带权周转时间
  int fuwu_time;        //服务时间 
  struct node *next;   //链表指针

}PCB; 
                      
   
int GetFirst(int sumtime);            //从就绪队列取得第一个节点 
void Output1();                       //输出时间片轮转队列信息
void Output2(int sumtime);            //输出优先权调度队列信息 
void InsertPrio(PCB *in);             //创建优先级队列,规定优先数越小,优先级越高 
void InsertRound(PCB *in);            //创建时间片就绪队列 
void InsertFinish(PCB *in);           //创建完成队列
void PrioCreate();                    //优先级输入函数 
void TimeCreate();                    //时间片轮转调度算法——输入函数 
void Priority();                      //按照优先级调度 
void RoundRun();                      //时间片轮转调度 
void update_priority(int &add_priority);      //等待队列的优先权更新

PCB *ready=NULL*run=NULL*finish=NULL;//定义3个队列,就绪队列,执行队列和完成队列 

int main() 

char choose;
FILE *fp;
cout<<“*****************欢迎进入进程管理和调度的算法模拟*****************\n“< cout<<“*****************************主菜单*****************************“< cout<<“输入进程的调度方法(请输入对应数字):“< cout<<“1.抢占式动态优先权调度(手工输入)“< cout<<“2.时间片轮转调度(手工输入)“< cout<<“3.抢占式动态优先权调度(从文件读入已设定的的数据)“< cout<<“4.时间片轮转调度(从文件读入已设定的的数据)“< cout<<“5.退出程序“< cin>>choose; 

switch(choose) 

case ‘1‘:  
PrioCreate(); 
Priority();
Output1();    
break; 
case ‘2‘: 
TimeCreate(); 
RoundRun();
Output1(); 
break; 
case ‘3‘:
fp=freopen(“yxj.txt““r“stdin);//优先级输入文件
PrioCreate(); 
Priority();
Output1(); 
fclose(fp);
break;
case ‘4‘:
fp=freopen(“sjp.txt““r“stdin);//时间片输入文件
TimeCreate(); 
RoundRun();
Output1();
fclose(fp);
break;
case ‘5‘:exit(1);
default:break; 
}


return 0; 


/*
void GetFirst()  //取得就绪队列第一个节点

  run = ready; 
   
  if(ready!=NULL) 
  { 
    strcpy(run ->state“Run“); 
    ready = ready ->next; 
    run ->next = NULL; 
  } 

*/
int GetFirst(int sumtime)  //取得就绪队列第一个节点
{
PCB *fst*temp1*temp2*temp3;

if(ready!=NULL && sumtimearrive)//ready队列改变
{
fst=ready;
while(sumtimearrive)//寻找到达时间最小的
{
temp1=fst;//记录符合条件的前面一个值
fst=fst->next;   
if(fst==NULL)
{
sumtime++;
Output2(sumtime);
fst=ready;
if (sumtime>=fst->arrive)//搜索一轮之后,设置CPU时间+1,即全部进程都等待
{
run=ready;
if(ready!=NULL) 

strcpy(run ->stat

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3401  2010-04-18 00:44  diaodu.dsp

     文件        537  2010-04-18 00:44  diaodu.dsw

     文件      41984  2010-04-25 00:36  diaodu.ncb

     文件      53760  2010-04-25 00:36  diaodu.opt

     文件       1162  2010-04-18 00:44  diaodu.plg

     文件         40  2010-04-18 00:44  sjp.txt

     文件         39  2010-04-18 00:44  sjp1.txt

     文件         52  2010-04-18 00:44  yxj.txt

     文件         53  2010-04-18 00:44  yxj1.txt

     文件         55  2010-04-18 00:44  yxj2.txt

     文件     548962  2010-04-18 00:44  Debug\diaodu.exe

     文件     285808  2010-04-18 00:44  Debug\diaodu.obj

     文件    1123328  2010-04-18 00:44  Debug\diaodu.pdb

     文件     126976  2010-04-18 00:44  Debug\vc60.pdb

     文件      11485  2010-04-18 00:44  diaodu.cpp

     目录          0  2010-04-18 00:44  Debug

----------- ---------  ---------- -----  ----

              2197642                    16


评论

共有 条评论