MIT6.S081学习总结-lab5:lazy page allocation

这篇博客总结了MIT6.S081实验五的内容,即懒惰页面分配。讨论了如何消除sbrk()中的内存分配,实现延迟分配,以及在处理页面错误时的技巧。介绍了在trap.c的usertrap函数中处理缺页中断的方法,以及在vm.c的uvmumap函数中对未映射页的处理。还涵盖了实验室测试和异常情况处理,如非法虚拟地址和父子进程页表拷贝。最后,强调了虚拟内存的隔离性和间接性优势,以及页面错误处理所需的信息。
摘要由CSDN通过智能技术生成

lab5 是lazy page allocationi相关,主要解决页面错误问题。O/S可以对页表硬件使用的许多巧妙技巧之一是延迟分配用户空间堆内存。Xv6应用程序使用sbrk()系统调用向内核请求堆内存。在我们给出的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。内核为一个较大的请求分配和映射内存可能需要很长时间。例如,考虑一个gb由262,144 4096字节的页组成;即使每一种都很便宜,这也是一笔巨大的投资。此外,一些程序分配的内存比实际使用的要多(例如,实现稀疏数组),或者在使用之前就分配好内存。为了让sbrk()在这些情况下更快地完成,复杂的内核会延迟分配用户内存。也就是说,sbrk()不分配物理内存,而只是记住分配了哪些用户地址,并在用户页表中将这些地址标记为无效。当进程第一次尝试使用惰性分配内存的任何给定页面时,CPU会生成一个页面错误,内核会通过分配物理内存、将其置零和映射来处理该错误。在这个实验中,您将向xv6添加这个惰性分配特性。

Eliminate allocation from sbrk()

sbrk里只只增加p->sz不分配物理内存

实现:

在这里插入图片描述

Lazy allocation

在usertrap里添加缺页中断时的处理,主要是对缺页的虚拟内存增加映射

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值