欢迎来到天天文库
浏览记录
ID:53965342
大小:235.50 KB
页数:15页
时间:2020-04-11
《操作系统课程设计——动态异长分区的存储分配与回收算法.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、//该文件所含代码是课设需要学生自己写的代码和补充的代码,包含部分需要修改的课程设计指导书中的代码,不包含不需修改的代码//1.显示空闲区表voiddisplay_freearea_list(){FREEAREA*p;charbuffer[20];p=p_free_area_list;printf("
2、--------------------
3、------------------
4、");printf("
5、start_address(kB)
6、size(KB)
7、");printf("
8、-------------
9、-------
10、------------------
11、");while(p!=NULL){printf("
12、%d",p->start_address);itoa(p->start_address,buffer,10);print_space(19-strlen(buffer));printf("
13、%d",p->size);itoa(p->size,buffer,10);print_space(17-strlen(buffer));printf("
14、");p=p->next;};printf("
15、------
16、--------------
17、------------------
18、");}//2.最先适应分配法:内存释放函数voidFF_release_memory(intstart_address,intsize){EnterCriticalSection(&CS_FREEAREA_LIST);__int64t1,t2;//记录该算法起止时间t1=GetCycleCount();//记录起始时间FREEAREA*temp,*p,*pp;//将空闲区按start_address由小到大排序,以便整合相邻空闲区whil
19、e(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_
20、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->n
21、ext!=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==NU
22、LL){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
23、==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_l
此文档下载收益归作者所有