首页 > 其他 > 详细

操作系统课程设计 内存管理

时间:2020-07-03 23:12:32      阅读:81      评论:0      收藏:0      [点我收藏+]

实验报告及代码见我的github

https://github.com/ningmengwei-ata/Class-Project/tree/master/Operating%20System/memory%20management

要求:

修改Minix3.1.2a的进程管理器,改进brk系统调用的实现,使得分配给进程的数据段+栈段空间耗尽时,brk系统调用给该进程分配一个更大的内存空间,并将原来空间中的数据复制至新分配的内存空间,释放原来的内存空间,并通知内核映射新分配的内存段。
修改内存分配: ? 修改/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操作系统的物理内存数量有关。

操作系统课程设计 内存管理

原文:https://www.cnblogs.com/wwqdata/p/13232848.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!