ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:18.60KB ,
资源ID:21895184      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21895184.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验四 动态分区分配算法Word下载.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、 char process_namePROCESS_NAME_LEN; struct allocated_block *next;struct allocated_block *allocated_block_head = NULL;/函数声明struct free_block_type* init_free_block(int mem_size);void display_menu();int set_mem_size();void set_algorithm();void rearrange(int algorithm);int rearrange_FF();int rearrange_B

2、F();int rearrange_WF();int new_process();int allocate_mem(struct allocated_block *ab);void kill_process();int free_mem(struct allocated_block *ab);int dispose(struct allocated_block *free_ab);int display_mem_usage();void do_exit();struct allocated_block *find_process(int pid);int main() char choice;

3、 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; /设置内存大小2 set_algorithm();flag=1;/设置算法3 new_process(); flag=1;/创建新进程4 kill_process();/删除进程5 display_mem_usage(); /显示内存使用0 do_exi

4、t(); exit(0); /释放链表并退出 default: return 1;struct free_block_type* init_free_block(int mem_size) struct free_block_type *fb; fb=(struct free_block_type *)malloc(sizeof(struct free_block_type); if(fb=NULL) printf(No memn); return NULL; fb-size = mem_size;start_addr = DEFAULT_MEM_START;next = NULL; retu

5、rn fb;void display_menu()n1 - Set memory size (default=%d)n, DEFAULT_MEM_SIZE);2 - Select memory allocation algorithmn3 - New process n4 - Terminate a process n5 - Display memory usage n0 - Exitnint set_mem_size() if(flag!=0) /防止重复设置Cannot set memory size againn return 0;Total memory size = scanf(%d

6、, &size); if(size0) mem_size = size; free_block-void set_algorithm() int algorithm; printf(t1 - First Fitnt2 - Best Fit nt3 - Worst Fit n scanf(algorithm); if(algorithm=1 & algorithm start_addr; temp = free_block; while(temp-next!=NULL) if(temp-next-start_addr p = temp; temp = temp-next; if(NULL!=p)

7、 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- if(p-=thead-next) next = thead- thead-next = temp; thead = thead- p = thead; temp = thead-/最佳适应算法int rearrange_BF() /使用头插法,thead为临时头,p为最

8、小内存的数据块的前一个结点 /当前的最小内存 int min_size = free_block-size;size min_size = thead-/最坏适应算法int rearrange_WF() /使用头插法,thead为临时头,p为最大内存的数据块的前一个结点 /当前的最大内存 int max_size = free_block-sizemax_size) max_size = temp- max_size = thead-int new_process() struct allocated_block *ab; int ret; ab = (struct allocated_blo

9、ck *)malloc(sizeof(struct allocated_block); if(!ab) exit(-5); ab- pid+; sprintf(ab-process_name, PROCESS-d, pid);pid = pid;Memory for %s:, ab-process_name); if(size ab-size=size; break; else printf(输入大小有误,请重新输入n ret = allocate_mem(ab); if(ret=1) &(allocated_block_head = NULL) allocated_block_head=ab

10、; else if (ret=1) next = allocated_block_head; allocated_block_head = ab; return 2; else if(ret=-1)Allocation failn pid-; free(ab); return -1; return 3;int allocate_mem(struct allocated_block *ab) struct free_block_type *fbt, *pre,*head,*temp,*tt; struct allocated_block *tp; int request_size=ab- int

11、 sum=0; int max; head = (struct free_block_type *)malloc(sizeof(struct free_block_type); pre = head; fbt = free_block; pre-next = fbt; if(ma_algorithm=MA_WF) if(NULL=fbt|fbt-request_size) return -1; else while(NULL!=fbt&fbt-request_size) pre = fbt; fbt = fbt- if(NULL=fbt|fbt- =free_block- sum = free

12、_block- temp = free_block- while(NULL!=temp) sum += temp- if(sum=request_size) break; temp = temp- if(NULL=temp) return -1; else pre = free_block; max = free_block- fbt = free_block; while(temp-=pre) if(maxstart_addr) max = pre- fbt = pre; pre = pre- =pre) tp = allocated_block_head; tt = free_block;

13、 if(pre!=fbt) while(NULL!=tp) if(tp-start_addrstart_addr) tp-start_addr = tp-start_addr - pre- tp = tp- =tt) if(tt- tt-start_addr = tt- tt = tt- while(pre!=temp-=fbt) free(pre); free_block = fbt; free_block-size = sum;next = temp- if(free_block-size - request_size size = free_block-start_addr = free

14、_block- pre = free_block; free_block = free_block- free(pre); else start_addr = fbt- free_block-start_addr + request_size;size - request_size; /将内存块全部分配 if(fbt-size = fbt- if(pre-next=free_block) free_block = fbt- else pre-next = fbt- free(fbt); fbt- free(head);void kill_process()Kill Process, pid=pid); ab = find_process(pid); if(ab!=NULL) free_mem(ab); dispose(ab);没有pid为%d的进程!,pid);struct allocated_block *find_process(int pid) struct allocated_blo

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

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