《内存管理之linux内存管理ppt课件.ppt》由会员分享,可在线阅读,更多相关《内存管理之linux内存管理ppt课件.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 张惠娟 副教授 Linux内存管理1在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确内容 i386存储管理单元 Linux存储管理思想 物理内存空间管理 进程虚拟空间管理 请页机制 交换空间管理 缓冲机制2在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 MMU 分段机制i386的存储管理单元3在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯
2、度,由浅入深,所提出的问题也很明确i386的存储管理单元 MMU MMU由一个或一组芯片组成,其功能是把虚地址 映射为物理地址,即地址转换。80386以两级方式实现地址转换:第一级使用段机制,第二级使用分页机制。在80386上,分页机制是支持虚拟存储器的最佳选择。段机制使用可变大小的块,使段机制较适合处理复杂系统的逻辑分区。4在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确i386的存储管理单元5在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确分段机制段描述符 描述了段的基地
3、址、界限及保护属性,是一个8字 节的数据结构,存放在段描述符表中。i386的存储管理单元6在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确7在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确上图说明 从图中可以看出,一个段描述符指出了段的32位基地址和20位段界限(即段长)。第6个字节的G位是粒度位,当G=0时,段长的表示格式为字节长度,即一个段最长可达1M字节。当G=1时,段长表示段以4K字节为一页的页数目,即一个段最长可达1M*4K=4G字节。D表示缺省操作数大小,D=0,
4、操作数为16位,如果D=1,操作数为32位。i386的存储管理单元8在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确描述符表 在分段机制中,系统维护三种段表,称为描述符表,即全局描述符表、局部描述符表和中断描述符表。描述符表本身占据的字节数为8的倍数,空间大小在8个字节(至少含一个描述符)到64K字节(至多含8K个描述符)之间。i386的存储管理单元9在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确全局描述符表(GDT)全局描述符表包含着系统中所有任务都可用的那些描述符。局部
5、描述符表(LDT)局部描述符表LDT包含了与一个给定任务有关的描述符,每一个任务都有一个各自LDT。i386的存储管理单元10在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 选择器实模式下,段寄存器存储的是真实段地址保护模式下,16位段寄存器无法访问32位段地址,因此,被称为选择器,即段寄存器是用来选择描述符的。i386的存储管理单元11在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 索引 TI 特权级别153 2 1013位索引段选择器结构12在整堂课的教学中,刘教师总
6、是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确上图说明:TI是选择域,TI1,从局部描述符表中选择相应描述符,TI0,从全局描述符表中选择描述符。索引域给出该选择符在GDT或LDT中的入口偏移量,选择符高14位将虚拟地址空间分为16K个独立段,其中8K个全局段和8K个局部段。第1、0位是特权级,表示选择器特权级,称为请求者特权级RPL。只有请求者特权级RPL高于或等于相应描述符特权级DPL,描述符才能被存取,可以实现一定程度的保护。i386的存储管理单元13在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也
7、很明确描述符寄存器全局描述符表寄存器GDTR是一个48位的寄存器。低16位保持全局描述符表GDT大小,最大为64K字节,高32位保持GDT的段基地址。局部描述符表寄存器LDTR可见部分(即程序员可以操作的部分)只有16位,不可见部分有48位,放置局部描述符表的段基地址和界限。i386的存储管理单元14在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确分段方式下,寻址过程如下:在段选择器中装入16位数,同时给出32位地址偏移量(比如在ESI、EDI中等等)。根据段选择器中的索引值、TI及RPL值,再根据相应描述符表寄存器中的段基地址和段界
8、限,进行一系列合法性检查(如特权级检查、界限检查)若无异常,取出相应描述符放入段描述符高速缓冲寄存器中。将描述符中的32位段基地址和放在ESI、EDI等中的32位有效地址相加,就形成了32位物理地址。i386的存储管理单元15在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确i386的存储管理单元16在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 linux分段机制 linux分页机制 Linux内存管理实现 Linux的存储管理思想17在整堂课的教学中,刘教师总是让学生带着
9、问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 Linux分段机制 linux只定义了四种段寄存器的取值内核代码段 0 x10内核数据段 0 x18 用户代码段 0 x23用户数据段 0 x28 Linux的存储管理思想18在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 Linux的存储管理思想19在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确将上表和段选择寄存器对比可知:表明:使用的都是GDT表 运行级别分为两级:0和3 Linux的存储管理思想
10、20在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确GDT初始化信息在arch/i386/kernel/head.S中 Linux的存储管理思想21在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确对照段描述符的含义,可以得出结论:四个段描述符内容下列内容基本相同结论:所有段都是从0地址开始的4G虚空间,虚拟地址到线性地址的映射是取值不变。Linux的存储管理思想22在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 有
11、区别的地方仅仅是下列部分结论:经过如上段映射,之后需要开始进行线性地址映射。Linux的存储管理思想23在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 Linux分页机制 控制寄存器CR0、CR3用CR0的PG位用来控制分页机制:1,启用分页;0,禁止分页。CR3用于指示页目录表的起始物理地址。Linux的存储管理思想24在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确两级页表结构 Linux的存储管理思想25在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具
12、有一定的梯度,由浅入深,所提出的问题也很明确页目录项 页目录项表最多可包含1024个页目录项,每个页目录项为4字节,结构如图所示。Linux的存储管理思想26在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 Linux的存储管理思想上图说明:第0位是存在位,P1,表示页表地址指向的 页在内存中,如果P0,表示不在内存中。第1位是读/写位 第2位是用户/管理员位,这两位为页目录项 提供保护属性。第5位是访问位,当对页目录项进行访问时,A位1。第911位由操作系统专用。27在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有
13、一定的梯度,由浅入深,所提出的问题也很明确页面项 每个页目录项指向一个页表,页表最多含有1024个页面项,每项4个字节,包含页面的起始地址和有关该页面的信息。其中,第6位是页面项独有的,当对涉及的页面进行写操作时,D位被置1。Linux的存储管理思想28在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确总之,存储器只有一个页目录,有1024个页目录项,每个页目录项又含有1024个页面项,因此,存储器一共可以分成102410241M个页面。由于每个页面为4K字节,所以,存储器的大小正好(最多)为4GB。Linux的存储管理思想29在整堂课
14、的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确页面高速缓冲寄存器在分页情况下,每次存储器访问都要存取两级页表,大大降低了访问速度。为了提高速度,在386中设置了一个最近存取页面的高速缓冲寄存器,自动保持32项处理器最近使用的页面地址。Linux的存储管理思想30在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 Linux的存储管理思想31在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确linux三级分页结构 Linux的存
15、储管理思想32在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确地址映射 Linux的存储管理思想33在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确交换控制模块(swap)系统调用内存映射模块(mmap)内存管理模块(core)结构特定模块MMU Linux的存储管理思想34在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确说明:上图是虚拟内存管理的程序模块,实现代码大部分放在/mm目录下。内存映射模块(mmap)负责
16、把磁盘文件或交换空间文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址。Linux的存储管理思想35在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确交换模块(swap)负责控制内存内容的换入和换出。采用交换机制,从主存中淘汰最近没被访问的逻辑页,保存近来访问过的逻辑页。核心内存管理模块(core)负责核心内存管理功能,如页的分配、回收和请求调页处理等功能,这些功能将别的内核子系统(如文件系统)所使用。Linux的存储管理思想36在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题
17、也很明确结构特定的模块 负责给各种硬件平台提供通用接口,主要完成主存初始化工作及对页面故障的处理。这个模块是实现虚拟内存的物理基础。Linux的存储管理思想37在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 数据结构 基于Buddy算法的内存页面管理 基于slab算法的内存分区管理物理内存空间管理38在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确物理内存空间管理数据结构分页管理结构设置了一个mem_map数组管理内存页面page,其在系统初始化时由 free_area_i
18、nit()函数 创建。数组元素是一个个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;unsigne
19、d 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结构体连成哈希表物理内存空
20、间管理41在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确inode和offset:内核以节点和其上的偏移为键值,将页面组织成哈希表。Wait 等待该页资源的进程等待队列指针Flag 页面标志map_nr 该页面page结构体在mem_map数组中的下标值,也就是物理页面的页号。物理内存空间管理42在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确Buddy算法Linux对空闲内存空间管理采用Buddy算法。Buddy算法把内存中所有页面按照2n划分,其中n=05,每个内存空间
21、按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。物理内存空间管理43在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确划分后形成了大小不等的存储块,称为页面块,简称页块。包含1个页面的页块称为1页块,包含2个页面的称为2页块,依此类推。每种页块按前后顺序两两结合成一对Buddy“伙伴”系统按照Buddy关系把具有相同大小的空闲页面块组成页块组,即1页块组、2页块组32页块组。每个页块组用一个双向循环链表进行管理,共有个链表,分别为1、2、4、8、16、32页块链表。分别挂到free_area 数组上。物理内
22、存空间管理44在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确位图数组 标记内存页面使用情况,第0组每一位表示单个页面使用情况,1表示使用,0表示空闲,第2组每一位表示比邻的两个页面的使用情况,依次类推。默认为10个数组。当一对Buddy的两个页面块中有一个是空闲的,而另一个全部或部分被占用时,该位置1。两个页面块都是空闲,或都被全部或部分占用时,对应位置0。物理内存空间管理45在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确内存分配和释放过程内存分配时,系统按照Buddy算
23、法,根据请求的页面数在free_area对应的空闲页块组中搜索。若请求页面数不是2的整数次幂,则按照稍大于请求数的2的整数次幂的值搜索相应的页面块组。物理内存空间管理46在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确当相应页块组中没有可使用的空闲页面块时就查询更大一些的页块组,在找到可用的空闲页面块后,分配所需页面。当某一空闲页面块被分配后,若仍有剩余的空闲页面,则根据剩余页面的大小把它们加入到相应页块组中。物理内存空间管理47在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明
24、确内存页面释放时,系统将其做为空闲页面看待。检查是否存在与这些页面相邻的其它空闲页块,若存在,则合为一个连续的空闲区按Buddy算法重新分组。物理内存空间管理48在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确物理内存空间管理49在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确物理内存空间管理50在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确物理内存空间管理51在整堂课的教学中,刘教师总是让学生带着问题来学习,而问
25、题的设置具有一定的梯度,由浅入深,所提出的问题也很明确Slab算法采用buddy算法,解决了外碎片问题,这种方法适合大块内存请求,不适合小内存区请求。如:几十个或者几百个字节。Linux2.0采用传统内存分区算法,按几何分布提供内存区大小,内存区以2的幂次方为单位。虽然减少了内碎片,但没有显著提高系统效率。物理内存空间管理52在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 Linux2.4采用了slab分配器算法 该算法比传统的分配器算法有更好性能和内存利用率,最早在solaris2.4上使用。物理内存空间管理53在整堂课的教学中,
26、刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确Slab分配器思想小对象的申请和释放通过slab分配器来管理。slab分配器有一组高速缓存,每个高速缓存保存同一种对象类型,如i节点缓存、PCB缓存等。内核从它们各自的缓存种分配和释放对象。每种对象的缓存区由一连串slab构成,每个slab由一个或者多个连续的物理页面组成。这些页面种包含了已分配的缓存对象,也包含了空闲对象。物理内存空间管理54在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确cacheSlabPCB缓存Slabi节点缓存PCB缓存
27、i节点缓存Slab分配器的组成55在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确数据结构高速缓存 Struct kmem_cache_s高速缓存种的每个slab数据结构 Struct kmem_slab_s物理内存空间管理56在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确C_free,c_nextpC_firstp,c_lastpC_free,c_nextpC_firstp,c_lastpC_free,c_nextpC_firstp,c_lastpS_prevp,s_ne
28、xtpS_prevp,s_nextpS_prevp,s_nextpS_prevp,s_nextpS_prevp,s_nextpCache结构Cache结构Cache结构Slab结构Slab结构Slab结构Cache结构与slab结构之间的关系57在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确创建slab对象过程 Slab分配器调用Kmem_cache_grow()函数为缓存分配一个新的slab对象。调用kmem_getpages()获取一组连续内存页框;调用kmem_cache_slabmgamt()分配一个新的slab数据结构;调
29、用kmem_cache_init_objs()为新slab中包含的所有对象定义构造方法;调用kmem_slab_link_end()将新的slab插入到这个高速缓存的双向链表的末尾。物理内存空间管理58在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确优点:充分利用了空间,减少了内部碎片 管理局部化,尽可能减少了与buddy分配器打交道,提高了效率。物理内存空间管理59在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确虚拟地址空间管理 进程地址空间 虚拟内存空间管理(内存映射)6
30、0在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确进程地址空间 Linux把进程虚拟空间分成两部分:内核区和用户区 操作系统内核的代码和数据等被映射到内核区。进程可执行映像(代码和 数据)映射到虚拟内存的用户区。61在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确进程地址空间62在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 虚拟空间管理63在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯
31、度,由浅入深,所提出的问题也很明确有关数据结构mm_struct结构体 定义了每个进程的虚存用户区,首地址在 任务结构体中,定义在 /include/linux/schedul.h中。虚拟空间管理64在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确struct mm_struct int count;pgd_t*pgd;unsigned long context;unsigned long start_code,end_code,start_data,end_data;unsigned long start_brk,brk,start
32、_stack,start_mmap;unsigned long arg_start,arg_end,env_start,env_end;unsigned long rss,total_vm,locked_vm;unsigned long def_flags;struct vm_area_struct*mmap;struct vm_area_struct*mmap_avl;struct semaphore mmap_sem;65在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确进程虚存区域 一个虚存区域是虚存空间中一个连续区域,每个虚拟区
33、域用一个vm_area_struct结构体描述,定义在/include/linux/mm.h中。虚拟空间管理66在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确struct vm_area_struct struct vm_area_struct struct mm_struct*vm_mm;struct mm_struct*vm_mm;unsigned long vm_start;unsigned long vm_start;unsigned long vm_end;unsigned long vm_end;pgprot_t vm_
34、page_prot;pgprot_t vm_page_prot;unsigned short vm_flags;unsigned short vm_flags;short vm_avl_height;short vm_avl_height;struct vm_area_struct*vm_avl_left;struct vm_area_struct*vm_avl_left;struct vm_area_struct*vm_avl_right;struct vm_area_struct*vm_avl_right;struct vm_area_struct*vm_next;struct vm_ar
35、ea_struct*vm_next;struct vm_area_struct*vm_next_share;struct vm_area_struct*vm_next_share;struct vm_area_struct*vm_prev_share;struct vm_area_struct*vm_prev_share;struct vm_operations_struct*vm_ops;struct vm_operations_struct*vm_ops;unsigned long vm_offset;unsigned long vm_offset;struct inode*vm_inod
36、e;struct inode*vm_inode;unsignedunsigned long vm_pte;long vm_pte;67在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确说明:vm_mm指针指向进程的mm_struct结构体vm_start和vm_end 虚拟区域的开始和终止地址。vm_page_prot 虚存区域的页面的保护特性vm_inode 若虚存区域映射的是磁盘文件或设备文件内容,则vm_inode指向这个文件的inode结构体,否则vm_inode为NULL。虚拟空间管理68在整堂课的教学中,刘教师总是让学生带着
37、问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确vm_flags指出了虚存区域的操作特性:VM_READ 虚存区域允许读取 VM_WRITE 虚存区域允许写入 VM_EXEC 虚存区域允许执行 VM_SHARED 虚存区域允许多个进程共享 VM_GROWSDOWN 虚存区域可以向下延伸 VM_GROWSUP 虚存区域可以向上延伸 VM_SHM 虚存区域是共享存储器的一部分 VM_LOCKED 虚存区域可以加锁 VM_STACK_FLAGS 虚存区域做为堆栈使用 虚拟空间管理69在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的
38、问题也很明确vm_offset 该区域的内容相对于文件起始位置的偏移量,或相对于共享内存首址的偏移量。vm_next 所有vm_area_struct结构体链接成一个单向链表 vm_next指向下一个vm_area_struct结构体。链表首地址由mm_struct中成员项mmap指出。vm_ops是指向vm_operations_struct结构体的指针,该结构体中包含着指向各种操作函数的指针。虚拟空间管理70在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确vm_avl_left 左指针指向相邻的低地址虚存区域vm_avl_righ
39、t 右指针指向相邻的高地址虚存区域mmap_avl 表示进程AVL树的根vm_avl_hight 表示AVL树的高度。vm_next_share和vm_prev_share 把有关vm_area_struct结合成一个共享内存时使 用的双向链表。虚拟空间管理71在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确虚存区域建立 Linux使用do_mmap()函数完成可执行映像向虚存区域的映射,建立有关的虚存区域。do_mmap()函数定义在/mm/mmap.c文件中 虚拟空间管理72在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题
40、的设置具有一定的梯度,由浅入深,所提出的问题也很明确unsigned long do_mmap(struct file*file,unsigned long addr,unsigned long len,unsigned long prot,unsigned long flags,unsigned long off)addr 虚存区域在虚拟内存空间的开始地址 len 是这个虚存区域的长度。file 是指向该文件结构体的指针 off 是相对于文件起始位置的偏移量。73在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 prot 指定了虚存
41、区域的访问特性:PROT_READ 0 x1 对虚存区域允许读取 PROT_WEITE 0 x2 对虚存区域允许写入 PROT_EXEC 0 x4 虚存区域(代码)允许执行 PROT_NONE 0 x0 不允许访问该虚存区域 flag 指定了虚存区域的属性:MAP_FIXED 指定虚存区域固定在addr的位置上 MAP_SHARED 指定对虚存区域的操作是作用在共享页面上 MAP_PRIVATE 指定了对虚存区域的写入操作将引起页面拷贝 虚拟空间管理74在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确请页机制 缺页中断处理函数 Do_
42、page_fault()75在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确交换机制引入目的 利用外存解决物理内存存储量不足问题方法 将磁盘上一部分空间作为交换空间,当物理内存不足时,将一部分暂不用的数据换入到交换空间中,从而保证内存有足够空间空间优缺点 解决了主存不足问题,增加了处理机开销76在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 交换空间 交换空间格式 守护进程kswapd()交换机制77在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯
43、度,由浅入深,所提出的问题也很明确交换空间 交换设备和交换文件统称为交换空间 交换设备中同一个页面中数据块连续存放 交换文件中是零散存放的,需要通过交换文件索引点来检索。交换机制78在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确交换空间格式 交换空间被划分为块(页插槽),每个块等于一个物理页。第一个页插槽中,存放了一个以”swap_space“结尾的位图,位图每一位对应一个页插槽,即第一个插槽后是真正用于交换的页插槽,这样,每个交换空间可容纳:(409610)8132687个页面 Linux允许建立8个交换空间交换机制79在整堂课的
44、教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确页面交换守护进程kswapd()是一个无限循环的线程,完成页面交换工作,保证系统内有足够内存。Linux将页面分为活跃状态、非活跃”脏“状态、非活跃”干净“状态。需要时,将非活跃”脏“状态页面内容写入到外存交换空间,并将该页面从”脏“队列移动到”干净“队列。回收页面总是从非活跃”干净“链表队列中进行交换机制80在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确缓冲机制目的 改善处理机和外围设备之间速度不匹配的矛盾,提高系统性能。Linux采
45、用了多种与主存相关的高速缓存。缓冲区高速缓存 页面高速缓存 交换高速缓存 硬件高速缓存81在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确 缓冲区高速缓存大小固定,是针对块设备的I/O开辟的。缓存区高速缓存以块设备标识符和块号作为索引,快速查找数据块,若数据块已在缓存中,则不必从物理设备中读取,从而加快了读取数据速度。缓冲区高速缓存大小可变化,当没有空闲的缓冲区而又必须分配新缓冲区时,内核就按需分配缓冲区,当主存空间不足时,可以释放缓冲区。缓冲机制82在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确页面高速缓存是为了加快对磁盘文件访问而设立的。当页面从磁盘被读入主存时,被存入页面高速缓存。如文件系统的一些系统调用,如read()、write()等,都是通过页面高速缓存完成的。缓冲机制83在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确交换缓存为了避免页面交换时,直接对磁盘交换空间操作,从而提高了系统性能。linux需要将一个页面从内存中换出时,首先查询交换缓存,如果缓存中的文件没有被修改过,则直接丢弃而不用回写外存交换文件。这样大大节省了许多不必要的磁盘操作。硬件缓存 联想寄存器缓冲机制84
限制150内