《Linux内存管理》PPT课件

《Linux内存管理》PPT课件

ID:41111827

大小:244.51 KB

页数:26页

时间:2019-08-16

《Linux内存管理》PPT课件_第1页
《Linux内存管理》PPT课件_第2页
《Linux内存管理》PPT课件_第3页
《Linux内存管理》PPT课件_第4页
《Linux内存管理》PPT课件_第5页
资源描述:

《《Linux内存管理》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux内存管理Linux内存管理Linux内核的设计并没有全部采用Intel所提供的段机制,仅仅是有限度地使用了分段机制。这不仅简化了Linux内核的设计,而且为把Linux移植到其他平台创造了条件,因为很多RISC处理器并不支持段机制。Linux内存管理所有段的基地址均为0由此可以得出,每个段的逻辑地址空间范围为0-4GB。因为每个段的基地址为0,因此,逻辑地址到线性地址映射保持不变,在Linux中所提到的逻辑地址和线性地址(或虚拟地址)指的也就是同一地址。看来,Linux巧妙地把段机制给绕过去了,而完全利用了分页机制。Linux页式管理前面介绍了i3

2、86的二级页管理架构,不过有些CPU(Alpha64位)使用三级,甚至四级架构,Linux2.6.29内核为每种CPU提供统一的界面,采用了四级页管理架构,来兼容二级、三级、四级管理架构的CPU。Linux页式管理Linux页式管理这四级分别为:1.页全局目录(PageGlobalDirectory):即pgd,是多级页表的抽象最高层。2.页上级目录(PageUpperDirectory):即pud。3.页中间目录(PageMiddleDirectory):即pmd,是页表的中间层。4.页表(PageTableEntry):即pte。虚拟内存Linux操作系

3、统采用虚拟内存管理技术,使得每个进程都有独立的进程地址空间,该空间是大小为3G,用户看到和接触的都是虚拟地址,无法看到实际的物理地址。利用这种虚拟地址不但能起到保护操作系统的作用,而且更重要的是用户程序可使用比实际物理内存更大的地址空间。虚拟内存Linux将4G的虚拟地址空间划分为两个部分——用户空间与内核空间。用户空间从0到0xbfffffff,内核空间从3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间。例外情况是用户进程通过系统调用访问内核空间。用户进程地址空间(3G)[root@localhostroot]#sizehello

4、//显示文件结构可执行程序存储结构(1).text存放CPU执行的机器指令,代码区通常是只读的,防止程序意外地修改了它的指令。(2).data该区包含被初始化的全局变量、静态变量.它们是在编译阶段被编译器存放在可执行目标文件的.data段中的.(3).BSS未被初始化的全局变量和静态局部变量,编译的时候并未被分配空间,仅仅在.bss段中标记它们,当程序运行的时候才为它们在内存中分配空间,并把它们初始化为零或空指针(NULL)。(4).rodata该区包含常量数据(如字符串常量)在编译阶段被编译器存放在可执行目标文件的.rodata段中的。编译后可执行代码例:

5、查看编译后可执行代码中几个基本段#gcc-cneicunguanli.c-oneicunguanli#objdump–hneicunguanli程序运行时内存结构(1)代码区(text)代码区指令根据程序设计流程依次执行,对于顺序指令,则只会执行一次(每个进程),如果反复,则需要使用跳转指令,如果进行递归,则需要借助栈来实现。(2)全局初始化数据区/静态数据区(data):只初始化一次(3)未初始化数据区(BSS):在运行时改变其值。(4)栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值等。(5)堆区(heap):用于动态内存分配。一

6、般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS回收。程序执行时的内存分配情况inta=0;//a在全局已初始化数据区char*p1;//p1在BSS区(未初始化全局变量)main(){intb;//b在栈区chars[]="abc";//s为数组变量,存储在栈区,//“abc”为字符串常量,存储在已初始化数据区char*p1,p2;//p1、p2在栈区char*p3="123456";//123456data数据区,p3在栈区.staticintc=0;//c为局部静态数据,data数据区p1=(char*)malloc(10);//分配得

7、来的10个字节的区域在堆区p2=(char*)malloc(20);//分配得来的20个字节的区域在堆区free(p1);free(p2);}栈和堆的区别(1)管理方式不同栈编译器自动管理,无需程序员手工控制;而堆空间的申请释放工作由程序员控制,容易产生内存泄漏。(2)空间大小不同。栈是向低地址扩展的数据结构,是一块连续的内存区域。因此,用户从栈获得的空间较小。堆是向高地址扩展的数据结构,是不连续的内存区域。堆获得的空间较灵活,也较大。内存分配方式(1)静态分配:编译器在处理程序源代码时分配,静态对象是有名字的变量,可以直接对其进行操作,静态对象的分配与释放

8、由编译器自动处理。(2)动态分配:程序在执行时调用m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。