内存管理之linux内存管理

上传人:lizhe****0001 文档编号:46993198 上传时间:2018-06-29 格式:PDF 页数:84 大小:15.57MB
返回 下载 相关 举报
内存管理之linux内存管理_第1页
第1页 / 共84页
内存管理之linux内存管理_第2页
第2页 / 共84页
内存管理之linux内存管理_第3页
第3页 / 共84页
内存管理之linux内存管理_第4页
第4页 / 共84页
内存管理之linux内存管理_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《内存管理之linux内存管理》由会员分享,可在线阅读,更多相关《内存管理之linux内存管理(84页珍藏版)》请在金锄头文库上搜索。

1、1张惠娟 副教授 hjzhanghjzhanghjzhanghjzhang seiseiseisei. . . .ecnuecnuecnuecnu. . . .eduedueduedu. . . .cncncncnLinux内存管理2内容 i386存储管理单元 Linux存储管理思想 物理内存空间管理 进程虚拟空间管理 请页机制 交换空间管理 缓冲机制3MMU分段机制i386的存储管理单元4i386的存储管理单元MMU MMU由一个或一组芯片组成,其功能是把虚地址 映射为物理地址,即地址转换。 80386以两级方式实现地址转换:第一级使用段机制,第二级使用分页机制。 在80386上,分页机制是

2、支持虚拟存储器的最佳 选择。段机制使用可变大小的块,使段机制较适 合处理复杂系统的逻辑分区。5i386的存储管理单元6分段机制 段描述符描述了段的基地址、界限及保护属性,是一个8字节的数据结构,存放在段描述符表中。i386的存储管理单元78上图说明 从图中可以看出,一个段描述符指出了段的32位 基地址和20位段界限(即段长)。 第6个字节的G位是粒度位,当G=0时,段长的表 示格式为字节长度,即一个段最长可达1M字节。 当G=1时,段长表示段以4K字节为一页的页数目, 即一个段最长可达1M*4K=4G字节。 D表示缺省操作数大小,D=0,操作数为16位,如 果D=1,操作数为32位。i386的

3、存储管理单元9描述符表 在分段机制中,系统维护三种段表,称为描述符 表,即全局描述符表、局部描述符表和中断描述 符表。 描述符表本身占据的字节数为8的倍数,空间大 小在8个字节(至少含一个描述符)到64K字节 (至多含8K个描述符)之间。i386的存储管理单元10全局描述符表(GDT)全局描述符表包含着系统中所有任务都可 用的那些描述符。 局部描述符表(LDT)局部描述符表LDT包含了与一个给定任务有 关的描述符,每一个任务都有一个各自LDT。i386的存储管理单元11 选择器 实模式下,段寄存器存储的是真实段地址 保护模式下,16位段寄存器无法访问32位 段地址,因此,被称为选择器,即段寄存

4、 器是用来选择描述符的。i386的存储管理单元12索引 TI 特权级别153 2 1013位索引段选择器结构13上图说明: TI是选择域,TI1,从局部描述符表中选择相应 描述符,TI0,从全局描述符表中选择描述符。 索引域给出该选择符在GDT或LDT中的入口偏移 量,选择符高14位将虚拟地址空间分为16K个独立 段,其中8K个全局段和8K个局部段。 第1、0位是特权级,表示选择器特权级,称为请 求者特权级RPL。只有请求者特权级RPL高于或等 于相应描述符特权级DPL,描述符才能被存取,可 以实现一定程度的保护。 i386的存储管理单元14描述符寄存器全局描述符表寄存器GDTR是一个48位的

