网站大量收购独家精品文档,联系QQ:2885784924

Linux存储管理Linuxmemorymanagement分解.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux memory management i386保护模式的分段与分页 Linux分页 线性地址空间分布 用户地址空间 内核地址空间 空闲物理内存管理 内核物理内存分配接口 共享存储 Intel x86保护模式的地址映射 Intel x86的分段 Linux在i386上的分页 页目录表项和页表项 Linux的线性地址空间分配 4G线性地址空间分为用户空间和内核空间,内核空间又分为物理内存区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区 线性地址从00xBFFFFFFF的3G为用户和内核共同访问,0xC0000000以上的1G由内核独享,用户态无法访问 因此所有进程的页目录的后四分之一均指向内核页目录的相应目录项。为减小同步的开销,内核只在处理page_fault时同步用户进程的页目录项,因此页目录项不一致的情况是有的 Linux的线性地址空间分配 Linux的线性地址空间分布 Linux的用户地址空间分布 利用/proc查看进程的用户地址空间 文件映射举例 #include unistd.h #include sys/mman.h #include sys/types.h #include sys/stat.h #include fcntl.h /* mmap.c - a program that uses mmap to copy itself to stdout */ int main() { struct stat stat; int i, fd, size; char *bufp; /* open the file get its size*/ fd = open(./mmap.c, O_RDONLY); fstat(fd, stat); size = stat.st_size; /* map the file to a new VM area */ bufp = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0); /* write the VM area to stdout */ write(1, bufp, size); } 用户地址空间管理-虚存段VMA Linux的用户地址空间分布 进程描述符中的struct mm_struct *mm用来管理已分配给该进程的线性地址空间 每一个连续的线性地址区间由一个vm_area_struct管理,简称vma mm中的vma按地址排序由线性链表连接起来,当vma的数量相当大的时候启用avl树,与线性链表同时管理vma以提高访问效率 随着vma的动态改变,vma之间存在归并和拆分等操作 分配vma并不立即分配页帧 Linux的内核地址空间分布 物理映射区最大为896M,如果实际物理内存不足896M,则该区与实际物理内存大小相等 两个隔离区的作用是防止越界造成的致命损害 Linux的物理内存映射 一般情况下,对物理内存的访问可通过预映射机制方便的实现,Linux保留了128M的虚拟内存映射区,因此最多可以有1G-128M=896M的物理内存直接映射到0xC0000000开始的一段内核空间中 当物理内存大于896M时,超过物理区的那部分内存称为高端内存,内核在存取高端内存时必须将它们映射到高端页面映射区,长度为4M的高端内存映射区正好占用1帧页表所表示的物理内存总量,它可以缓冲1024个高端页面的映射 初始化后的物理内存分布 物理页管理(mem_map表) 空闲物理页管理 bitmap表 在物理内存低端,紧跟mem_map表的bitmap表以位示图方式记录了所有物理内存的空闲状况。与mem_map一样,bitmap在系统初始化时由free_area_init()函数创建(mm/page_alloc.c)。 与一般性位图不同,bitmap表分割成NR_MEM_LISTS组。 buddy算法 将空闲内存管理为一对对的伙伴;(2^k)页面大小 伙伴算法与空闲物理页位图 内存分配的三种内核接口 __get_free_pages:从buddy system中申请大小为2^k个page的连续的物理页帧,分配内核空间的物理映射区中的一段连续的线性地址 kmalloc(kfree):从slab cache中申请连续的物理内存,通常用于专用对象 vmalloc(vfree):申请线性地址连续的内存空间,分配内核空间的虚拟内存映射区中的一段连续的线性地址,而实际对应的物理地址可以是不连续的,为检测越界,vmalloc的区域之间是有空洞的,且为保证效率,页面不会被swap out 共享存储 * * 段选择子16bits 段内偏移32bits

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档