1、struct allocated_block int pid; int size; int start_addr; 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 r
2、earrange(int algorithm);int rearrange_FF();int rearrange_BF();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 allo
3、cated_block *find_process(int pid);int main() char choice; 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、 4 kill_process();/删除进程 5 display_mem_usage(); /显示内存使用 0 do_exit(); 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-
5、size = mem_size;start_addr = DEFAULT_MEM_START; fb-next = NULL; return fb;void display_menu() printf(); printf( - Set memory size (default=%d)n, DEFAULT_MEM_SIZE); printf( - Select memory allocation algorithmn); printf( - New process n); printf( - Terminate a process n); printf(_x0005_ - Display mem
6、ory usage n); printf(int set_mem_size() if(flag!=0) /防止重复设置 printf(Cannot set memory size againn); return 0; printf(Total memory size =); scanf(%d, &size); if(size0) mem_size = size; free_block-void set_algorithm() int algorithm; printf( 1 - First Fitn); printf( 2 - Best Fit n); printf( 3 - Worst Fi
7、t n);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) temp = p- p-next = p- temp-next = free_block; free_block = temp; thead = free_block; p = free_block; temp = free_block- while(thead- min_a
8、ddr = thead- if(p-=thead-next) next = thead- thead-next = temp; thead = thead- p = thead; temp = thead-/最佳适应算法 int rearrange_BF() /使用头插法,thead为临时头,p为最小内存的数据块的前一个结点 /当前的最小内存 int min_size = free_block-size;size min_size = thead-/最坏适应算法 int rearrange_WF() /使用头插法,thead为临时头,p为最大内存的数据块的前一个结点 /当前的最大内存 int
9、max_size = free_block-sizemax_size) max_size = temp- max_size = thead- return 1;int new_process() struct allocated_block *ab; int ret; ab = (struct allocated_block *)malloc(sizeof(struct allocated_block); if(!ab) exit(-5); ab- pid+; sprintf(ab-process_name, PROCESS-d, pid);pid = pid; printf(Memory f
10、or %s:, ab-process_name);size=size; 汥敳瀠楲瑮?输入大小有误,请重新输入n); ret = allocate_mem(ab); if(ret=1) &(allocated_block_head = NULL) allocated_block_head=ab; else if (ret=1) next = allocated_block_head; allocated_block_head = ab; return 2; else if(ret=-1) printf(Allocation failn); pid-; free(ab); return -1; r
11、eturn 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 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_alg
12、orithm=MA_WF) if(NULL=fbt|fbt-request_size) else while(NULL!=fbt&fbt-request_size) pre = fbt; fbt = fbt-=free_block- sum = free_block-=temp) sum += temp- if(sum=request_size) if(NULL=temp) pre = free_block; max = free_block-=pre) if(maxstart_addr) max = pre- fbt = pre; pre = pre- tp = allocated_bloc
13、k_head; tt = free_block; if(pre!=fbt) =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;size = sum;next = temp- if(free_block-size - request_size start_addr = free_block- free_block = free_block-start_addr = fbt-start_addr + request_size;size - request_size; /将内存块全部分配 if(fbt-size = fbt- if(pre-next=free_block) free_block = fbt-next = fbt- free(fbt); fbt- free(head);void kill_process() printf(Kill Process, pid=);pid); ab = find_process(pid); if(ab!=N
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1