linu内存管理分析和总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目 录 1 内存分段1 2 虚拟地址空间和虚拟内存1 2.1 虚拟地址空间2 2.2 虚拟内存2 3 Linux内存管理/映射2 3.1 内核空间到物理内存的映射2 3.2 用户空间到物理内存(页式映射)3 3.3 Linux系统的内存管理实现的功能 3 4 Linux执行用户程序 4 5 Linux内存分配4 5.1 get_free_page/get_free_.p.a.g.e.s4 5.2 kmallo..c5 5.3 vmallo..c5 5.4 例 子 6 6 uClinux内存管理7 6.1 基 础 7 6.2 relo 机c 制 7 6.3 uClinu内x 存管理的局限性8 7 uClinux执行用户程序8 内存分段 代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。 数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配[1]的变量和全局变量。 BSS 段:BSS 段包含了程序中未初始化全局变量,在内存中 bss段全部置零。 堆(heap):堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。当进程调用 malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用 free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减) 栈:栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}中”定义的变量 (但不包括 stati声c 明的变量,stati意c 味这在数据段中存放变量)。除此以外在函数被调用 时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也回被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上将我们可以把堆栈看成一个临时数据寄存、交换的内存区。 虚拟地址空间和虚拟内存 虚拟内存和虚拟地址几乎没有关系。 虚拟内存是拿硬盘空间当做内存空间欺骗进程,例如我们常说的交换分区其实就是虚拟内存。 虚拟地址空间是大小为 4G 的虚拟空间,其中 0~3G 是用户空间,3G~4G 是内核空间(对于 windows,用户空间是低2G 空间,内核空间是高2G 空间),它是相对于物理内存空间的 1 一个虚拟概念。 虚拟地址空间 一个程序编译连接后形成的地址空间是一个虚拟地址空间,源程序中的所有标识符在编译成为可执行程序后,都会分配进程的虚拟地址,虚拟地址空间大小为 4G ,即 CPU 的最大寻址范围,每个进程都拥有各自的私有用户空间(0-3GB ),这个空间对系统中的其他进程是不可见的,相互隔离的。所以每个进程都可以对相同的虚拟地址进行访问,但是即使虚拟地址相同,里面的内容也是不相同的,不会造成冲突(可以把一个程序同时运行10 次,你会看到 10 个进程占用的线性地址一模一样,与反汇编得到的地址亦相同)。在任意时刻,只能有同一个进程在运行,在这一时刻,只存在一个 4GB 的虚拟地址空间,当进程切换时, 虚拟地址空间也随着切换,所以,尽管每个进程都可以有4GB 的地址空间,但是,在CPU 看来,只有一个虚拟地址空间存在。 程序最终必须运行在物理内存上,因此,虚拟内存必须被转化为物理地址。他们之间的 映射需要通过硬件体系结构所规定的数据结构来建立,这就是我们所说的段描述表和页表, Linux 主要通过页表+MMU 来进行映射。如果页表不同,CPU 将某一虚拟地址转化为物理地址就会不同,就会访问不同的物理空间。所以我们要为每一个进程都建立其页表,当 CPU 进行进程切换的时候,页表也更换为相应进程的页表,这样就可以实现每个进程都有自己的 虚拟地址,而又互不影响。 内核空间对所有的进程都是共享的,其中存放的是内核代码和数据,而进程的用户空间 中存放的是用户程序的代码和数据,不管是内核程序还是用户程序,它们被编译和连接以后, 所形成的指令和符号地址都是虚地址,而不是物理内存中的物理地址。 虚拟内存 如果计算机缺少运行程序或操作所需的随机存取内存 (RAM) ,则 Windows/linux使用虚拟内存进行补偿。虚拟内存将计算机的 RAM 和硬盘上的临时空间组合在一起。当 RAM 运行速度缓慢时,虚拟内存将数据从 RAM 移动到称为“分页文件”的空间中。将数据移入与移出分页文件可以释放 RAM ,以便完成工作。一般而言,计算机的 RAM 越多,程序运行得越快。如果计算机的速度由于缺少 RAM 而降低,则可以尝试增加虚拟内存来进行补偿。但是,计算机从 RAM 读取数据的速度要比从硬盘读取数据的速度快得多,因此增加 RAM 是

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档