好像我写过,给你找找. #include<iostream.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;cout<<"t[1].std="<<t[1].std<<endl; 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; cout<<"first t[1].length="<<t[1].length<<endl; } 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';cout<<"second t[1].length="<<t[1].length<<endl; } cout<<"third t[1].length="<<t[1].length<<endl; } }
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();
}
void main() {
defiction(); print(); input();//初始化作业表 disp(); int i=0; int n,z; while(i<2) { cout<<"Choose your action!";//printf("Choose your action!\n"); cin>>z;//scanf("%d\n",&z); switch(z) { case 1: { cout<<"作业进入内存!"<<endl; cout<<"作业长度"<<endl; cin>>u;//scanf("%d\n",&u); remove(u);//返回该段始址 inm(m,u); break; } case 0: {cout<<"作业撤离!"<<endl; cin>>n;//scanf("%d",&n); cout<<"选择作业"<<n<<endl; outm(n);//传递作业始址 长度至空区表 disp(); movein(s,l); print(); break; }
i++; }//switch }//while }//main