《Linux内存管理》PPT课件.ppt_第1页
《Linux内存管理》PPT课件.ppt_第2页
《Linux内存管理》PPT课件.ppt_第3页
《Linux内存管理》PPT课件.ppt_第4页
《Linux内存管理》PPT课件.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux内存管理、Linux内存管理和Linux内核设计都没有采用英特尔提供的分段机制,只是在有限的程度上使用了分段机制。这不仅简化了Linux内核的设计,也为将Linux移植到其他平台创造了条件,因为许多RISC处理器不支持分段机制。在Linux内存管理中,所有段的基址都是0,因此可以得出结论,每个段的逻辑地址空间范围是0到4 GB。因为每个段的基址是0,所以从逻辑地址到线性地址的映射保持不变,并且在Linux中提到的逻辑地址和线性地址(或虚拟地址)指的是同一个地址。看来Linux巧妙地绕过了分段机制,充分利用了分页机制。Linux页面管理。i386的二级页面管理体系结构是较早引入的,但是

2、一些中央处理器(阿尔法64位)使用三级甚至四级体系结构。Linux 2.6.29内核为每个CPU提供了一个统一的接口,并采用四层页面管理架构与具有两层、三层和四层管理架构的CPU兼容。Linux页面管理,Linux页面管理,这四个层次是:1 .页面全局目录:pgd,是多级页面表的抽象顶层。2.页面上部目录):是pud。3.页面中间目录:pmd是页面表的中间层。4.页表条目:私人。虚拟内存,Linux操作系统采用虚拟内存管理技术,使每个进程都有一个独立的进程地址空间,大小为3G。用户可以看到和触摸虚拟地址,但看不到实际的物理地址。利用这个虚拟地址不仅可以保护操作系统,更重要的是,用户程序可以使用

3、比实际物理内存更大的地址空间。Linux将4G虚拟地址空间分为两部分:用户空间和内核空间。用户空间范围从0到0xbffffffff,内核空间范围从3G到4G。通常,用户进程只能访问用户空间的虚拟地址,但不能访问内核空间。例外是用户进程通过系统调用访问内核空间。用户进程地址空间(3g),根localhost根# size hello/显示文件结构,可执行程序存储结构,(1)。文本存储由中央处理器执行的机器指令,代码区通常是只读的,以防止程序意外修改其指令。(2)。数据该区域包含初始化的全局变量和静态变量,它们存储在。编译器在编译阶段生成的可执行目标文件的数据段。(3)。bss的未初始化的全局变量

4、和静态局部变量在编译期间不被分配空间,而只在。节,当程序运行时,它们在内存中被分配空间,并被初始化为零或空指针(空)(4)。rodata该区域包含存储在。编译器在编译阶段生成的可执行目标文件的rodata部分。编译可执行代码,示例:检查几个基本段# gcc-c内存条。c-o nei Cun guanli # obj dump h nei Cun guanli,程序运行时的内存结构,(1)代码区(text)代码区指令根据程序设计流程按顺序执行,但对于顺序指令,它们只执行一次(每个进程)(2)全局初始化数据区/静态数据区(data):只初始化一次,(3)未初始化数据区(BSS):在运行期间改变其值

5、。(4) stack):由编译器自动分配和释放,以存储函数的参数值和局部变量的值。(5) heap):用于动态内存分配。通常,它是由程序员分配和发布的。如果程序员不发布它,它可能会在程序结束时被操作系统回收。,程序执行期间的内存分配,int a=0;/在全局数据区中初始化一个char * p1/p1位于BSS区域(全局变量未初始化)main()int b;/b char s=堆栈区域中的abc/s是存储在堆栈区的数组变量,/“ABC”是存储在初始化数据区char *p1,p2的字符串常量;/p1和p2在堆栈区域char * p3=123456/1234560数据区,p3在堆栈区。静态int c

