NJU-ProjectN/nemu

有关pmem_read的问题

Fros1er opened this issue · 4 comments

nemu/src/memory/paddr.c

Lines 27 to 33 in 32c0ce5

uint8_t* guest_to_host(paddr_t paddr) { return pmem + paddr - CONFIG_MBASE; }
paddr_t host_to_guest(uint8_t *haddr) { return haddr - pmem + CONFIG_MBASE; }
static word_t pmem_read(paddr_t addr, int len) {
word_t ret = host_read(guest_to_host(addr), len);
return ret;
}

这里把物理地址加了一个CONFIG_MBASE的偏移,但是物理地址应该是从0开始的吧。。感觉应该在虚拟地址那里做这个操作?

btw,我不是nju的,只是在随便写写

内存的物理地址不一定是从0开始的, 取决于内存位于物理地址空间中的哪一段.

内存的物理地址不一定是从0开始的, 取决于内存位于物理地址空间中的哪一段.

明白了,谢谢。还有一个问题,这个过程是由cpu规定的吗?如果是的话,os是不是某种程度需要上对每一家的cpu做适配?

你可以搜索一下cpu reset vector, 了解更多的相关内容.

其实我想问的是,操作系统该如何管理分布在物理地址空间中不连续分布的内存和mmio设备。不过在搜索的时候想起来了,我问的那个东西是device tree。
再次感谢您的解答。