本帖最后由 liu090 于 2011-03-18 10:37 编辑 我想从mem_map 这个struct page 数组里根据 flag 来判断那些 page 是 free 的,那些不是 除了PG_buddy ,我发现还有很多flag 是0x0 的,这样的flag 是 free 还是非free 的? 另外 除了PG_buddy (0x40000) 是free 还有那种flag 也表示free ? 谢谢那位了解的兄弟帮忙看下
我看《linux内核API完全参考手册》时, 说到mem_map数组的起始地址为0xC1000000, 可是我用它的例子,得出的mem_map数组的起始 却是0,请问mem_map数组是什么? 难道说它的起始地址一定是0xC1000000吗? 为什么我的却不是?
本帖最后由 xiongweixie 于 2013-04-10 04:42 编辑 先在想遍历mem_map数组的内容。 有两个问题想请教大家, 1. 我在module中使用mem_map, 写了extern struct page* mem_map. 但是insmod 时 出现问题。提示mem_map 无法识别的符号。 检查了 system.map 里面的mem_map 不在了。难道是因为装了xen的缘故? 如何知道mem_map 的大小? 2. 如果不通过mem_map 还有什么其他办法 遍历 所有的page么?
大家好: 请问一下关于mem_map数组的初始化的过程,这是一个全局的数组,它是在内核中初始化的,但是那个时候内核不知道页面的多少,经过计算后才能知道有多少可用的页框,所以可以断定的是mem_map数组不是一个静态的数组,通过查看源代码证实了我的想法,那么如果是动态初始化这个数组的,请问在哪初始化的?
虽然不是关于linux安装的,但是grub的问题我想这里应该有高手,是这样的:我按网上教程做VHD的内存系统,现在要在grub中加载装有win7系统的vhd文件到内存,用map --mem命令,但是显示一些信息,大意是侦测到分区表里写的cylinder数比实际的多一个,然后就会有inconsistent filesystem structure错误不能继续。。。。感觉可能和MBR有关,求解决。vhd用win7自带的vhd启动功能可以正常启动无问题。
在这个宏里: pfn_to_page(pfn) (mem_map + (pfn)) 用到了mem_map这个全局变量,但是没有找到它的初始化代码? 在CONFIG_DISCONTIGmem定义的情况下,还有这个定义: #define pfn_to_page(pfn) \ ({ \ unsigned long __pfn = pfn; \ int __node = pfn_to_nid(__pfn); \ &node_mem_map(__node)[node_localnr(__pfn,__node)]; \ }) 我在看free_area_init_node函数的时候碰到的,有点晕!请大牛指点~
mem_map不是一个page类型的数组吗?管理所有的物理内存,请问mem_map数组在哪个文件的哪个函数里面初始化的?一直没找到。 或者物理内存的zone、node、mem_map数组的初始化过程是啥样的?
mem_map指向page数组,那个page数组的地址不是固定的?即寻找物理页面的地址是通过,例如&page[0]-PAGE_OFFSET就是对应物理地址第0页。还是通过page[0]数组的下标0来表示物理地址的第0页的? [ 本帖最后由 xs3c 于 2009-10-21 08:58 编辑 ]