6、=0;/c是本地静态数据,数据区P1=(char *)malloc(10);/分配的10字节区域在堆区域p2=(char *)malloc(20)中;/分配的20字节区域在空闲堆区域(P1);免费(p2);堆栈和堆的区别,(1)管理模式不同,堆栈编译器自动管理它,无需程序员手动控制;然而,堆空间的应用和释放是由程序员控制的,这容易导致内存泄漏。(2)不同的空间大小。堆栈是扩展到低位地址的数据结构,低位地址是一个连续的存储区域。因此,用户从堆栈中获得的空间更少。堆是一种扩展到高位地址的数据结构,高位地址是一个不连续的存储区域。通过堆获得的空间是灵活的和大的。内存分配方法:(1)静态分配:编译器在

7、处理程序源代码时进行分配。静态对象是命名变量,可以直接操作。静态对象的分配和释放由编译器自动处理。(2)动态分配:程序执行时,调用malloc库函数申请分配,动态对象需要通过指针间接操作,分配和释放必须由程序员明确管理。cache,1)缓冲区缓存缓冲区缓存包含块设备驱动程序使用的数据缓冲区。这些缓冲单元的大小通常是固定的(例如,512字节),并且包含从块设备读取或写入的信息块。块设备是只能在固定大小的块中读写的设备。所有硬盘都是块设备。通过使用设备标识符和所需的块号作为索引,可以在缓冲区缓存中快速找到数据块。只能通过缓冲区缓存访问块设备。如果可以在缓冲区缓存中找到数据,则不需要从物理块设备(如

8、硬盘)中读取数据,这可以加快设备的访问速度。页缓存页缓存用于加快对块设备上的可执行映像文件和数据文件的访问。它一次一页地缓冲文件内容。页面从块设备读入内存,然后缓存在页面缓存中。3)交换缓存仅存储交换文件中修改过的页面。只要这些页面在被写入交换文件后没有被修改,下一次该页面被交换出内存时,就不需要更新和写入缓存,4)硬件缓存一个普通的硬件缓存是处理器中的指令和数据缓存,它缓存最近被中央处理器访问过的指令和数据,因此中央处理器不需要从内存中获取数据。实际上,它是中央处理器和内存之间的桥梁。伙伴算法,Linux通过伙伴算法管理和分配页面,Linux使用三个区域,每个区域由它自己的伙伴系统管理:ZO

9、NE_DMA包含可用于执行DMA操作的内存,ZONE_NORMAL包含可正常映射到虚拟地址的内存区域,ZONE _ HIGHMEM永久映射到内核地址空间的内存区域,伙伴算法,原则Linux的伙伴算法将所有空闲页面分成10个块组,每个组中的块大小是2页的幂。例如,组0中的块大小为20 (1页),组1中的块大小为21(2页),组9中的块大小为29(512页)。也就是说,每个组中的块具有相同的大小,并且具有相同大小的块形成一个链表。在伙伴算法的分配过程中,假设需要分配的块大小为128页。该算法首先搜索块大小为128页的链表,看看是否有这样的空闲块。如果有,直接分配;如果没有,算法将找到下一个较大的块

10、,并在链表中找到一个空闲块,其块大小为256页。如果有这样的空闲块,内核将这256页分成两个相等的部分,一个被分配,另一个被插入到块大小为128页的链表中。如果在块大小为256页的链表中没有找到空闲页块,继续寻找更大的块,即512页的块。如果有这样的块,内核从512页的块中划分出128页来满足请求,然后从384页中取出256页,并将其插入块大小为256页的链表中。然后将剩余的128页插入到块大小为128页的链表中。在伙伴算法的发布过程中,满足以下条件的两个块称为伙伴:两个块的大小相同,两个块的物理地址是连续的。伙伴算法将满足上述条件的两个空块组合成一个块。如果合并的块也可以与相邻的块合并,算法将继续合并。Slate分配器,linux使用Slate来管理小内存块的分配和释放,Slate分配器,Slate将缓存分为两种类型:特殊缓存:用于存储内核使用的数据结构,例如,mm、skb、vm等。普通高速缓存3360存储一般数据,例如,内核给指针分配一个内存注释:所有的高速缓存区通过链表组织在一起,其第一个节点是cache_chain。普通缓存将分配分为32 * (20)、32 * (21)、32

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论