我正在写一个小爱好操作系统作为学习经验。它的目标是32位x86架构。
我正处于需要创建初始page_directory的位置,因此我可以启用分页。此时,未启用分页(以及VM)。
我有一个保留4kb未使用内存的函数,并返回该内存块的起始地址。
我想在上述函数返回的内存位置创建一个数组page_dir
(由1024 int组成)。
我理解指针的基本(我认为),但我无法弄清楚如何做到这一点。
如何在运行时返回的物理地址上定义数组page_table
?
答案 0 :(得分:2)
如果我理解你想要将函数返回的地址视为整数数组的基地址 如果上述假设是正确的,您可以使用2种方式,一个演员或中间变量 使用演员:
void *pd = GetPhysicalAddress();
...
for (i=0; i<1024; i++)
((int *)pd)[i] = SomeValue(); //cast for each access
或者:
int *pd = (int *)GetPhysicalAddress(); //Cast only on assignement
...
for (i=0; i<1024; i++)
pd[i] = SomeValue();
答案 1 :(得分:0)
通常,您不能对实际的物理地址执行此操作,但您可以使用mmap
获取指向虚拟地址的内存的指针。映射物理地址(如设备特定内存)通常使用特定于操作系统的API在设备驱动程序中完成。
编辑:根据您提供的额外信息,这不是一般案例! 为了在分页建立之前有一个指向物理地址的指针,我想你可以使用它:
p = (void*)0x00010000;
或者您想要使用的任何实际物理地址。
即使未设置分页,您可能已经处于带分段的保护模式,因此它实际上取决于DS
分段的设置方式。
我建议您研究实际操作系统的引导程序,或者只研究以您所指的模式执行的引导程序。