内存管理实验Word下载.docx
- 文档编号:13048140
- 上传时间:2022-10-03
- 格式:DOCX
- 页数:18
- 大小:174.87KB
内存管理实验Word下载.docx
《内存管理实验Word下载.docx》由会员分享,可在线阅读,更多相关《内存管理实验Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
已分区表和空闲分区表或链表。
4.在设计好的数据结构上设计一个主存分配算法。
5.在设计好的数据结构上设计一个主存回收算法。
其中,若回收的分区有上邻空闲分区和(或)下邻空闲分区,要求合并为一个空闲分区登记在空闲分区表的一个表项里。
三.概要设计
1.功能模块图
2.各个模块详细的功能描述
主要数据结构:
structfree_block_type//空闲块
{
};
intsize;
intstart_addr;
structfree_block_type*next;
structallocated_block//已分配的内存块
intpid;
intsize;
charprocess_name[PROCESS_NAME_LEN];
structallocated_block*next;
(1)Setmemorysize(default=1024):
这个模块是用来设置内存大小的,从键盘获取一个数字,并将它赋值给内存大小;
若没有设置,则默认内存的大小为1024。
(2)Set_algorithm:
这个模块是用来设置分配算法的,共有三种算法:
首次循环适配算法、最好适配算法、最差适配算法。
从键盘输入一种算法前的序号,根据算法点用不同的函数对内存进行分配;
(3)New_process:
此模块是用来创建进程的。
从键盘输入进程号,调用fork()创建进程并为其分配一定大小的内存,若分配成功,则将其连接到已分配链表中,否则分配失败;
(4)Kill_process:
此模块是用来杀死进程的。
从键盘输入一个进程号,先调用find_process()函数进行查找,若找到,则调用kill()函数将其杀死并释放内存空间;
(5)Display_mem_usage:
此模块是用来显示内存的使用情况的。
将每个进程的内存使用情况显示出来,包括起始地址和内存大小;
(6)Do_exit:
这个模块是用来结束程序的,直接调用exit()实现。
四.详细设计
1.功能函数的调用关系图
Set_mem_size()
Rearrange_FF()
Set_algorithm()
Rearrange_BF()
Rearrange_WF()
New_process()
Allocate_mem()
Kill_process()
Free_mem()
Display_mem_usage()
Do_exit()
exit()
2.各功能函数流程图
Set_algorithm():
开始
显示算法选择菜单
从键盘输入算法序号
Switch()
MA_FF MA_BF MA_WF
Rearrange_F Rearrange_B Rearrange_WF
从键盘获得一个进程号和为进程的分配的
内存大小
Size>
0?
是
Allocate_mem()为进程分配内存
判断是否分配成功
否
将此进程连接到已分配内存链表中
结束
New_process():
Fbt->
size>
=request_size
size-request_size>
M
IN_SLICE
将内存块分割后分配给进程
将内存块整体分配给进程
Allocate_mem():
Kill_process():
输入一个进程号
Find_process()查找该进程
是否找到?
否
Free_mem()释放内存
五.测试数据及运行结果
显示菜单:
设置内存空间大小:
创建进程:
杀死进程1:
选择内存分配算法菜单:
首次适应法:
六.调试情况设计技巧及体会
1.调试情况:
第一步:
对.c文件进行编译,生成目标文件(.o文件),使用的命令是gcc-ca.c(a
是文件名);
第二步:
编译.o文件生成可执行文件(.exe文件),使用的命令是gcc-oaa.o(a
第三步:
运行.exe文件查看结果,使用的命令是./a(a是文件名);
2.设计技巧及体会
这次实验让我们充分了解了内存分配的机制和管理内存的几种方法,从而更进一步对计算机操作系统有了更深的认识。
虽然在这次实验的过程中遇到了很多问题,对内存理解的不深刻,不太清楚计算机系统中是如何对内存进行管理的,但是通过这次实验,现在已经清楚地知道了内存的管理机制,对内存理解的更加透彻。
在以后的学习中能够更好的理解操作系统在计算机应用中起到的作用。
七.源代码
#include<
stdio.h>
#include<
stdlib.h>
#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;
voiddisplay_menu(void);
structfree_block_type*init_free_block(intmem_size);
intset_mem_size();
voidset_algorithm();
voidrearrange(intalgorithm);
voidrearrange_FF();
voidrearrange_BF();
voidrearrange_WF();
voidswap(int*a,int*b);
intnew_process();
intdisplay_mem_usage();
voiddo_exit();
voidkill_process();
structallocated_block*find_process(intpid);
structfree_block_type
intsize;
structallocated_block
structfree_block_type*free_block;
structallocated_block*allocated_block_head=NULL;
intmain(void)
charchoice;
pid=0;
free_block=init_free_block(mem_size);
for(;
;
)
display_menu();
// fflush(stdin);
choice=getchar();
// getchar();
switch(choice)
case'
1'
:
set_mem_size();
break;
case'
2'
set_algorithm();
flag=1;
case'
3'
new_process();
4'
kill_process();
5'
display_mem_usage();
0'
do_exit();
exit(0);
default:
}
return0;
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;
fb->
next=NULL;
returnfb;
intset_mem_size()
if(flag!
=0)
Cannotsetmemorysizeagain\n"
return0;
Totalmemorysize="
scanf("
%d"
&
size);
if(size>
0)
mem_size=size;
free_block->
return1;
voidset_algorithm()
intalgorithm;
\t1-FirstFit\n"
printf("
\t2-BestFit\n"
\t3-WorstFit\n"
algorithm);
if(algorithm>
=1&
&
algorithm<
=3)
ma_algorithm=algorithm;
rearrange(ma_algorithm);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内存 管理 实验