rCore_tutorial_doc
rCore_tutorial_doc copied to clipboard
动态内存分配 · GitBook
https://rcore-os.github.io/rCore_tutorial_doc/chapter4/part2.html
Box<T> 或许应该理解为 C++ 中的 std::unique_ptr<T> 更合适?
不是很懂,这个 frame_allocator 和 dubby_allocator 不是重合了吗?为啥源代码中有两个?我想来想去全局分配都是通过 dubby_allcator,和 frame_allocator 好像没有关系,那么我是不是可以把之前的 frame_allocator 给删掉啊?
不是很懂,这个 frame_allocator 和 dubby_allocator 不是重合了吗?为啥源代码中有两个?我想来想去全局分配都是通过 dubby_allcator,和 frame_allocator 好像没有关系,那么我是不是可以把之前的 frame_allocator 给删掉啊?
frame_allocator 用于管理物理页帧,存放页表的应用的数据;而 buddy_allocator 用于内核的动态内存分配,比如支持 Box<T>,Vec<T> 等。它们的功能不同,管理的内存区域也不同。详见最新版文档:
不是很懂,这个 frame_allocator 和 dubby_allocator 不是重合了吗?为啥源代码中有两个?我想来想去全局分配都是通过 dubby_allcator,和 frame_allocator 好像没有关系,那么我是不是可以把之前的 frame_allocator 给删掉啊?
frame_allocator 用于管理物理页帧,存放页表的应用的数据;而 buddy_allocator 用于内核的动态内存分配,比如支持
Box<T>,Vec<T>等。它们的功能不同,管理的内存区域也不同。详见最新版文档:
谢谢你,我看了两个小时,有一点粗浅的理解还请斧正:
frame_allocator 是用来管理所有可用内存的页框的(但是在这个章节里我并没有看到它的应用?它好像就初始化了之后就放在一边了?)然后我们分配了一个静态的内存池,然后在上面为基础来支持为内核分配动态空间以满足内核需要(换句话说 dubby_allocator 是用来给内核分配空间的,和 frame_allocator 无关)。
| kernel | others |
| data | code | heap | applications |
那么内存分布就应该如上,那么不同的 application 的进程所占用的内存又是谁来管理的?是需要内存的 frame_allocator 对比需要的内存空间和页的 ceiling 来进行分配对应页框吗(通过更改页表来减少外碎片?)那么进程对应的堆的动态分配又是谁来分配的?因为涉及到堆的内部,是调用内核的 dubby_allocator 来进行分配的吗?如果堆不够了,那么对堆的扩容是用 frame_allocator + 更改页表来实现的对吗?
谢谢~
@PeterlitsZo 不是很懂,这个 frame_allocator 和 dubby_allocator 不是重合了吗?为啥源代码中有两个?我想来想去全局分配都是通过 dubby_allcator,和 frame_allocator 好像没有关系,那么我是不是可以把之前的 frame_allocator 给删掉啊?
frame_allocator分配的是内核结束后空闲的物理内存,以页为单位,可以给以后的应用需要存放数据或者页表为内容。dubby_allcator分配的内核里的bss段的内存,以字节为单位,这个是为了支持内核使用malloc分配指定bytes size的内存,我的理解是这样