- 论坛徽章:
- 0
|
说实在的, 看了一会儿, 不知道表述了什么意思.
但有几个说法我认为不正确.
1. 用户空间一次分配4M的空间分配不到?
在有mmu的CPU中, 400M我都分配过. 除非内核的VM分配限制启用,且用户空间分配的虚存 > 1/2物理内存+swap空间大小, 这是默认设置.
不知道你这个结论怎么得出来的. 你仔细看一下Linux libc库和内核如何分配用户空间内存就知道了. 我上面也说了, lazy tlb是内核分配虚存的策略之一.
至于在内核空间一次分配 >4M 物理内存, 这种代码我还没见过, 呵呵.
2. 你一直强调你在用户空间不用malloc, 那是我的理解错了, 不过这也和你顶楼的说法相悖.
如果你用户空间不用malloc, 直接访问物理内存, 也不用内核帮你分配物理内存. 那问题同样存在, 你如何知道你用的哪个物理页, 内核没有自己使用, 或者内核没有分配给其它用户空间任务??
我只知道, Linux物理内存是否被占用, 在物理内存中是不会有记录的, 这些信息记录在VM的低12位地址中. 内核中, 在flat mode的内存管理中, 内核只是用一个bitmap + 数组来管理物理内存.
3. 你说强调的电信设备对内存要求很高, 恰好,我一直在作电信设备, 应该算是核心网级别的. 我只知道这些和硬件总线有关, 向Linux这样的操作系统, 中间隔了一层虚存管理, 确实不如直接使用物理地址方便. 如果是这样,我们一般必须在内核中将虚存关闭, 然后CPU也关闭mmu. 就是把CPU当一个没有mmu的硬件来使用, 但这情况中,我们一般不用Linux, 因为Linux涉及到libc库的问题. 工作量很大. 我个人认为, 向你上面那样简单的直接访问物理地址, 想提高效率的做法, 是有错误的.
其它的东西, 我看不出来和这个主题有什么关系.
[ 本帖最后由 xiaozhaoz 于 2006-4-14 09:24 编辑 ] |
|