主存空间的分�与回收实验报告 - 百度文库

.

ch=p->data.length-request; }

else if(q->data.length < p->data.length) { q=p;

ch=p->data.length-request; } }

p=p->next; }

if(q==NULL) return ERROR;//ûÓÐÕÒµ½¿ÕÏпé else if(q->data.length==request) {

q->data.length=1; return OK; } else {

temp->prior=q->prior; temp->next=q;

temp->data.address=q->data.address; temp->data.num=q->data.num; q->prior->next=temp; q->prior=temp;

q->data.address+=request; q->data.length=ch; q->data.num+=1; return OK; }

return OK; }

//·ÖÅäÖ÷´æ

Status allocation(int a) {

int request;//ÉêÇëÄÚ´æ´óС

printf(\ÇëÊäÈëÉêÇë·ÖÅäµÄÖ÷´æ´óС(µ¥Î»:KB):\ scanf(\

if(request<0 ||request==0) {

printf(\·ÖÅä´óС²»ºÏÊÊ£¬ÇëÖØÊÔ£¡\ return ERROR; }

¾«Æ·

.

switch(a) {

case 1: //ĬÈÏÊ×´ÎÊÊÓ¦Ëã·¨

if(First_fit(request)==OK) printf(\·ÖÅä³É¹¦£¡****\ else printf(\ÄÚ´æ²»×㣬·ÖÅäʧ°Ü£¡****\ return OK; break;

case 2: //Ñ¡Ôñ×î¼ÑÊÊÓ¦Ëã·¨

if(Best_fit(request)==OK) printf(\·ÖÅä³É¹¦£¡****\ else printf(\ÄÚ´æ²»×㣬·ÖÅäʧ°Ü£¡****\ return OK; break; case 3: //Ñ¡Ôñ×î²îÊÊÓ¦Ëã·¨

if(Worst_fit(request)==OK) printf(\·ÖÅä³É¹¦£¡****\ else printf(\ÄÚ´æ²»×㣬·ÖÅäʧ°Ü£¡****\ return OK; break; } }

Status deal1(Node *p)//´¦Àí»ØÊÕ¿Õ¼ä {

Node *q=first;

for(;q!=NULL;q=q->next) {

if(q==p) { if(q->prior->data.state==0&&q->next->data.state!=0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0;

q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state==0) {

q->data.length+=q->next->data.length; q->next=q->next->next; q->next->next->prior=q; q->data.state=0;

q->data.num=flag; }

¾«Æ·

.

if(q->prior->data.state==0&&q->next->data.state==0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0; q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state!=0) { q->data.state=0; } } }

return OK; }

Status deal2(Node *p)//´¦Àí»ØÊÕ¿Õ¼ä {

Node *q=first;

for(;q!=NULL;q=q->next) {

if(q==p) { if(q->prior->data.state==0&&q->next->data.state!=0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=p->prior; q->data.state=0;

q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state==0) {

q->data.state=0; }

if(q->prior->data.state==0&&q->next->data.state==0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior;

¾«Æ·

.

q->data.state=0; q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state!=0) { q->data.state=0; } } }

return OK; }

//Ö÷´æ»ØÊÕ

Status recovery(int flag) {

Node *p=first;

for(;p!=NULL;p=p->next) {

if(p->data.num==flag) { if(p->prior==first) { if(p->next!=end)//µ±Ç°PÖ¸ÏòµÄÏÂÒ»¸ö²»ÊÇ×îºóÒ»¸öʱ { if(p->next->data.state==0) //ÓëºóÃæµÄ¿ÕÏпéÏàÁ¬ {

p->data.length+=p->next->data.length; p->next->next->prior=p; p->next=p->next->next; p->data.state=0; p->data.num=flag; } else p->data.state=0; } if(p->next==end)//µ±Ç°PÖ¸ÏòµÄÏÂÒ»¸öÊÇ×îºóÒ»¸öʱ {

p->data.state=0; } }//½áÊøif(p->prior==block_first)µÄÇé¿ö else if(p->prior!=first) { if(p->next!=end) { deal1(p);

¾«Æ·

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)