操作系统课程设计动态异长分区的存储分配与回收算法.doc
- 文档编号:238394
- 上传时间:2022-10-07
- 格式:DOC
- 页数:15
- 大小:235.50KB
操作系统课程设计动态异长分区的存储分配与回收算法.doc
《操作系统课程设计动态异长分区的存储分配与回收算法.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计动态异长分区的存储分配与回收算法.doc(15页珍藏版)》请在冰豆网上搜索。
//该文件所含代码是课设需要学生自己写的代码和补充的代码,包含部分需要修改的课程设计指导书中的代码,不包含不需修改的代码
//1.显示空闲区表
voiddisplay_freearea_list(){
FREEAREA*p;
charbuffer[20];
p=p_free_area_list;
printf("|--------------------|------------------|\n");
printf("|start_address(kB)|size(KB)|\n");
printf("|--------------------|------------------|\n");
while(p!
=NULL){
printf("|%d",p->start_address);
itoa(p->start_address,buffer,10);
print_space(19-strlen(buffer));
printf("|%d",p->size);
itoa(p->size,buffer,10);
print_space(17-strlen(buffer));
printf("|\n");
p=p->next;
};
printf("|--------------------|------------------|\n\n");
}
//2.最先适应分配法:
内存释放函数
voidFF_release_memory(intstart_address,intsize){
EnterCriticalSection(&CS_FREEAREA_LIST);
__int64t1,t2; //记录该算法起止时间
t1=GetCycleCount(); //记录起始时间
FREEAREA*temp,*p,*pp;
//将空闲区按start_address由小到大排序,以便整合相邻空闲区
while
(1){
intchange=0;
p=p_free_area_list;
if(p->next!
=NULL){
if(p->start_address>p->next->start_address){
pp=p->next;
p->next=pp->next;
pp->next=p;
p_free_area_list=pp;
change=1;
}
}
if(p->next!
=NULL){
while(p->next->next!
=NULL){
if(p->next->start_address>p->next->next->start_address){
pp=p->next->next;
p->next->next=pp->next;
pp->next=p->next;
p->next=pp;
change=1;
}
p=p->next;
}
}
if(change==0){
break;
}
}
//插入空闲区
temp=newFREEAREA;
p=newFREEAREA;
temp->start_address=start_address;
temp->size=size;
temp->next=NULL;
p->next=p_free_area_list;
while(p->next!
=NULL){
if(p->next->start_address>temp->start_address){
temp->next=p->next;
p->next=temp;
break;
}
else{
p=p->next;
}
}
if(p->next==NULL){
p->next=temp;
}
elseif(temp->next==p_free_area_list){
p_free_area_list=temp;
}
//整合碎片
while
(1){
intchange=0;
p=p_free_area_list;
if(p==NULL){
break;
}
while(p->next!
=NULL){
if((p->start_address+p->size)==(p->next->start_address)){
p->size=p->next->size+p->size;
change=1;
if(p->next->next==NULL){
free(p->next);
p->next=NULL;
}
else{
p->next=p->next->next;
}
}
if(p->next==NULL){
break;
}
else{
p=p->next;
}
}
if(change==0){
break;
}
}
//整理线程结束后的驻留链表
THREAD_RESIDENCE_MEMORY*q;
q=p_thread_residence_memory_list;
if(q->start_address==start_address){
p_thread_residence_memory_list=p_thread_residence_memory_list->next;
}
else{
while(q->next!
=NULL){
if(q->next->start_address==start_address){
if(q->next==tail_thread_residence_memory_list){
tail_thread_residence_memory_list=q;
}
q->next=q->next->next;
break;
}
q=q->next;
}
}
//记录结束时间,并将运行时间存入对应数组
t2=GetCycleCount();
if(time[0][0]>t2-t1){
time[0][0]=t2-t1;
}
if(time[0][1] time[0][1]=t2-t1; } LeaveCriticalSection(&CS_FREEAREA_LIST); } //3.最佳适应分配算法的内存释放函数 voidBF_release_memory(intstart_address,intsize){ EnterCriticalSection(&CS_FREEAREA_LIST); __int64t1,t2; //记录该算法起止时间 t1=GetCycleCount(); //记录起始时间 FREEAREA*temp,*p,*pp; //将空闲区按start_address由小到大排序,以便整合相邻空闲区 while (1){ intchange=0; p=p_free_area_list; if(p->next! =NULL){ if(p->start_address>p->next->start_address){ pp=p->next; p->next=pp->next; pp->next=p; p_free_area_list=pp; change=1; } } if(p->next! =NULL){ while(p->next->next! =NULL){ if(p->next->start_address>p->next->next->start_address){ pp=p->next->next; p->next->next=pp->next; pp->next=p->next; p->next=pp; change=1; } p=p->next; } } if(change==0){ break; } } //插入空闲区 temp=newFREEAREA; p=newFREEAREA; temp->start_address=start_address; temp->size=size; temp->next=NULL; p->next=p_free_area_list; while(p->next! =NULL){ if(p->next->start_address>temp->start_address){ temp->next=p->next; p->next=temp; break; } else{ p=p->next; } } if(p->next==NULL){ p->next=temp; } elseif(temp->next==p_free_area_list){ p_free_area_list=temp; } //整合碎片 while (1){ intchange=0; p=p_free_area_list; if(p==NULL){ break; } while(p->next! =NULL){ if((p->start_address+p->size)==(p->next->start_address)){ p->size=p->next->size+p->size; change=1; if(p->next->next==NULL){ free(p->next); p->next=NULL; } else{ p->next=p->next->next; } } if(p->next==NULL){ break; } else{ p=p->next; } } if(change==0){ break; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 动态 分区 存储 分配 回收 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)