5、寄存器。 低16位保持全局描述符表GDT大小,最大为64K字 节,高32位保持GDT的段基地址。 局部描述符表寄存器LDTR可见部分(即程序员可 以操作的部分)只有16位,不可见部分有48位, 放置局部描述符表的段基地址和界限。i386的存储管理单元15分段方式下,寻址过程如下: 在段选择器中装入16位数,同时给出32位地址偏 移量(比如在ESI、EDI中等等)。 根据段选择器中的索引值、TI及RPL值,再根据相 应描述符表寄存器中的段基地址和段界限,进行 一系列合法性检查(如特权级检查、界限检查) 若无异常,取出相应描述符放入段描述符高速缓 冲寄存器中。 将描述符中的32位段基地址和放在ES

6、I、EDI等中 的32位有效地址相加,就形成了32位物理地址。i386的存储管理单元16i386的存储管理单元17linux分段机制linux分页机制Linux内存管理实现Linux的存储管理思想18Linux分段机制 linux只定义了四种段寄存器的取值内核代码段 0x10 内核数据段 0x18 用户代码段 0x23 用户数据段 0x28Linux的存储管理思想19Linux的存储管理思想20将上表和段选择寄存器对比可知:表明: 使用的都是GDT表 运行级别分为两级:0和3Linux的存储管理思想21 GDT初始化信息在arch/i386/kernel/head.S中Linux的存储管理思想

7、22对照段描述符的含义,可以得出结论: 四个段描述符内容下列内容基本相同结论:所有段都是从0地址开始的4G虚空间,虚拟地址到 线性地址的映射是取值不变。Linux的存储管理思想23 有区别的地方仅仅是下列部分结论: 经过如上段映射,之后需要开始进行线性地址映射。Linux的存储管理思想24Linux分页机制 控制寄存器CR0、CR3 用CR0的PG位用来控制分页机制:1,启用分页;0,禁止分页。 CR3用于指示页目录表的起始物理地址。Linux的存储管理思想25 两级页表结构Linux的存储管理思想26页目录项页目录项表最多可包含1024个页目录项,每个页目 录项为4字节,结构如图所示。Lin

8、ux的存储管理思想27Linux的存储管理思想上图说明: 第0位是存在位,P1,表示页表地址指向的页在内存中,如果P0,表示不在内存中。 第1位是读/写位 第2位是用户/管理员位,这两位为页目录项提供保护属性。 第5位是访问位,当对页目录项进行访问时,A位1。 第911位由操作系统专用。28页面项每个页目录项指向一个页表,页表最多含有1024个页 面项,每项4个字节,包含页面的起始地址和有关该 页面的信息。其中,第6位是页面项独有的,当对涉及的页面进行 写操作时,D位被置1。Linux的存储管理思想29总之,存储器只有一个页目录,有1024个页 目录项,每个页目录项又含有1024个页面 项,因

9、此,存储器一共可以分成10241024 1M个页面。由于每个页面为4K字节,所 以,存储器的大小正好(最多)为4GB。Linux的存储管理思想30页面高速缓冲寄存器 在分页情况下,每次存储器访问都要存取两级页 表,大大降低了访问速度。为了提高速度,在386中设置了一个最近存取页面 的高速缓冲寄存器,自动保持32项处理器最近使 用的页面地址。Linux的存储管理思想31Linux的存储管理思想32linux三级分页结构Linux的存储管理思想33地址映射Linux的存储管理思想34交换控制模块 (swap)系统调用内存映射模块 (mmap)内存管理模块 (core)结构特定模块MMULinux的

10、存储管理思想35说明:上图是虚拟内存管理的程序模块,实现代码大 部分放在/mm目录下。 内存映射模块(mmap)负责把磁盘文件或交换空间文件的逻辑 地址映射到虚拟地址,以及把虚拟地址 映射到物理地址。Linux的存储管理思想36 交换模块(swap)负责控制内存内容的换入和换出。采用交换机 制,从主存中淘汰最近没被访问的逻辑页,保存 近来访问过的逻辑页。 核心内存管理模块(core)负责核心内存管理功能,如页的分配、回收和请 求调页处理等功能,这些功能将别的内核子系统 (如文件系统)所使用。Linux的存储管理思想37 结构特定的模块负责给各种硬件平台提供通用接口,主要完成主 存初始化工作及对

