内存管理之linux内存

上传人:沈*** 文档编号:247337828 上传时间:2024-10-18 格式:PPT 页数:84 大小:526KB
返回 下载 相关 举报
内存管理之linux内存_第1页
第1页 / 共84页
内存管理之linux内存_第2页
第2页 / 共84页
内存管理之linux内存_第3页
第3页 / 共84页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,张惠娟,副教授,Linux,内存管理,1,内容,i386,存储管理单元,Linux,存储管理思想,物理内存空间管理,进程虚拟空间管理,请页机制,交换空间管理,缓冲机制,2,MMU,分段机制,i386,的存储管理单元,3,i386,的存储管理单元,MMU,MMU,由一个或一组芯片组成,其功能是把虚地址,映射为物理地址,即地址转换。,80386,以两级方式实现地址转换:,第一级使用段机制,第二级使用分页机制。,在,80386,上,分页机制是支持虚拟存储器的最佳选择。段机制使用可变大小的块,使段机制较适合处理复杂系统的逻辑分区。,4,i386,的存储管理单元,5,分段机制,段描述符,描述了段的基地址、界限及保护属性,是一个,8,字,节的数据结构,存放在,段描述符表,中,。,i386,的存储管理单元,6,7,上图说明,从图中可以看出,一个段描述符指出了段的,32,位基地址和,20,位段界限(即段长)。,第,6,个字节的,G,位是粒度位,当,G=0,时,段长的表示格式为字节长度,即一个段最长可达,1M,字节。当,G=1,时,段长表示段以,4K,字节为一页的页数目,即一个段最长可达,1M*4K=4G,字节。,D,表示缺省操作数大小,,D=0,,操作数为,16,位,如果,D=1,,操作数为,32,位。,i386,的存储管理单元,8,描述符表,在分段机制中,系统维护三种段表,称为描述符表,即,全局描述符表、局部描述符表和中断描述符表,。,描述符表本身占据的字节数为,8,的倍数,空间大小在,8,个字节(至少含一个描述符)到,64K,字节(至多含,8K,个描述符)之间。,i386,的存储管理单元,9,全局描述符表(,GDT,),全局描述符表包含着系统中所有任务都可用的那些描述符。,局部描述符,表(,LDT,),局部描述符表,LDT,包含了与一个给定任务有关的描述符,每一个任务都有一个各自,LDT,。,i386,的存储管理单元,10,选择器,实模式下,段寄存器存储的是真实,段地址,保护模式下,,16,位段寄存器无法访问,32,位段地址,因此,被称为,选择器,,即,段寄存器,是,用来选择描述符,的。,i386,的存储管理单元,11,索引,TI,特权级别,15,3,2,1,0,13,位索引,段选择器结构,12,上图说明:,TI,是选择域,,TI,1,,从局部描述符表中选择相应描述符,,TI,0,,从全局描述符表中选择描述符。,索引域给出该选择符在,GDT,或,LDT,中的入口偏移量,选择符高,14,位将虚拟地址空间分为,16K,个独立段,其中,8K,个全局段和,8K,个局部段。,第,1,、,0,位是特权级,表示选择器特权级,称为请求者特权级,RPL,。只有请求者特权级,RPL,高于或等于相应描述符特权级,DPL,,描述符才能被存取,可以实现一定程度的保护。,i386,的存储管理单元,13,描述符寄存器,全局描述符表寄存器,GDTR,是一个,48,位的寄存器。低,16,位保持全局描述符表,GDT,大小,最大为,64K,字节,高,32,位保持,GDT,的段基地址。,局部描述符表寄存器,LDTR,可见部分(即程序员可以操作的部分)只有,16,位,不可见部分有,48,位,放置局部描述符表的段基地址和界限。,i386,的存储管理单元,14,分段方式下,寻址过程如下:,在段选择器中装入,16,位数,同时给出,32,位地址偏移量(比如在,ESI,、,EDI,中等等)。,根据段选择器中的索引值、,TI,及,RPL,值,再根据相应描述符表寄存器中的段基地址和段界限,进行一系列合法性检查(如特权级检查、界限检查)若无异常,取出相应描述符放入段描述符高速缓冲寄存器中。,将描述符中的,32,位段基地址和放在,ESI,、,EDI,等中的,32,位有效地址相加,就形成了,32,位物理地址。,i386,的存储管理单元,15,i386,的存储管理单元,16,linux,分段机制,linux,分页机制,Linux,内存管理实现,Linux,的存储管理思想,17,Linux,分段机制,linux,只定义了四种段寄存器的取值,内核代码段 0,x10,内核数据段 0,x18,用户代码段 0,x23,用户数据段 0,x28,Linux,的存储管理思想,18,Linux,的存储管理思想,19,将上表和段选择寄存器对比可知:,表明:,使用的都是,GDT,表,运行级别分为两级:0和3,Linux,的存储管理思想,20,GDT,初始化信息在,arch/i386/kernel/head.S,中,Linux,的存储管理思想,21,对照段描述符的含义,可以得出结论:,四个段描述符内容下列内容基本相同,结论:,所有段都是从0地址开始的4,G,虚空间,虚拟地址到线性地址的映射是取值不变。,Linux,的存储管理思想,22,有区别的地方仅仅是下列部分,结论:,经过如上段映射,之后需要开始进行线性地址映射。,Linux,的存储管理思想,23,Linux,分页机制,控制寄存器,CR0、CR3,用,CR0,的,PG,位用来控制分页机制:,1,,启用分页;,0,,禁止分页。,CR3,用于指示页目录表的起始物理地址。,Linux,的存储管理思想,24,两级页表结构,Linux,的存储管理思想,25,页目录项,页目录项表最多可包含,1024,个页目录项,每个页目录项为,4,字节,结构如图所示。,Linux,的存储管理思想,26,Linux,的存储管理思想,上图说明:,第,0,位是存在位,,P,1,,表示页表地址指向的,页在内存中,如果,P,0,,表示不在内存中。,第,1,位是读,/,写位,第,2,位是用户,/,管理员位,这两位为页目录项,提供保护属性。,第,5,位是访问位,当对页目录项进行访问时,,A,位,1,。,第,9,11,位由操作系统专用。,27,页面项,每个页目录项指向一个页表,页表最多含有,1024,个页面项,每项,4,个字节,包含页面的起始地址和有关该页面的信息。,其中,第,6,位是页面项独有的,当对涉及的页面进行写操作时,,D,位被置,1,。,Linux,的存储管理思想,28,总之,存储器只有一个页目录,有,1024,个页目录项,每个页目录项又含有,1024,个页面项,因此,存储器一共可以分成,10241024,1M,个页面。由于每个页面为,4K,字节,所以,存储器的大小正好(最多)为,4GB,。,Linux,的存储管理思想,29,页面高速缓冲寄存器,在分页情况下,每次存储器访问都要存取两级页表,大大降低了访问速度。,为了提高速度,在,386,中设置了一个最近存取页面的高速缓冲寄存器,自动保持,32,项处理器最近使用的页面地址。,Linux,的存储管理思想,30,Linux,的存储管理思想,31,linux,三级分页结构,Linux,的存储管理思想,32,地址映射,Linux,的存储管理思想,33,交换控制模块,(,swap,),系统调用,内存映射模块,(,mmap,),内存管理模块,(,core,),结构特定模块,MMU,Linux,的存储管理思想,34,说明:,上图是虚拟内存管理的程序模块,实现代码大部分放在,/mm,目录下。,内存映射模块(,mmap,),负责把磁盘文件或交换空间文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。,Linux,的存储管理思想,35,交换模块,(,swap,),负责控制内存内容的换入和换出。采用交换机制,从主存中淘汰最近没被访问的逻辑页,保存近来访问过的逻辑页。,核心内存管理模块(,core,),负责核心内存管理功能,如页的分配、回收和请求调页处理等功能,这些功能将别的内核子系统(如文件系统)所使用。,Linux,的存储管理思想,36,结构特定的模块,负责给各种硬件平台提供通用接口,主要完成主存初始化工作及对页面故障的处理。这个模块是实现虚拟内存的物理基础。,Linux,的存储管理思想,37,数据结构,基于,Buddy,算法的内存页面管理,基于,slab,算法的内存分区管理,物理内存空间管理,38,物理内存空间管理,数据结构,分页管理结构,设置了一个,mem,_map,数组管理内存页面,page,其在系统初始化时由,free_area_init(),函数,创建。数组元素是一个个,page,结构体,每个,page,结构体对应一个物理页面。,page,结构定义为,mem,_map_t,类型,定义在,/include/,linux,/mm.h,中:,39,typedef struct page,struct page*next;,struct page*prev;,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;,40,说明:,Count,共享该页面的进程计数,Age,标志页面的“年龄”,Dirty,表示该页面是否被修改过,prev,和,next,:,把,page,结构体链接成一个双向循环链表,prev,_hash,和,next_hash,把有关,page,结构体连成哈希表,物理内存空间管理,41,inode,和,offset,:,内核以节点和其上的偏移为键值,将页面组织成哈希表。,Wait,等待该页资源的进程等待队列指针,Flag,页面标志,map_nr,该页面,page,结构体在,mem,_map,数组中的下标值,也就是物理页面的页号。,物理内存空间管理,42,Buddy,算法,Linux,对空闲内存空间管理采用,Buddy,算法。,Buddy,算法,把内存中所有页面按照,2,n,划分,其中,n=05,,每个内存空间按,1,个页面、,2,个页面、,4,个页面、,8,个页面、,16,个页面、,32,个页面进行六次划分。,物理内存空间管理,43,划分后形成了大小不等的存储块,称为,页面块,,简称,页块,。包含,1,个页面的页块称为,1,页块,包含,2,个页面的称为,2,页块,依此类推。,每种页块按前后顺序两两结合成一对,Buddy“,伙伴”,系统按照,Buddy,关系把具有相同大小的空闲页面块组成页块组,即,1,页块组、,2,页块组,32,页块组。,每个页块组用一个双向循环链表进行管理,共有个链表,分别为,1,、,2,、,4,、,8,、,16,、,32,页块链表。,分别挂到,free_area,数组上。,物理内存空间管理,44,位图数组,标记内存页面使用情况,第,0,组每一位表示单个页面使用情况,,1,表示使用,,0,表示空闲,第,2,组每一位表示比邻的两个页面的使用情况,依次类推,。,默认为,10,个数组。,当一对,Buddy,的两个页面块中有一个是空闲的,而另一个全部或部分被占用时,该位置,1,。,两个页面块都是空闲,或都被全部或部分占用时,对应位置,0,。,物理内存空间管理,45,内存分配和释放过程,内存分配时,系统按照,Buddy,算法,根据请求的页面数在,free_area,对应的空闲页块组中搜索。,若请求页面数不是,2,的整数次幂,则按照稍大于请求数的,2,的整数次幂的值搜索相应的页面块组。,物理内存空间管理,46,当相应页块组中没有可使用的空闲页面块时就查询更大一些的页块组,,在找到可用的空闲页面块后,分配所需页面。,当某一空闲页面块被分配后,若仍有剩余的空闲页面,则根据剩余页面的大小把它们加入到相应页块组中。,物理内存空间管理,47,内存页面释放时,系统将其做为空闲页面看待。,检查是否存在与这些页面相邻的其它空闲页块,若存在,则合为
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!