在创建物理内存分配器来编写内核时,我尝试创建一个 struct page_frame 数组,其中数组的每个成员代表给定的物理 4KB 内存块。
当前内核已加载到物理内存中,从地址0x000000000
到physfree
从physfree
到physEnd
的剩余 block 是空闲 block 。我想在 physfree
之后创建我的 struct page_frame
数组,并为内存中从 0
到 的每个 block 维护数组中的一个元素>physEnd
因此,该数组中的索引数应为 physEnd/4096。问题是,physEnd 直到运行时才知道,所以我不确定如何动态分配这样的数组。目前,以下内容不会填充 struct page_frame
数组,因为只有第一个元素 memBlocks[1]
显示为正确的 struct page_frame
其余部分未正确初始化。
struct page_frame* memBlocks;
memBlocks = (struct page_frame*)kernbase + physfree;
int count = 0;
for(char* i = (char*) 0; i < (char*) ALIGNUP(physEnd)-PAGESIZE; i+=PAGESIZE)
{
//The new page frame to be placed in array
struct page_frame insert;
insert.used = 1;
memBlocks[count] = insert;
count++;
}
如何在内核顶部的地址动态创建这样的数组,以便我可以跟踪我的空闲物理 block ?我正在尝试利用指向名为 memBlocks
的结构的指针,并将其设置为内存中 kernbase + physfree
之后的地址(因为当前启用了虚拟内存)。然后我希望数组的每个元素只占用 sizeof(struct page_frame)
。我是否可以通过将 memBlocks[i]
索引来正确访问 memBlocks
的元素?或者有更好的方法来创建这样的数组吗?
最佳答案
请记住,在 C 中,结构体框架
数组与指向结构体框架
的指针非常相似。至少如果您了解 C 的指针算术,最简单的做法就是简单地使用指向“数组”开头的指针。
给定structframe *memBlocks
,您可以通过memBlocks + i
访问第i个 block
关于c - 在物理内存中动态创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165733/