欢迎来到天天文库
浏览记录
ID:44333307
大小:131.50 KB
页数:24页
时间:2019-10-20
《内存管理实验(2007)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、内存管理实验1.功能介绍1-Setmemorysize(default=1024)2-Selectmemoryallocationalgorithm3-Newprocess4-Terminateaprocess5-Displaymemoryusage0-Exit2.主要数据结构-1内存空闲分区的描述/*描述每一个空闲块的数据结构*/structfree_block_type{intsize;intstart_addr;structfree_block_type*next;};/*指向内存中空闲块链表的首指针*/structfree_block_type*free_block;主要
2、数据结构-2描述已分配的内存块/*每个进程分配到的内存块的描述*/structallocated_block{intpid;intsize;intstart_addr;charprocess_name[PROCESS_NAME_LEN];structallocated_block*next;};/*进程分配内存块链表的首指针*/structallocated_block*allocated_block_head=NULL;主要数据结构–3常量定义#definePROCESS_NAME_LEN32/*进程名称的最大长度*/#defineMIN_SLICE10/*最小碎片的大小*/#
3、defineDEFAULT_MEM_SIZE1024/*默认内存的大小*/#defineDEFAULT_MEM_START0/*默认内存的起始位置*//*内存分配算法*/#defineMA_FF1#defineMA_BF2#defineMA_WF3intmem_size=DEFAULT_MEM_SIZE;/*内存大小*/intma_algorithm=MA_FF;/*当前分配算法*/staticintpid=0;/*初始pid*/intflag=0;/*设置内存大小标志*/3.主要模块介绍main()函数main(){charchoice;pid=0;free_block=ini
4、t_free_block(mem_size);//初始化空闲区for(;;){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’:displ
5、ay_mem_usage();flag=1;break;//显示内存使用case‘0’:do_exit();exit(0);//释放链表并退出default:break;}}}init_free_block(intmem_size);/*初始化空闲块,默认为一块,可以指定大小及起始地址*/structfree_block_type*init_free_block(intmem_size){structfree_block_type*fb;fb=(structfree_block_type*)malloc(sizeof(structfree_block_type));if(fb==
6、NULL){printf("Nomem");returnNULL;}fb->size=mem_size;fb->start_addr=DEFAULT_MEM_START;fb->next=NULL;returnfb;}display_menu()/*显示菜单*/display_menu(){printf("");printf("1-Setmemorysize(default=%d)",DEFAULT_MEM_SIZE);printf("2-Selectmemoryallocationalgorithm");printf("3-Newprocess");prin
7、tf("4-Terminateaprocess");printf("5-Displaymemoryusage");printf("0-Exit");}set_mem_size();/*设置内存的大小*/set_mem_size(){intsize;if(flag!=0){//防止重复设置printf("Cannotsetmemorysizeagain");return0;}printf("Totalmemorysize=");scanf("%d",&size);i
此文档下载收益归作者所有