操作系统课程设计动态异长分区的存储分配与回收算法文档格式.doc
《操作系统课程设计动态异长分区的存储分配与回收算法文档格式.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计动态异长分区的存储分配与回收算法文档格式.doc(15页珍藏版)》请在冰豆网上搜索。
![操作系统课程设计动态异长分区的存储分配与回收算法文档格式.doc](https://file1.bdocx.com/fileroot1/2022-10/7/ed805348-6b9d-4cf2-af35-bc6953438870/ed805348-6b9d-4cf2-af35-bc69534388701.gif)
,p->
start_address);
itoa(p->
start_address,buffer,10);
print_space(19-strlen(buffer));
size);
itoa(p->
size,buffer,10);
print_space(17-strlen(buffer));
|\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->
p->
next=pp->
pp->
next=p;
p_free_area_list=pp;
change=1;
}
}
while(p->
if(p->
start_address){
pp=p->
p->
pp->
next=p->
next=pp;
change=1;
}
p=p->
next;
if(change==0){
break;
}
//插入空闲区
temp=newFREEAREA;
p=newFREEAREA;
temp->
start_address=start_address;
size=size;
next=NULL;
p->
next=p_free_area_list;
while(p->
temp->
start_address){
temp->
p->
next=temp;
else{
p=p->
if(p->
next==NULL){
p->
elseif(temp->
next==p_free_area_list){
p_free_area_list=temp;
}
//整合碎片
if(p==NULL){
while(p->
if((p->
start_address+p->
size)==(p->
start_address)){
size=p->
size+p->
size;
free(p->
next);
else{
break;
else{
//整理线程结束后的驻留链表
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->
else{
while(q->
if(q->
if(q->
next==tail_thread_residence_memory_list){
tail_thread_residence_memory_list=q;
q->
next=q->
q=q->
//记录结束时间,并将运行时间存入对应数组
t2=GetCycleCount();
if(time[0][0]>
t2-t1){
time[0][0]=t2-t1;
if(time[0][1]<
time[0][1]=t2-t1;
}
LeaveCriticalSection(&
//3.最佳适应分配算法的内存释放函数
voidBF_release_memory(intstart_address,intsize){
//插入空闲区