11、页面故障的处理。这个模块是 实现虚拟内存的物理基础。Linux的存储管理思想38数据结构基于Buddy算法的内存页面管理基于slab算法的内存分区管理物理内存空间管理39物理内存空间管理数据结构 分页管理结构 设置了一个mem_map数组管理内存页面page,其在系统初始化时由 free_area_init()函数创建。数组元素是一个个page结构体,每个page结构体对应一个物理页面。 page结构定义为mem_map_t类型,定义在 /include/linux/mm.h中:40typedef struct page struct page *next;struct page *prev;

12、struct inode *inode;unsigned long offset;struct page *next_hash;atomic_t count;unsigned flags;unsigned dirty,age;struct wait_queue *wait;struct buffer_head * buffers;unsigned long swap_unlock_entry;unsigned long map_nr; mem_map_t;41说明: Count共享该页面的进程计数 Age标志页面的“年龄” Dirty表示该页面是否被修改过 prev和next:把page结构体

13、链接成一个双向循环链表 prev_hash和next_hash把有关page结构体连成哈希表物理内存空间管理42 inode和offset:内核以节点和其上的偏移为键值,将页面组织成 哈希表。 Wait等待该页资源的进程等待队列指针 Flag页面标志 map_nr该页面page结构体在mem_map数组中的下标值, 也就是物理页面的页号。物理内存空间管理43Buddy算法 Linux对空闲内存空间管理采用Buddy算法。 Buddy算法 把内存中所有页面按照2n划分,其中n=05, 每个内存空间按1个页面、2个页面、4个页面、 8个页面、16个页面、32个页面进行六次划分。物理内存空间管理44

14、划分后形成了大小不等的存储块,称为页面块, 简称页块。包含1个页面的页块称为1页块,包含2 个页面的称为2页块,依此类推。 每种页块按前后顺序两两结合成一对Buddy“伙伴” 系统按照Buddy关系把具有相同大小的空闲页面块 组成页块组,即1页块组、2页块组32页块组。 每个页块组用一个双向循环链表进行管理,共有 个链表,分别为1、2、4、8、16、32页块链表。分别挂到free_area 数组上。物理内存空间管理45位图数组 标记内存页面使用情况,第0组每一位表示单 个页面使用情况,1表示使用,0表示空闲,第2 组每一位表示比邻的两个页面的使用情况,依 次类推。默认为10个数组。 当一对Bu

15、ddy的两个页面块中有一个是空闲 的,而另一个全部或部分被占用时,该位置1。 两个页面块都是空闲,或都被全部或部分占 用时, 对应位置0。物理内存空间管理46内存分配和释放过程 内存分配时,系统按照Buddy算法,根据 请求的页面数在free_area对应的空闲 页块组中搜索。 若请求页面数不是2的整数次幂,则按 照稍大于请求数的2的整数次幂的值搜 索相应的页面块组。物理内存空间管理47 当相应页块组中没有可使用的空闲页面块 时就查询更大一些的页块组, 在找到可用的空闲页面块后,分配所需页 面。 当某一空闲页面块被分配后,若仍有剩余 的空闲页面,则根据剩余页面的大小把它 们加入到相应页块组中。物理内存空间管理48内存页面释放时,系统将其做为空闲页面看 待。检查是否存在与这些页面相邻的其它空闲页 块,若存在,则合为一个连续的空闲区按 Buddy算法重新分组。物理内存空间管理49物理内存空间管理50物理内存空间管理51物理内存空间管理52Slab算法 采用buddy算法,解决了外碎片问题,这种 方法适合大块内存请求,不适合小内存区 请求。如:几十个或者几百个字节。 Linux2.0采用传统内存分区算法,按几何 分布提供内存区大小,内存区以2的幂次方 为单位。虽然减少了内碎片,但没有显著 提高系统效率。物理内存空间管理53 Linux2.4采用了slab分配器算法

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号