实验五模板(内存分配)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告(五)内存分配
一、实验目的
通过学习Minix操作系统的内存分配,加深理解操作系统内存管理的相关概念和原理。

二、准备工作
注:如果熟悉准备工作内容,可忽略。

1、练习使用vi编辑器
vi编辑器具有两种模式
(1)命令模式
通过键盘左上角ESC键进入,在该模式下可以使用编辑命令。

删除一行(连续键入两个d);
删除光标处的字符(小写x);
在当前光标前插入(i);
在当前光标后插入(a);
保存(shift+冒号,再键入w);退出编辑器(shift+冒号,再键入q);保存并且退出(shift+冒号,再键入wq);
(2)编辑模式
在命令模式下,通过在当前光标前插入(i)或在当前光标后插入(a),进入编辑模式。

通过键盘左上角ESC键切换到命令模式。

2、练习修改、编译和安装新操作系统
(1)修改/usr/src/kernel/main.c中的announce函数
cd /usr/src/kernel
cp main.c main.c.backup
vi main.c
找到announce函数
增加打印语句kprintf(“在这儿增加你想打印的语句”);
保存退出vi编辑器(通过键盘左上角ESC键进入命令模式,然后shift+冒号,再键入wq)(2)编译新操作系统
cd /usr/src/tools
make image
(3)安装新操作系统
make install
(4)用新操作系统更换旧操作系统:
shutdown
在boot monitor下(出现d0p0s0>时),键入boot c0d0p0重新进入新操作系统。

三、实验内容、过程与分析
(一)实验内容
1、学习《Operating Systems Design and Implementation》(Andrew S. Tanenbaum著,第三版)中的第4章4.8.8小节,Memory Management Utilities,内存管理。

Minix内存管理采用了动态分区分配以及首次适应算法。

空闲分区链表中的空闲分区以地址递增次序链接。

2、修改操作系统文件/usr/src/servers/pm/alloc.c
命令cd /usr/src/servers/pm
命令cp alloc.c alloc.c.backup
命令vi alloc.c
找到并修改函数alloc_mem(clicks)
(1)增加指向空闲内存块链表的指针变量hp2,修改register struct hole *hp, *prev_ptr;为register struct hole *hp, *prev_ptr, *hp2;
增加表示空闲内存块编号的整数变量,int i=0;
(2)在所有变量说明后面,增加如下语句。

printf(“\n\nrequire %dK memory\n”, clicks);//需要分配的内存块的大小
printf(“before memory allocation:\n”);//在内存块分配之前
hp2 = hole_head;//指向空闲内存块链表表头
while (hp2 != NIL_HOLE) { //测试是否到达链表尾部
if (hp2->h_len > 0) { //测试内存块是否大于零
i++;//空闲内存块编号增加1
printf(“block%d:base=%dK,length=%dK, ”, i, hp2->h_base, hp2->h_len);//打印各内存块编号、首地址和大小
}
hp2 = hp2->h_next;//指向下一个内存块
}
在do while循环中的while循环中,在return(old_base)语句前,增加如下语句:
printf(“\nmemory block successfully allocated, address=%dK\n”, old_base);//内存块分配成功,打印分配到的内存块所在地址。

3、编译和安装新操作系统
命令cd /usr/src/tools
编译make image
安装新操作系统make install,用新操作系统替代旧操作系统
关机shutdown
重新启动boot c0d0p0
4、在新操作系统中,执行命令或用户程序,导致系统为其创建进程和分配内存,观察空闲内存块链表的变化(观察内存链表中各空闲内存块是否按照地址递增顺序排序,各内存块大小,分配前和分配后内存块链表的比较)。

注意有部分指令是命令解释程序SHELL自带的,SHELL进程已经在内存中,因此执行这些命令不会导致新分配内存。

创建进程使得操作系统为其分配内存。

例如,可以执行系统命令,例如ls、date、cp,等;可以编写用户程序,编译、执行用户程序。

(二)实验过程
(三)实验分析
四、小结
(说明:可以是从实验中得到的收获等)
通过实验,学会了如何在minix中修改系统代码,对每一次操作都可以查看到内存的分配情况。

在做得过程中,需要对系统文件要进行备份,防止在出现错误时候进行更好的恢复。

该实验提供了每次内存分配情况,在多个进程块下,当不够分配,继续向下,当可以分配,减去相应的内存。

然后该进程块对应的长度减少。

采用动态分区分配算法 base 代表首地址。

当需要要求分配内存时候,从各个块中查
找,可以分配的。

相关文档
最新文档