欢迎来到天天文库
浏览记录
ID:49376572
大小:1.21 MB
页数:80页
时间:2020-02-05
《Linux存储管理1.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第4章Linux存储管理Linux存储管理的功能虚拟存储器功能:为每个进程提供4GB的虚拟内存空间存储保护:各个进程的虚拟存储空间彼此独立、相互隔离存储共享:进程之间可以共享存储器7.1.1Linux分段机制linux只定义了四种段寄存器的取值内核代码段0x10内核数据段0x18用户代码段0x23用户数据段0x28运行级别分为两级:0和3GDT初始化信息在arch/i386/kernel/head.S中4G线性地址空间分为用户空间和内核空间,内核空间又分为物理内存区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区线性地址从0x00000000到0xBFFFFFFF的3G为用户和
2、内核共同访问,0xC0000000以上的1G由内核独享,用户态无法访问因此所有进程的页目录的后四分之一均指向内核页目录的相应目录项。为减小同步的开销,内核只在处理page_fault时同步用户进程的页目录项,因此页目录项不一致的情况是有的Linux的线性地址空间分配两级页表结构…………Linux在i386上的分页线性地址物理地址32bitspmd_t*dir+页帧首地址20bits<3、(address)>>PMD_SHIFT)&(PTRS_PER_PMD-1))pgdpte总之,存储器只有一个页目录,有1024个页目录项,每个页目录项又含有1024个页面项,因此,存储器一共可以分成1024×1024=1M个页面。由于每个页面为4K字节,所以,存储器的大小正好(最多)为4GB。Intelx86保护模式的地址映射段选择子16bits段内偏移32bits页内偏移12bits物理地址32bits页目录索引10bits页表索引10bits逻辑地址线性地址物理地址GDTLDTpgd、pte存在位读写位用户态/核心态访问位表示是否采用写透方式表示是否启用高速缓存访问位已写标志位页大小,44、K(0)或4M(1),只适用于页目录表项页目录表项和页表项段访问属性:8bitPDPLSEC/EDR/WA76543210P:存在位,P=1表示段在物理存储器中,P=0,段不在物理存储器中DPL:段的访问特权级。访问0,1,2,3四级S:段种类,S=0:系统段描述符,S=1为常规段描述符E:执行位。E=0数据段,E=1代码段C/ED位:数据段时,ED=0向下扩展,ED=1向上扩展R/W:读写位A:访问位。A=1访问过。A=0尚无访问linux三级分页结构三级分页结构是Linux提供的与硬件无关的分页管理机制。当Linux实际运行在某种机器上时,需要按照该种机器硬件的存储管理机制来实现分页存储管5、理x86机器:两级分页ALPHA、SPARC:三级分页Linux内核中针对不同的机器配备了不同的分页结构的转换方法。系统调用内存映射模块(mmap)内存管理模块(core)结构特定模块MMU交换控制模块(swap)Linux的存储管理思想说明:上图是虚拟内存管理的程序模块,实现代码大部分放在/mm目录下。内存映射模块(mmap)负责把磁盘文件或交换空间文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。交换模块(swap)负责控制内存内容的换入和换出。采用交换机制,从主存中淘汰最近没被访问的逻辑页,保存近来访问过的逻辑页。核心内存管理模块(core)负责核心内存管理功能,如页的分配、回6、收和请求调页处理等功能,这些功能将别的内核子系统(如文件系统)所使用。结构特定的模块负责给各种硬件平台提供通用接口,主要完成主存初始化工作及对页面故障的处理。这个模块是实现虚拟内存的物理基础。Slab分配器思想小对象的申请和释放通过slab分配器来管理。slab分配器有一组高速缓存,每个高速缓存保存同一种对象类型,如i节点缓存、PCB缓存等。内核从它们各自的缓存种分配和释放对象。每种对象的缓存区由一连串slab构成,每个slab由一个或者多个连续的物理页面组成。这些页面种包含了已分配的缓存对象,也包含了空闲对象。创建slab对象过程Slab分配器调用Kmem_cache_grow()函数为缓存7、分配一个新的slab对象。调用kmem_getpages()获取一组连续内存页框;调用kmem_cache_slabmgamt()分配一个新的slab数据结构;调用kmem_cache_init_objs()为新slab中包含的所有对象定义构造方法;调用kmem_slab_link_end()将新的slab插入到这个高速缓存的双向链表的末尾。6.6.3空闲页面管理-Buddy算法把内存中的所有页面
3、(address)>>PMD_SHIFT)&(PTRS_PER_PMD-1))pgdpte总之,存储器只有一个页目录,有1024个页目录项,每个页目录项又含有1024个页面项,因此,存储器一共可以分成1024×1024=1M个页面。由于每个页面为4K字节,所以,存储器的大小正好(最多)为4GB。Intelx86保护模式的地址映射段选择子16bits段内偏移32bits页内偏移12bits物理地址32bits页目录索引10bits页表索引10bits逻辑地址线性地址物理地址GDTLDTpgd、pte存在位读写位用户态/核心态访问位表示是否采用写透方式表示是否启用高速缓存访问位已写标志位页大小,4
4、K(0)或4M(1),只适用于页目录表项页目录表项和页表项段访问属性:8bitPDPLSEC/EDR/WA76543210P:存在位,P=1表示段在物理存储器中,P=0,段不在物理存储器中DPL:段的访问特权级。访问0,1,2,3四级S:段种类,S=0:系统段描述符,S=1为常规段描述符E:执行位。E=0数据段,E=1代码段C/ED位:数据段时,ED=0向下扩展,ED=1向上扩展R/W:读写位A:访问位。A=1访问过。A=0尚无访问linux三级分页结构三级分页结构是Linux提供的与硬件无关的分页管理机制。当Linux实际运行在某种机器上时,需要按照该种机器硬件的存储管理机制来实现分页存储管
5、理x86机器:两级分页ALPHA、SPARC:三级分页Linux内核中针对不同的机器配备了不同的分页结构的转换方法。系统调用内存映射模块(mmap)内存管理模块(core)结构特定模块MMU交换控制模块(swap)Linux的存储管理思想说明:上图是虚拟内存管理的程序模块,实现代码大部分放在/mm目录下。内存映射模块(mmap)负责把磁盘文件或交换空间文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。交换模块(swap)负责控制内存内容的换入和换出。采用交换机制,从主存中淘汰最近没被访问的逻辑页,保存近来访问过的逻辑页。核心内存管理模块(core)负责核心内存管理功能,如页的分配、回
6、收和请求调页处理等功能,这些功能将别的内核子系统(如文件系统)所使用。结构特定的模块负责给各种硬件平台提供通用接口,主要完成主存初始化工作及对页面故障的处理。这个模块是实现虚拟内存的物理基础。Slab分配器思想小对象的申请和释放通过slab分配器来管理。slab分配器有一组高速缓存,每个高速缓存保存同一种对象类型,如i节点缓存、PCB缓存等。内核从它们各自的缓存种分配和释放对象。每种对象的缓存区由一连串slab构成,每个slab由一个或者多个连续的物理页面组成。这些页面种包含了已分配的缓存对象,也包含了空闲对象。创建slab对象过程Slab分配器调用Kmem_cache_grow()函数为缓存
7、分配一个新的slab对象。调用kmem_getpages()获取一组连续内存页框;调用kmem_cache_slabmgamt()分配一个新的slab数据结构;调用kmem_cache_init_objs()为新slab中包含的所有对象定义构造方法;调用kmem_slab_link_end()将新的slab插入到这个高速缓存的双向链表的末尾。6.6.3空闲页面管理-Buddy算法把内存中的所有页面
此文档下载收益归作者所有