1、实验一 可变分区存储管理请尽量到机房上机 (一) 实验题目编写一个 C程序,用 char *malloc(unsigned size)函数向系统申请一次内存空间(如 size=1000,单位为字节),用首次适应法addr = (char *)fmalloc(unsigned size) 和ffree(unsigned size,char * addr)(基本要求)或循环首次适应法(提高一步)addr = (char *)lmalloc(unsigned size) 和lfree(unsigned size,char * addr)模拟 UNIX可变分区内存管理,实现对该内存区的分配和释放管理。
2、(二) 实验目的 1加深对可变分区的存储管理的理解; 2提高用 C语言编制大型系统程序的能力,特别是掌握 C语言编程的难点:指针及指针作为函数参数。(三) 实验要求空闲存储区表可采用结构数组的形式,建议采用的数据结构为:结构数组的形式:struct map unsigned m_size;char * m_addr;struct map coremapN;分配函数的参数 size和释放函数的参数 size、 addr以键盘命令的形式输入,每次分配和释放后显示自己的空闲存储区表。整个系统的基本框架为: (四) 实验注意事项键盘命令的简单形式如:malloc 100 通过 fmalloc函数申请
3、100字节的内存空间。free 100 2567890 通过 ffree函数释放起始地址为 2567890的那个内存区,该地址先前通过 fmalloc申请的有效存储区地址。为了避免输入复杂的释放地址,可采用输入相对地址的方法,如: f 100 300(相对地址)调用 ffree时再加上分配到的内存始地址。命令输入可用 C函数:scanf (“%c”, cmdchar =getchar ( ) 或scanf (“%s”, while(c=n|c=t|c= ) 程序输入、调试和测试可以在 Linux的环境下进行,也可在 Windows turbo C等的环境中进行,但 Windows 和 turb
4、o C环境不直接支持 I/O转向,故在完成此项工作时应将编译后产生的执行文件如 myproc.exe存入磁盘的某个目录中,如是 Windows ,运行 cmd命令进入命令行窗口,运行程序,用 I/O转向生成结果文件。如:myproc.exe result.txt在 Linux的环境下可直接运行:./myproc resul(五) 测试要求v程序调试基本通过后,应进行较为全面的测试,建议采用白盒法的路径测试方法,测试路径应包含分配算法的 “首次 ”或 “循环首次 ”、,释放算法的与邻近空闲分区联系的四种情况,还要包含一些必要的出错处理路径。 v可在测试通过后,可用 I/O转向使屏幕的输出结果转至
5、指定文件。注意,由于此时看不到提示字符串和空闲存储区表的输出内容,欲释放存储地址较难正确输入,可采用以下几种方法: 测试通过后可用 I/O转向使屏幕的输出结果转至指定文件。注意,由于此时看不到提示字符串和空闲存储区表的输出内容,欲释放存储地址较难正确输入,可采用以下几种方法: 1在不采用输出转向时先完整地运行一遍,并记下所有的命令和参数,再用 I/O转向时 “摸瞎 ”似地依次输入各个命令和参数,由于 malloc所分配的存储区地址时用户程序的虚地址空间,故同一程序的两次运行的结果应当是一样的。为了使输出结果文件也含有输入的命令串,应在输入命令后,再将命令和参数输出至标准输出设备。 2. 如 fmalloc和 ffree,是采用相对地址的管理方法( malloc所分配的地址 +偏移地址),那么输入 ffree的释放地址就容易得多。 3输入也可采用 I/O转向,将预先设计好的所有输入次序(部分数据可在不采用 I/O转向运行时输入)写入输入文件,再用:myprog.exe result.txt的形式执行。 4对于文件的 I/O较熟悉的学生可采用每次在屏幕输出后重复向文件输出的方法,这样上述的问题就很容易解决了。