- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux内存经管技术
Linux内存管理 Linux内存管理 Linux内核的设计并没有全部采用Intel所提 供的段机制,仅仅是有限度地使用了分段 机 制。这不仅简化了Linux内核的设计,而且 为把Linux移植到其他平台创造了条件,因 为很多RISC处理器并不支持段机制。 Linux内存管理 所有段的基地址均为0 由此可以得出,每个段的逻辑地址空间范围为0- 4GB 。因为每个段的基地址为0,因此,逻辑地址 到线性地址映射保持不变,在Linux中所提到的 逻辑地址和线性地址 (或虚拟地址)指的也就是 同一地址。看来,Linux巧妙地把段机制给绕过 去了,而完全利用了分页机制。 Linux页式管理 前面介绍了i386的二级页管理架构,不过有 些CPU(Alpha 64位)使用三级,甚至四级架 构,Linux 2.6.29内核为每种CPU提供统一 的界面,采用了四级页管理架构,来兼容 二级、三级、四级管理架构的CPU。 Linux页式管理 Linux页式管理 这四级分别为: 1.页全局目录(Page Global Directory):即 pgd,是多级页表的抽象最高层。 2.页上级目录(Page Upper Directory):即 pud。 3.页中间目录(Page Middle Directory):即 pmd,是页表的中间层。 4.页表(Page Table Entry):即pte。 虚拟内存 Linux操作系统采用虚拟内存管理技术,使 得每个进程都有独立的进程地址空间,该 空间是大小为3G,用户看到和接触的都是 虚拟地址,无法看到实际的物理地址。利 用这种虚拟地址不但能起到保护操作系统 的作用,而且更重要的是用户程序可使用 比实际物理内存更大的地址空间。 虚拟内存 Linux将4G的虚拟地址空间划分为两个部 分——用户空间与内核空间。用户空间从 0到0xbfffffff,内核空间从3G到4G 。用 户进程通常情况下只能访问用户空间的虚 拟地址,不能访问内核空间。例外情况是 用户进程通过系统调用访问内核空间。 用户进程地址空间(3G) [root@localhost root]# size hello //显示文件结构 可执行程序存储结构 (1).text 存放CPU 执行的机器指令,代码区通常是只读的,防止程序意外地修 改了它的指令。 (2 ).data 该区包含被初始化的全局变量、静态变量.它们是在编译阶段被编译 器存放在可执行目标文件的.data段中的. (3 ).BSS 未被初始化的全局变量和静态局部变量,编译的时候并未被分配空 间,仅仅在.bss段中标记它们,当程序运行的时候才为它们在内 存中分配空间,并把它们初始化为零或空指针(NULL)。 (4 ).rodata 该区包含常量数据(如字符串常量)在编译阶段被编译器存放在可执 行目标文件的.rodata段中的。 编译后可执行代码 例:查看编译后可执行代码中几个基本段 #gcc -c neicunguanli.c -o neicunguanli #objdump –h neicunguanli 程序运行时内存结构 (1)代码区(text) 代码区指令根据程序设计流程依次执行,对于顺序指令, 则只会执行一次(每个进程),如果反复,则需要使用跳 转指令,如果进行递归,则需要借助栈来实现。 (2 )全局初始化数据区/静态数据区(data): 只初始化一次 (3)未初始化数据区(BSS):在运行时改变其值。 (4 )栈区(stack ):由编译器自动分配释放,存放函数的参 数值、局部变量的值等。 (5)堆区(heap):用于动态内存分配。一般由程序员分配 和释放,若程序员不释放,程序结束时有可能由OS 回收。 程序执行时的内存分配情况 int a = 0; //a 在全局已初始化数据区 ch
文档评论(0)