- 论坛徽章:
- 0
|
原帖由 思一克 于 2009-5-21 15:41 发表
不是你理解的意思。或说你理解的仅仅是一部分。
你想,假如我机器内存是512M, 是否全部都被内核固定映射了? 是的。因为内核要管理他们。
这其中一部分是内核自己需要的。不换出。
还有一部分是为了给用户程序用的。那就要换出了。换出了的页还是在内核的固定映射中。还是被管理的。
换出是换出的物理页中的内容而不是物理页本身。物理页本身是换不出的。除非将内存用手拔掉才是真正的换出。
...
不能换出和固定影射是两回事,这个我理解。
非固定映射就是要解决物理地址不连续的问题。比如用户需要的内存,还有vmalloc需要的。
固定映射的物理上是连续的。
vmalloc得到的物理页同时有2个虚拟地址。一个是固定映射地址。一个是非固定映射地址。
也就是说,64位上没有Zone Highmem,vmalloc分配的内存应该来自与zone_normal, 而且不保证连续,所以这部分内存地址又被影射成一段表面上连续的虚拟地址空间,这个区间专为不连续内核内存区域保留。
在此之前,没听说过固定影射和非固定影射这些名词。现在终于理解你说的非固定影射含义了。
1. 那用户内存算什么?它也是有两个虚拟地址,一个是内核里映射的固定地址,另一个是用户空间的虚拟地址,它属于非固定影射吗?
2. 还有个疑问,vmalloc既然用的不多,那 Linux怎么有效管理内存碎片?
如果非固定影射内存是指除了内核虚拟地址以外又影射了多次的内存那我就觉得,可不可以换出要取决于它再次被映射入的空间允许不允许换出了。
例如,前面说vmalloc的内存可以page_fault,那就意味着可以换出。如果内核分配的内存使用vmalloc实际上性能也不会太好。
其实作为内核内存,应该可以全部都实现成不可换出的内存,尤其是64位内核地址空间,干嘛要实现换出呢? |
|