Ä£ÄâÉè¼Æ¶¯Ì¬·ÖÇø´æ´¢¹ÜÀíµÄ·ÖÅäÓë»ØÊÕ ÏÂÔر¾ÎÄ

5 ¡­ ¡­ ¡­ 2.1.2 ¿ÕÏзÖÇøÁ´ ÓÃÁ´Í·Ö¸Õ뽫ϵͳÖеĿÕÏзÖÇøÁ´½ÓÆðÀ´£¬¹¹³É¿ÕÏзÖÇøÁ´¡£Ã¿¸ö¿ÕÏзÖÇøµÄÆðʼ²¿·Ö´æ·ÅÏàÓ¦µÄ¿ØÖÆÐÅÏ¢(Èç´óС,Ö¸ÏòÏÂÒ»¿ÕÏзÖÇøµÄÖ¸ÕëµÈ).

2.2 Ä£¿é˵Ã÷

2.12.1 ·ÖÇø˵Ã÷±í struct PST

{//partition specification table

int id;//·ÖÇøºÅ

int addr;//ÆðʼµØÖ·

int size;//·ÖÇø³¤¶È Status state;//״̬

};

2.2.2 Ë«ÏòÁ´±í struct Node

{//Ë«ÏòÁ´±í½áµã PST data;

Node *back;//Ç°Çý

Node *next;//ºó¼Ì Node() {

back=NULL; next=NULL; }

Node(int id,int size) {

data.ID=id; data.size=size; back=NULL; next=NULL; } };

2.2.3 ×îÏÈÊÊÓ¦Ëã·¨

¿ÕÏзÖÇø£¨Á´£©°´µØÖ·µÝÔöµÄ´ÎÐòÅÅÁС£ÔÚ½øÐÐÄÚ´æ·ÖÅäʱ,´Ó¿ÕÏзÖÇø±í/Á´Ê׿ªÊ¼Ë³Ðò²éÕÒ,Ö±µ½ÕÒµ½µÚÒ»¸öÂú×ãÆä´óСҪÇóµÄ¿ÕÏзÖÇøΪֹ¡£È»ºóÔÙ°´ÕÕ×÷Òµ´óС£¬´Ó¸Ã·ÖÇøÖл®³öÒ»¿éÄÚ´æ¿Õ¼ä·ÖÅä¸øÇëÇóÕߣ¬ÓàϵĿÕÏзÖÇøÈÔÁôÔÚ¿ÕÏÐ

·ÖÇø±í£¨Á´£©ÖС£

Ëã·¨Ìصã:ÓÅÏÈÀûÓÃÄÚ´æµÍµØÖ·²¿·ÖµÄ¿ÕÏзÖÇø,´Ó¶ø±£ÁôÁ˸ߵØÖ·²¿·ÖµÄ´ó¿ÕÏÐÇø¡£µ«ÓÉÓڵ͵ØÖ·²¿·Ö²»¶Ï±»»®·Ö,ÖÂʹµÍµØÖ·¶ËÁôÏÂÐí¶àÄÑÒÔÀûÓõĺÜСµÄ¿ÕÏзÖÇø(ËéƬ»òÁãÍ·),¶øÿ´Î²éÕÒÓÖ¶¼ÊǴӵ͵ØÖ·²¿·Ö¿ªÊ¼,ÕâÎÞÒÉÔö¼ÓÁ˲éÕÒ¿ÉÓÿÕÏзÖÇøµÄ¿ªÏú¡£

Status FFA(int id,int size) {//head fit algorithm

Node *temp=new Node(id,size); temp->data.state=BUSY; Node *cur=head->next; while(cur) {

if(cur->data.state==FREE&&cur->data.size==size) {//Èç¹û¿ÕÏпé´óС¸ÕºÃÓëÇëÇó´óСÏàµÈ,Ö±½Ó·ÖÅä cur->data.ID=id;

cur->data.state=BUSY; return OK; break; }

if(cur->data.state==FREE&&cur->data.size>size) {//Èç¹û´óÓÚ

temp->back=cur->back; temp->next=cur;

cur->back->next=temp;

temp->data.addr=cur->data.addr; cur->back=temp;

cur->data.addr=cur->data.addr+size; cur->data.size=cur->data.size-size; return OK; break; }

cur=cur->next; }

return ERROR; }

2.2.4 ×î¼ÑÊÊÓ¦Ëã·¨

¿ÕÏзÖÇø±í/Á´°´ÈÝÁ¿´óСµÝÔöµÄ´ÎÐòÅÅÁС£ÔÚ½øÐÐÄÚ´æ·ÖÅäʱ£¬´Ó¿ÕÏзÖÇø±í/Á´µÄÊ׿ªÊ¼Ë³Ðò²éÕÒ£¬Ö±µ½ÕÒµ½µÚÒ»¸öÂú×ãÆä´óСҪÇóµÄ¿ÕÏзÖÇøΪֹ¡£°´ÕâÖÖ·½Ê½Îª×÷Òµ·ÖÅäÄڴ棬¾ÍÄܰѼÈÂú×ã×÷ÒµÒªÇóÓÖÓë×÷Òµ´óС×î½Ó½üµÄ¿ÕÏзÖÇø·ÖÅä¸ø×÷Òµ¡£Èç¹û¸Ã¿ÕÏзÖÇø´óÓÚ×÷ÒµµÄ´óС£¬ÔòÓëÊ×´ÎÊÊÓ¦Ëã·¨Ïàͬ£¬½«Ê£Óà¿ÕÏзÖÇøÈÔÁôÔÚ¿ÕÏзÖÇø±í/Á´ÖС£

