📄 jobctl.c
字号:
#include <string.h>
#include <stdio.h>
int m,s,l,u;/*全局变量 实现函数间联系*/
struct table{
int std;
int length;
char state;
};
struct table t[6];
struct tab{
int stl;
int len;
char sta;
};
struct tab w[6];
void input()/*初始化作业表*/
{
w[0].len=14;
w[0].stl=0;
w[0].sta='w';
w[1].len=6;
w[1].stl=26;
w[1].sta='w';
w[2].sta=w[3].sta=w[4].sta=w[5].sta='e';
}
void disp()/*打印作业分区表的情况*/
{ int i=0;
printf("\n此时作业分区表的状态是:");
printf("\n|起址\t|长度\t|状态");
while(i<6)
{
printf("\n|%d\t",w[i].stl);
printf("|%d\t",w[i].len);
printf("|%c\t\n",w[i].sta);
i++;
}
}
void defiction(){
t[0].std=14;
t[0].length=12;
t[0].state='w';
t[1].std=32;
t[1].length=96;
t[1].state='w';
t[2].state=t[3].state=t[4].state=t[5].state='e';
}
void print()/*打印空闲分区表的情况*/
{ int i=0;
printf("\n此时空闲分区表的状态是:");
printf("\n|起址\t|长度\t|状态");
while(i<6)
{
printf("\n|%d\t",t[i].std);
printf("|%d\t",t[i].length);
printf("|%c\t\n",t[i].state);
i++;
}
}
void remove(int h)
{
int a=0;/*设置标志位*/
int k;
int i=0;
while(i<6)
{
if(t[i].state=='w'&&t[i].length>=l)
{
a=1;/*分配成功*/
t[i].length=t[i].length-h;
m=t[i].std;
if(t[i].length>0)
t[i].std=t[i].std+h;
else {
for(k=i;k<5;k++)/*该表项撤销,上移内存空区表*/
{ t[k].std=t[k+1].std;
t[k].length=t[k+1].length;
t[k].state=t[k+1].state;
}
t[5].state='e';
} /*else*/
break;
}/*firstif*/
else i++;
}/*while*/
if(a==1) print();
else printf("作业不能装入内存!");
}
void movein(int x,int y)/*装入空闲分区表*/
{ int r,j;
for(j=0;j<5;j++)
{
if(x<t[0].std)
{
if(t[0].std=(x+y))
{
t[0].std=x;printf("t[1].std=%d\n",t[1].std);
t[0].length+=y;
return;
}
else
{
for(j=4;j>0;j--)
{
t[j].std=t[j-1].std;
t[j].length=t[j-1].length;
t[j].state=t[j-1].state;
}
t[0].std=x;
t[0].length=y;
t[0].state='w';
}
break;
}/*空区表第一项*/
if(t[j].state=='w'&&t[j+1].state=='w')
{
if(x==t[j].std+t[j].length)/*与上相临*/
{
t[j].length+=l;
printf("%d",t[j].length);
if(t[j+1].std==(x+y))/*/上下相临,实现下移空区表*/
{
t[j].length+=t[j+1].length;
printf("%d",t[j].length);
for(r=j+2;r<6;r++)
{
t[r-1].length=t[r].length;
t[r-1].state=t[r].state;
t[r-1].std=t[r].std;
}
t[5].std='e';t[5].std=0;
printf("first t[1].length=%d\n",t[1].length);
}
return;
}
else/*确定不与上相临*/
{
if(t[j+1].std=x+y)
{
t[j+1].std=x;
t[j+1].length+=y;
}
else/*上下不相临,实现下移,倒序实现*/
{
for(r=5;r>j+1;r--)
{
t[r].state=t[r-1].state;
t[r].length=t[r-1].length;
t[r].std=t[r-1].std;
}/*for*/
t[j+1].std=x;
t[j+1].length=y;
}
break;
}
}
}
if(t[j].state=='w'&&t[j+1].state=='e')
{
if(x==t[j].std+t[j].length)
t[j].length+=y;
else
{
t[j+1].length=y;
t[j+1].std=x;
t[j+1].state='w';
printf("second t[1].length=%d\n",t[1].length);
}
printf("third t[1].length=%d\n",t[1].length);
}
}
void outm(int i)/*作业撤消,传递长度始址*/
{
int r;
if(w[i].sta=='e'||i>6)
printf("该作业不存在\n");
else
{
/*撤消作业,作业表上移*/
l=w[i].len;
s=w[i].stl;
printf("%d,%d",l,s);
r=i;
while(r<5)
{
w[r].len=w[r+1].len;
w[r].sta=w[r+1].sta;
w[r].stl=w[r+1].stl;
r++;
}
w[5].sta='e';
}
}
void inm(int x,int y)/*作业进入内存*/
{
int i=0;
while(w[i].sta=='w')/*找到第一个空状态*/
{i++;}
w[i].len=y;
w[i].stl=x;
w[i].sta='w';
disp();
}
int main()
{
int i=0;
int n,z;
defiction();
print();
input();/*初始化作业表*/
disp();
while(i<2)
{
printf("Choose your action!\n");
scanf("%d\n",&z);
switch(z)
{
case 1:
{
printf("作业进入内存!\n");
printf("作业长度\n");
scanf("%d\n",&u);
remove(u);/*返回该段始址*/
inm(m,u);
break;
}
case 0:
{
printf("作业撤离!\n");
scanf("%d",&n);
printf("选择作业 %d\n",n);
outm(n);/*传递作业始址 长度至空区表*/
disp();
movein(s,l);
print();
break;
}
}/*switch*/
i++;
}/*while*/
return 0;
}/*main*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -