在创建物理内存分配器来编写内核时,我试图创建一个数组struct page_frame
,其中阵列的每个成员都代表给定的物理4KB内存块。在物理内存中动态创建数组
目前内核加载到物理存储器地址从到0x000000000
physfree
剩余块从physfree
到physEnd
是空闲块。我想physfree
之后创建我struct page_frame
阵列和保持阵列中存储器的每个块中的元件从0
到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++;
}
如何在我的内核顶部的地址上动态创建这样一个数组,以便我可以跟踪我的空闲物理块?我试图利用指向memBlocks
结构的指针,并将其设置为kernbase + physfree
(因为虚拟内存当前已启用)后的地址。然后我想要数组中的每个元素只占用sizeof(struct page_frame)
。我是否正确访问memBlocks
的元素,方法是将它们编入索引memBlocks[i]
?还是有更好的方法来创建这样一个数组?
不知道为什么,这个问题正在向下投了反对票。如果有一个地方可以改进,并且您投票了,请发表评论。 – sreisman
在您的代码示例中,实际上_not没有按照需要工作?请更清楚地说明预期结果和目前结果。还请添加'memBlocks'声明。 –