📄 program.h
字号:
#include "define.h"
void Init() //初始化所有变量
{
int i;
L=1;
W=(work *)calloc(LEN,sizeof(work));
F=(Free *)calloc(LEN,sizeof(Free));
for(i=0;i<MEMORY;i++)
{
M.m[i]=FREE; //内存空间置空
}
for(i=0;i<LEN;i++)
{
F[i].begin=0;
F[i].length=0;
F[i].flag=NO; //空闲表标志为空表目
}
}
void Creatwork() //创建作业表
{
int i,j,n;
i=0;
j=0;
printf("请输入当前作业数目:\n");
scanf("%d",&n);
N=n;
for(i=0;i<N;i++)
{
printf("请输入作业名:\n");
scanf("%s",W[i].name);
printf("请输入作业长度:\n");
scanf("%d",&W[i].length);
W[i].state=DEF;
}
i=0;
while(j<N)
{
if(M.m[i]==USE)
{
i++;
continue;
}
else
{
if(W[j].length>MEMORY-i) //作业长度超出范围
{
printf("作业%s对内存需求过大,无法满足!\n",W[j].name);
W[j].state=DEF; //作业标记为分配失败
j++;
continue;
}
else
{
W[j].begin=i;
W[j].state=YES;
M.m[i]=USE;
M.leng[i]=W[j].length;
printf("作业 %s 开始工作。\n",W[j].name);
i=i+W[j].length;
M.m[i-1]=USE;
M.leng[i-1]=W[j].length;
j++;
continue;
}
}
}
M.m[i]=FREE;
M.leng[i]=MEMORY-i;
UpdataFree(i,M.leng[i]);
}
void UpdataFree(int begin,int len) //更新空闲表
{
int i;
for(i=0;i<L;i++)
{
if(F[i].flag==NO)
{
F[i].begin=begin;
F[i].length=len;
F[i].flag=YES;
break;
}
if((F[i].begin+F[i].length==begin&&begin+len==F[i+1].begin)||//上下临界
(F[i+1].begin+F[i+1].length==begin&&begin+len==F[i].begin))
{
if(F[i+1].begin>F[i].begin)
{
F[i].length=F[i].length+len+F[i+1].length;
F[i+1].flag=NO;
}
else
{
F[i+1].flag=YES;
F[i+1].length=F[i].length+len+F[i+1].length;
F[i].flag=NO;
F[i].begin=0;
F[i].length=0;
}
break;
}
else
{
if(begin+len==F[i].begin) //上临
{
F[i].begin=begin;
F[i].length=len+F[i].length;
F[i].flag=YES;
break;
}
else
{
if(F[i].begin+F[i].length==begin)//下临
{
F[i].length=len+F[i].length;
F[i].flag=YES;
break;
}
else
continue;
}
}
}
if(i==L)
{
L++;
F[i].begin=begin;
F[i].length=len;
F[i].flag=YES;
}
}
void PrintMemory() //内存情况
{
int i,k;
int f;
printf("内存中作业状态:\n");
printf("起址\t长度\t状态\n");
for(i=0;i<MEMORY;i++)
{
k=i;
f=0; //标志内存中某段空间首地址
while(M.m[i]==FREE&&i<MEMORY)
{
f++; //是否为空闲区
i++;
}
if(i==MEMORY)
f--;
if(k!=i+f)
{
printf("%d\t%d\t空闲\n",k,f+1);
}
else
if(i<MEMORY)
{
printf("%d\t%d\t已分配\n",i,M.leng[i]);
i=i+M.leng[i]-1;
}
}
}
void Working() //作业工作
{
int i,j,n;
while(1)
{
srand(time(NULL));
n=rand()%N;
if(W[n].state==YES)
{
printf("作业 %s 正在工作!\n",W[n].name);
M.m[W[n].begin]=FREE;
W[n].state=NO;
if(M.m[W[n].begin+W[n].length]==FREE)
{
M.leng[W[n].begin]=M.leng[W[n].begin]+M.leng[W[n].begin+W[n].length];
}
else
{
M.leng[W[n].begin]=W[n].length;
}
printf("作业 %s 已工作完成!\n",W[n].name);
break;
}
else
{
continue;
}
}
UpdataFree(W[n].begin,W[n].length);
}
void append() //添加新作业
{
int i,j;
i=N;
N++;
printf("请输入新作业名:\n");
scanf("%s",W[i].name);
printf("请输入新作业的长度:\n");
scanf("%d",&W[i].length);
for(j=0;j<LEN;j++)
{
if(W[i].length>F[j].length||F[j].flag==NO)
{
continue;
}
else
{
printf("作业%s开始工作!\n",W[i].name);
W[i].state=YES;
W[i].begin=F[j].begin;
M.m[F[j].begin]=USE;
F[j].flag=NO;
if(F[j].length-W[i].length>=MAX)
{
M.leng[F[j].begin]=W[i].length;
M.m[F[j].begin+W[i].length]=FREE;
M.leng[F[j].begin+W[i].length]=F[j].length-W[i].length;
UpdataFree(F[j].begin+W[i].length,M.leng[F[j].begin+W[i].length]);
break;
}
else
{
M.m[F[j].begin]=M.leng[j];
break;
}
}
}
if(j>=LEN)
{
printf("内存不足,无法进行新作业%s\n",W[i].name);
W[i].state=DEF;
}
}
void PrintWork() //输出所有作业状态
{
int i;
printf("作业名\t作业状态\n");
for(i=0;i<N;i++)
{
if(W[i].state==YES)
{
printf("%s\t正在工作\n",W[i].name);
continue;
}
if(W[i].state==NO)
{
printf("%s\t已结束\n",W[i].name);
continue;
}
if(W[i].state==DEF)
{
printf("%s\t未分配\n",W[i].name);
continue;
}
}
}
void PrintFree() //输出空闲表
{
int i;
printf("起始地址\t长度\t状态\n");
for(i=0;i<LEN;i++)
{
if(F[i].flag==YES)
{
printf("%d\t\t%d\t未分配\n",F[i].begin,F[i].length);
}
if(F[i].flag==NO)
{
printf(" \t \t空表目\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -