修改内存分配: ? 修改/usr/src/servers/pm/alloc.c中的alloc_mem函数,把first-fit修改成
best-fit,即分配内存之前,先遍历整个空闲内存块列表,找到最佳匹配的空闲块。
? 修改/usr/src/servers/pm/break.c中的adjust函数,并增加了一个
allocate_new_mem局部函数在adjust函数中调用。brk系统调用流程: ? do_brk函数计算数据段新的边界,然后调用adjust函数,adjust函数计算程序当前的空闲空间是否足够分配:
? 若足够,则调整数据段指针,堆栈指针;通知内核程序的映像发生了变化,返回do_brk函数。
? 若不够,调用allocate_new_mem函数申请新的足够大的内存空间;将程序现有的数据段贺堆栈段的内容分别拷贝至新内存区域的底部(bottom)和顶部(top);通知内核程序的映像发生了变化;返回do_brk函数。
? 可参考课本4.7和4.8节
测试程序在编写时有特定要求,即将所有的变量申明放到main函数之外,让所有的变量变成全局变量,不允许使用局部变量。按照Minix3的规则全局变量保存在数据段中,不存放在堆栈中,所以可以通过测试。
? 测试程序一只是简单测试sbrk调用,不断的调整数据段的上界,并未对新分配的内存空间进行访问。
? 测试程序二则对新分配的内存空间进行了访问。
? 建议先通过测试程序一,再尝试测试程序二。通过修改brk,使得二个测试程序可以分配比之前更多的内存。测试程序最后的输出结果和分配minix操作系统的物理内存数量有关。