Chinaunix首页 | 论坛 | 博客
  • 博客访问: 309207
  • 博文数量: 33
  • 博客积分: 586
  • 博客等级: 中士
  • 技术积分: 494
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-27 14:05
个人简介

衡铁刚 1)2011-2013:Alibaba MySQL DBA 2)2014-至今: Alibaba 数据库PD

文章分类

全部博文(33)

文章存档

2016年(1)

2015年(10)

2013年(5)

2012年(17)

我的朋友

分类: Mysql/postgreSQL

2012-10-12 22:00:34

kernel学习中,边学边记录一下,持续更新中

用户空间中进程的内存,由进程可寻址的虚拟内存组成,一般为32位或64位的平坦地址空间,但不是所有虚拟地址都可以访问的,其中可以被访问的合法地址空间称为内存区域,内存区域有对进程可读、可写、可执行属性,包括代码段、数据段、bss段、进程用户空间栈、共享库、内存映射文件、共享内存段、匿名内存映射,当一个进程的地址空间与另一个进程的地址空间有相同的内存地址,称为线程(是否共享地址空间是进程和线程的唯一区别)
                                                                                                              
内存描述符(mm_struct)结构体表示进程的地址空间,包含和进程地址空间有关的全部信息(mm_users、mm_count、mmlist、mmap、mm_rb,其中mmap和mm_rb指向全部内存区域对象,前者使用链表,后者使用红黑树)                                                                                                                                                                                                                                                                                 
  • 进程描述符(task_struct)中mm域存放着进程使用的内存描述符                                                                                                                                           
内核线程没有进程地址空间,不需要访问任何用户空间的内存,当需要访问内核内存时,直接使用前一个进程的内存描述符       

虚拟内存地址(VMA)由vm_area_struct结构体描述了指定地址空间内连续区间上的一个独立内存范围,作为一个单独的内存对象管理,拥有一致属性,vm_mm域指定了相关的mm_struct结构体,vm_flags包含了内存区域的整体信息(如vm_shared、vm_reserved、vm_read等)

cat /proc/n/maps (和pmap)都可以查看给定进程的内存空间和其中所含的内存区域
输出格式:
开始-结束 访问权限 偏移 主设备号:次设备号 i节点 文件,mapped表示进程的全部地址空间,writable/private表示可写和私有的

do_mmap()函数创建一个新的线性地址区间,由file指定文件,文件中从偏移offset处开始,长度为len字节的范围内的数据,指定了文件名和偏移量(文件映射),为null(匿名映射

linux中使用三级页表来完成地址转换(虚拟地址-物理地址),顶级页表(页全局目录PGD)、二级页表(中间页目录PMD),最后一级页表(页表)

翻译后缓冲器(TLB)将虚拟地址映射到物理地址的硬件缓存
阅读(1613) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

佩恩_六道2012-10-30 00:58:27