实验四动态分区分配算法Word下载.docx

上传人:b****3 文档编号:15796663 上传时间:2022-11-16 格式:DOCX 页数:21 大小:19.71KB
下载 相关 举报
实验四动态分区分配算法Word下载.docx_第1页
第1页 / 共21页
实验四动态分区分配算法Word下载.docx_第2页
第2页 / 共21页
实验四动态分区分配算法Word下载.docx_第3页
第3页 / 共21页
实验四动态分区分配算法Word下载.docx_第4页
第4页 / 共21页
实验四动态分区分配算法Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验四动态分区分配算法Word下载.docx

《实验四动态分区分配算法Word下载.docx》由会员分享,可在线阅读,更多相关《实验四动态分区分配算法Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

实验四动态分区分配算法Word下载.docx

#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;

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;

//设置算法

3'

new_process();

flag=1;

//创建新进程

4'

kill_process();

//删除进程

5'

display_mem_usage();

//显示内存使用

0'

do_exit();

exit(0);

//释放链表并退出

default:

}

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;

start_addr=DEFAULT_MEM_START;

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(){

if(flag!

=0){//防止重复设置

printf(Cannotsetmemorysizeagain\n);

return0;

printf(Totalmemorysize=);

scanf(%d,&

size);

if(size>

0){

mem_size=size;

free_block->

voidset_algorithm(){

intalgorithm;

printf(\1-FirstFit\n);

printf(\2-BestFit\n);

printf(\3-WorstFit\n);

algorithm);

if(algorithm>

=1&

&

algorithm<

=3){

ma_algorithm=algorithm;

else

牰湩晴尨输入有误,请重新输入!

\n);

//按指定算法重新排列空闲区链表

rearrange(ma_algorithm);

voidrearrange(intalgorithm){

switch(algorithm){

caseMA_FF:

rearrange_FF();

caseMA_BF:

rearrange_BF();

caseMA_WF:

rearrange_WF();

//首次适应算法

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){

min_addr=temp->

p=temp;

temp=temp->

next;

if(NULL!

=p){

temp=p->

p->

next=p->

temp->

next=free_block;

free_block=temp;

thead=free_block;

p=free_block;

temp=free_block->

while(thead->

min_addr=thead->

while(temp->

next->

temp=temp->

if(p->

=thead->

next){

temp=p->

p->

next=thead->

thead->

next=temp;

thead=thead->

p=thead;

temp=thead->

//最佳适应算法

intrearrange_BF(){

//使用头插法,thead为临时头,p为最小内存的数据块的前一个结点

//当前的最小内存

intmin_size=free_block->

size;

size<

min_size){

min_size=temp->

tem

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1