Ëã·¨Ìص㣺Èô´æÔÚÓë×÷Òµ´óСһÖµĿÕÏзÖÇø,ÔòËü±ØÈ»±»Ñ¡ÖУ¬Èô²»´æÔÚÓë×÷Òµ´óСһÖµĿÕÏзÖÇø£¬ÔòÖ»»®·Ö±È×÷ÒµÉÔ´óµÄ¿ÕÏзÖÇø£¬,´Ó¶ø±£ÁôÁË´óµÄ¿Õ

ÏзÖÇø,µ«¿ÕÏÐÇøÒ»°ã²»¿ÉÄÜÕýºÃºÍËüÉêÇëµÄÄÚ´æ¿Õ¼ä´óСһÑù,Òò¶ø½«Æä·Ö¸î³ÉÁ½²¿·Öʱ,ÍùÍùʹʣϵĿÕÏÐÇø·Ç³£Ð¡,´Ó¶øÔÚ´æ´¢Æ÷ÖÐÁôÏÂÐí¶àÄÑÒÔÀûÓõÄС¿ÕÏÐÇø£¨ËéƬ»òÁãÍ·£©¡£

Status BFA(int id,int size) {//best fit algorithm

Node *temp=new Node(id,size); temp->data.state=BUSY;

int min;//¼Ç¼·ûºÏÂú×ãÇëÇóµÄ×îС¿ÕÏпé´óС Node *fit;//Ö¸Ïò²ÉÓÃ×î¼ÑÊÊÓ¦Ëã·¨µÄ²åÈëλÖà Node *cur=head->next; while(cur)

{//È¡µÃµÚÒ»¸ö¿ÉÒÔ·ÖÅäµÄλÖ㨲»Ò»¶¨ÊÇ×î¼ÑλÖã© if(cur->data.state==FREE&&cur->data.size>=size) {

fit=cur;

min=cur->data.size-size; break; }

cur=cur->next; }

while(cur) {

if(cur->data.state==FREE&&cur->data.size==size) {//Èç¹ûÏàµÈÖ±½Ó·ÖÅä

cur->data.state=BUSY; cur->data.ID=id; return OK; break; }

if(cur->data.state==FREE&&cur->data.size>size) {//»ñÈ¡×î¼ÑλÖÃ

if(cur->data.size-size

min=cur->data.size-size; fit=cur; } }

cur=cur->next; } if(fit)

{//Èô×î¼Ñ£¬²åÈë

temp->back=fit->back; temp->next=fit;

fit->back->next=temp;

temp->data.addr=fit->data.addr; fit->back=temp;

fit->data.addr=fit->data.addr+size; fit->data.size=fit->data.size-size; return OK; } else

return ERROR;

}

2.2.5 ×ÊÊÓ¦Ëã·¨

¿ÕÏзÖÇø±í/Á´°´ÈÝÁ¿´óСµÝ¼õµÄ´ÎÐòÅÅÁС£ÔÚ½øÐÐÄÚ´æ·ÖÅäʱ£¬´Ó¿ÕÏзÖÇø±íµÄÊ׿ªÊ¼Ë³Ðò²éÕÒ£¬Ö±µ½ÕÒµ½µÚÒ»¸ö±ÈÖ®´óµÄ¿ÕÏзÖÇøΪֹ¡£Ê£ÏµĿÕÏÐÈÔÁôÔÚ¿ÕÏзÖÇø±í/Á´ÖС£

Ëã·¨Ìص㣺×ÜÊÇÌôÑ¡Âú×ã×÷ÒµÒªÇóµÄ×î´óµÄ·ÖÇø·ÖÅä¸ø×÷Òµ¡£ÕâÑùʹ·Ö¸ø×÷ÒµºóʣϵĿÕÏзÖÇøÒ²½Ï´ó£¬¿É×°ÏÂÆäËü×÷Òµ¡£µ«ÓÉÓÚ×î´óµÄ¿ÕÏзÖÇø×ÜÊÇÒòÊ×ÏÈ·ÖÅä¶ø»®·Ö£¬µ±Óдó×÷Òµµ½À´Ê±£¬Æä´æ´¢¿Õ¼äµÄÉêÇëÍùÍù»áµÃ²»µ½Âú×ã¡£

Status WFA(int id,int size) {//worst fit algorithm

Node *temp=new Node(id,size); temp->data.state=BUSY;

int max;//¼Ç¼·ûºÏÂú×ãÇëÇóµÄ×îС¿ÕÏпé´óС Node *fit;//Ö¸Ïò²ÉÓÃ×ÊÊÓ¦Ëã·¨µÄ²åÈëλÖà Node *cur=head->next; while(cur)

{//È¡µÃµÚÒ»¸ö¿ÉÒÔ·ÖÅäµÄλÖ㨲»Ò»¶¨ÊÇ×î¼ÑλÖã© if(cur->data.state==FREE&&cur->data.size>=size) {

fit=cur;

max=cur->data.size-size; break; }

cur=cur->next; }

while(cur) {/*

if(cur->data.state==FREE&&cur->data.size==size) {//Èç¹ûÏàµÈÖ±½Ó·ÖÅä

cur->data.state=BUSY; cur->data.ID=id; return OK; break; }