-
模拟实现进程管理
资源介绍
#include
#include "dos.h"
#include "stdlib.h"
#include "conio.h"
//PCB结构体
struct pcb{
int id; //进程序号
int ra; //所需资源A的数量
int rb; //所需资源B的数量
int rc; //所需资源C的数量
int ntime; //所需的时间片个数
int rtime; //已经运行的时间片个数
char state; //进程状态
struct pcb *next;
} *hready=NULL,*hblock=NULL,*p; //hready,hblock分别为指向就绪和阻塞队列
typedef struct pcb PCB;
int m,n,r,a,b,c,h=0,i=1,time1Inteval; //m为要模拟的进程个数,n为初始化进程个数
//r为可随机产生的进程数(r=m-n)
//a,b,c分别为A,B,C三类资源的总量
//i为进城计数,i=1…n
//h为运行的时间片次数,time1Inteval为时间片大小(毫秒)
//建立一个PCB结构体型的空链表
PCB *increat(void)
{ PCB *head=NULL;
//head=NULL;
return(head);
}
//从链表起始地址开始输出该链表的内容
void disp(PCB *head)
{PCB *p1;
p1=head;
AnsiString str2;
if(head!=NULL) //链表非空
{
do
{
str2+=" ";
str2+=IntToStr(p1->id);str2+=" ";
str2+=(p1->state);str2+=" ";
str2+=IntToStr(p1->ra);str2+=" ";
str2+=IntToStr(p1->rb);str2+=" ";
str2+=IntToStr(p1->rc);str2+=" ";
str2+=IntToStr(p1->ntime);str2+=" ";
str2+=IntToStr(p1->rtime);str2+="\r\n";
p1=p1->next;
}while(p1!=NULL); //不断输出进程的信息,直到链尾!
} //if
else
{ str2+="\t\t该 队 列 中 没 有 进 程!\r\n" ;}
Form1->Memo1->Lines->Add(str2);
}
//将进程插入到链尾(包括就绪队列和阻塞队列)
PCB *insert(PCB *head,PCB*pcb) //带两个指针形参:队列指针和当前进程PCB
{
PCB *pi,*p1;
p1=head;
pi=pcb;
if (head==NULL)
{
head=pi;
pi->next=NULL;
}
else
{
while(p1->next!=NULL)
{p1=p1->next;}
p1->next=pi;
pi->next=NULL;
}
return(head);
}
//对进程进行初始化,建立就绪队阻塞队列。
void input()
{
AnsiString str1;
m=StrToInt (Form1->Edit1->Text); //读取要模拟的进程总数给m
n=StrToInt (Form1->Edit2->Text); //读取需初