Linux系统下内存申请应用的方法原理总结
1. 地址空间的管理
物理地址都是有内核管理的, node-->zone-->mem_map-->page, 所有的物理页面都在mem_map数组中的页帧对应, 然后不同的page有分为DMA,normal,highmem三个zone。
内核线性地址空间, 实际上只是低端内存才有线性地址,0---896MB部分。
内核虚拟地址, 低端内存的虚拟地址与线性地址是一样的。 高端内存只有在映射了以后才有虚拟地址
用户空间地址, tast_struct ---> mmap --> mm_struct ---> vm_area_struct
2.内存的申请或使用
物理内存的分配, 在内核中最终都要调用__alloc_pages().它是最核心的分配函数,申请大小最大不超过2的MAX_ORDER次幂,在现在好像最大定义为4MB。
线性地址, kmalloc和get_free_pages,线性地址, 对应的物理内存就是低端内存,kmalloc是基于slab的分配技术, 最大不能超过128KB。
虚拟地址, vmalloc申请, 他只是在内核中建立类似与用户空间的vm_area的一个虚拟内存空间到vmlist中, 最终的物理内存分配还是基于缺页的。
用户空间的虚拟内存, malloc之类的, 最终在内核中都是do_map()和do_brk()。实际上也只是建立了一块虚拟空间,最终的物理内存还是在缺页异常时分配的。
3. 内存的交换问题
在page结构和用户层的vm_area_struct结构中, 都包含locked和reserved标志。通过合适的途径设置这些标志, 可以是页面锁存在物理内存中, 不被交换出去。
4. 设备内存可以通过ioremap映射到内核虚拟地址空间, 也可以通过mmap方法映射到用户空间。
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
赛门铁克推出新版BackupExec System Recovery 2010(BERS 2010),支持Linux系统数据备份还原功能,并提供免费BERS Management Solution 2010管理工具。
新版BERS 2010可支持微软Exchange、SharePoint、Active
Directory、Windows Server、SQL
Server与VMwareESX虚拟机提供自动化排程的数据备份、还原功能。除更新微软 ......
俗称“脚本小鬼”的家伙是属于那种很糟糕的黑客,因为基本上他们中的许多和大多数人都是如此的没有技巧。可以这样说,如果你安装了所有正确的补丁,拥有经过测试的防火墙,并且在多个级别都激活了先进的入侵检测系统,那么只有在一种情况下你才会被黑,那就是,你太懒了以至没去做该做的事情,例如,安装BIND的 ......
第3章 Linux基本配置
安装完操作系统后,常常需要做一些基本配置,以满足自己的需求。随着Linux桌面的日趋成熟和人性化,这种所谓的“基本配置”已经越来越少了。本章选择了入门用户最常问到的一些问题,以便读者能够尽快上手。 ......