实验四动态分区分配算法.docx
- 文档编号:2885621
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:21
- 大小:19.71KB
实验四动态分区分配算法.docx
《实验四动态分区分配算法.docx》由会员分享,可在线阅读,更多相关《实验四动态分区分配算法.docx(21页珍藏版)》请在冰豆网上搜索。
实验四动态分区分配算法
^`
实验内容:
存储器管理实验实验目的一、
三种不同的算法,)最坏适应算法(WF,最佳适应算法(BF),采用首次适应算法(FF)实现对系统空闲区的动态分区分配。
题目二、实验给予顺序搜索的动态分区算法的程序。
三、实验要求
读懂给出的核心代码,进行适当的修改,编译通过后,完成实验报告。
核心代码四、
#include
#include
#include
//常量定义
#definePROCESS_NAME_LEN32
#defineMIN_SLICE10
#defineDEFAULT_MEM_SIZE1024
#defineDEFAULT_MEM_START0
#defineMA_FF1
#defineMA_BF2
#defineMA_WF3
intmem_size=DEFAULT_MEM_SIZE;
intma_algorithm=MA_FF;
staticintpid=0;
intflag=0;
structfree_block_type{
intsize;
intstart_addr;
structfree_block_type*next;
};
structfree_block_type*free_block;
^`
//描述已分配的内存块
structallocated_block{
intpid;intsize;
intstart_addr;
charprocess_name[PROCESS_NAME_LEN];
structallocated_block*next;
};
structallocated_block*allocated_block_head=NULL;
//函数声明
structfree_block_type*init_free_block(intmem_size);
voiddisplay_menu();
intset_mem_size();
voidset_algorithm();
voidrearrange(intalgorithm);
intrearrange_FF();
intrearrange_BF();
intrearrange_WF();
intnew_process();
intallocate_mem(structallocated_block*ab);
voidkill_process();
intfree_mem(structallocated_block*ab);
intdispose(structallocated_block*free_ab);
intdisplay_mem_usage();
voiddo_exit();
structallocated_block*find_process(intpid);
intmain(){
charchoice;pid=0;
free_block=init_free_block(mem_size);//初始化空闲区
while
(1){
display_menu();//显示菜单
fflush(stdin);
choice=getchar();//获取用户输入
switch(choice){
case'1':
set_mem_size();break;//设置内存大小
case'2':
set_algorithm();flag=1;break;//设置算法
case'3':
new_process();flag=1;break;//创建新进程
case'4':
kill_process();flag=1;break;//删除进程
case'5':
display_mem_usage();flag=1;break;//显示内存使用
case'0':
do_exit();exit(0);//释放链表并退出
default:
break;
}
^`
}
return1;
}
structfree_block_type*init_free_block(intmem_size){
structfree_block_type*fb;
fb=(structfree_block_type*)malloc(sizeof(structfree_block_type));
if(fb==NULL){
printf(Nomem\n);
returnNULL;
}
fb->size=mem_size;
fb->start_addr=DEFAULT_MEM_START;
fb->next=NULL;
returnfb;
}
voiddisplay_menu(){
printf(\
);
printf(-Setmemorysize(default=%d)\n,DEFAULT_MEM_SIZE);
printf(-Selectmemoryallocationalgorithm\n);
printf(-Newprocess\n);
printf(-Terminateaprocess\n);
printf(_x0005_-Displaymemoryusage\n);
printf(-Exit\n);
}
intset_mem_size(){
intsize;
if(flag!
=0){//防止重复设置
printf(Cannotsetmemorysizeagain\n);
return0;
}
printf(Totalmemorysize=);
scanf(%d,&size);
if(size>0){
mem_size=size;
free_block->size=mem_size;
}
flag=1;
^`
return1;
}
voidset_algorithm(){
intalgorithm;
while
(1){
printf(\1-FirstFit\n);
printf(\2-BestFit\n);
printf(\3-WorstFit\n);
scanf(%d,&algorithm);
if(algorithm>=1&&algorithm<=3){
ma_algorithm=algorithm;
break;
}
else
牰湩晴尨输入有误,请重新输入!
\n);
}
//按指定算法重新排列空闲区链表
rearrange(ma_algorithm);
}
voidrearrange(intalgorithm){
switch(algorithm){
caseMA_FF:
rearrange_FF();break;
caseMA_BF:
rearrange_BF();break;
caseMA_WF:
rearrange_WF();break;
}
}
//首次适应算法
intrearrange_FF(){
structfree_block_type*temp;
//使用头插法,thead为临时头,p为最小地址的数据块的前一个结点
structfree_block_type*thead=NULL,*p=NULL;
//当前的最小地址
intmin_addr=free_block->start_addr;
temp=free_block;
while(temp->next!
=NULL){
if(temp->next->start_addr min_addr=temp->next->start_addr; p=temp; ^` } temp=temp->next; } if(NULL! =p){ temp=p->next; p->next=p->next->next; temp->next=free_block; free_block=temp; } thead=free_block; p=free_block; temp=free_block->next; while(thead->next! =NULL){ min_addr=thead->next->start_addr; while(temp->next! =NULL){ if(temp->next->start_addr min_addr=temp->next->start_addr; p=temp; } temp=temp->next; } if(p->next! =thead->next){ temp=p->next; p->next=p->next->next; temp->next=thead->next; thead->next=temp; } thead=thead->next; p=thead; temp=thead->next; } return1; } //最佳适应算法 intrearrange_BF(){ structfree_block_type*temp; //使用头插法,thead为临时头,p为最小内存的数据块的前一个结点 structfree_block_type*thead=NULL,*p=NULL; //当前的最小内存 intmin_size=free_block->size; temp=free_block; ^` while(temp->next! =NULL){ if(temp->next->size min_size=temp->next->size; p=temp; } temp=temp->next; } if(NULL! =p){ temp=p->next; p->next=p->next->next; temp->next=free_block; free_block=temp; } thead=free_block; p=free_block; tem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 动态 分区 分配 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)