摘要: 其中介绍了虚拟内存的机制以及mmap系统调用的实现。mmap允许直接将设备内存映射到用户进程的地址空间中。物理内存的管理,包括缓存的分配及回收,请页机制,交换空间等。1)交换模块(swap)这个模块负责控制内存内容的换入换出,它通过替换机制,使得物理内存的页框(RAM页)中保留有效的逻辑页,即从主存... 阅读全文
posted @ 2015-04-29 11:19 Jessica程序猿 阅读(1266) 评论(0) 推荐(0) 编辑
摘要: 内核逻辑地址和内核虚拟地址的区别**********************************************************************1)凡是通过MMU页表访问的地址都叫虚拟地址,而一旦启用了MMU,那CPU发出的所有地址都是虚拟地址内核用到的地址范围是3G-4... 阅读全文
posted @ 2015-04-29 10:22 Jessica程序猿 阅读(1522) 评论(0) 推荐(0) 编辑
摘要: 关于虚拟内存有三点需要注意:4G的进程地址空间被人为的分为两个部分--用户空间与内核空间。用户空间从0到3G(0xc0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。例外情况只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可... 阅读全文
posted @ 2015-04-29 10:19 Jessica程序猿 阅读(11141) 评论(1) 推荐(2) 编辑
摘要: kmalloc()和vmalloc()介绍kmalloc()用于申请较小的、连续的物理内存1. 以字节为单位进行分配,在中2. void *kmalloc(size_t size, int flags) 分配的内存物理地址上连续,虚拟地址上自然连续3. gfp_mask标志:什么时候使用哪种标志?如... 阅读全文
posted @ 2015-04-29 10:13 Jessica程序猿 阅读(16881) 评论(0) 推荐(0) 编辑
摘要: 在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的... 阅读全文
posted @ 2015-04-29 10:12 Jessica程序猿 阅读(1197) 评论(0) 推荐(0) 编辑
摘要: 高端内存是指物理地址大于 896M 的内存。对于这样的内存,无法在“内核直接映射空间”进行映射。为什么? 因为“内核直接映射空间”最多只能从 3G 到 4G,只能直接映射 1G 物理内存,对于大于 1G 的物理内存,无能为力。 实际上,“内核直接映射空间”也达不到 1G, 还得留点线性空间给“内... 阅读全文
posted @ 2015-04-29 10:11 Jessica程序猿 阅读(3307) 评论(1) 推荐(0) 编辑