《04_Linux内存管理_201609261823》.ppt

  1. 1、本文档共88页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存管理主要职责 内存分配(allocate)与回收(deallocate) 内存扩充 虚拟内存 地址变换 虚拟地址 =》物理地址 内存保护 内存使用状态跟踪keeping track 通过数据结构的字段来记录内存的使用情况 存储系统结构 “金字塔” 物理内存 vs. 虚拟内存 物理内存 Physical Memory RAM 虚拟内存 Virtual Memory 在外存上开辟空间来缓存物理内存页面,实现内存扩展 Linux:在磁盘上开辟的Swap区 Windows:在磁盘上开辟的VM区 内存扩充 借用外存空间来扩展物理内存空间,方法是让进程的部分代码或数据进入物理内存,其余驻留在外存,在需要时再通过替换进入物理内存。 虚拟地址 vs. 物理地址 虚拟地址 (逻辑地址) 程序编程使用虚拟地址 虚拟地址空间:进程能够访问的虚拟地址范围。 在32位字长X86机器上,虚拟地址空间大小为4GB。 物理地址 物理内存上以字节为单位编码的地址。 物理地址空间:物理内存的地址范围。 地址变换 (地址翻译) (1) 地址变换 (地址翻译) (2) MMU(Memory management Unit)负责把虚拟地址翻译为物理地址,并让一个进程始终运行于系统的物理内存中。“硬件地址翻译” 无论CPU运行于用户态还是核心态,程序执行时,交给CPU访问的地址是虚拟地址,MMU通过读取控制寄存器CR3得到页目录的指针,然后根据快表TLB(Translation lookaside buffer)和页表(Page Table) 将该虚拟地址转换为物理地址。 想一想:若将程序的虚拟地址转换为物理地址后,发现不在物理内存中,怎么办? 页面替换 (1) 虚拟内存通过“页” 进行组织。 页是OS在物理内存和磁盘swap区之间移动的基本单位。 移入内存page in 移出page out 页面替换 (2) 进程只能操作位于物理内存中的页面,所有进程共享物理内存。 在进程运行时,经过地址翻译,当发现引用的页面不在物理内存时,需要从磁盘调入内存。 MMU会产生一个页错误(page fault)。内核对此事件作出响应,并判断该引用是否有效。 若无效,内核向进程发出一个“segmentation violation”信号 若有效,内核从磁盘取回该页,换入到内存中。一旦页面进入内存,进程便被解锁,可以重新运行。因此,进程本身并不知道它曾经因为页面换入事件而等待了一会儿。 Linux 内核常驻物理内存,只有用户进程才被移入移出。 内存保护 防止程序越界和越权行为 不允许用户进程访问操作系统的存储区域 每个进程都在自己的地址空间中运行,互不干扰 内存保护的措施 界限保护 设置界限寄存器,限制进程的活动空间。 保护锁 为共享内存区设置一个读/写保护锁,在CPU中设置保护锁开关,它表示进程的读/写权限。只有进程的开关代码和内存区的保护锁匹配时方可进行访问。 保护模式 将CPU的工作模式分为用户态与核心态。核心态下的进程可以访问整个内存地址空间,而用户态下的进程只能访问在界限寄存器所规定范围内的空间。 地址空间 操作系统对内存的使用 OS启动阶段:临时使用内存 OS正常运行阶段 内核虚拟地址空间 存放“内核映像”:kernel code and data 被众多进程和内核共享 用户虚拟地址空间 用户进程的code、data、stack等 i386地址空间 在32位机器平台上,虚拟地址空间为4GB 内核虚拟地址空间 1GB 用户虚拟地址空间 3GB 思考:QQ程序在运行过程中,占用哪个空间? 空间映射 分清几个术语 物理内存 vs 虚拟内存  物理地址 vs 虚拟地址 (逻辑地址) 物理地址空间 vs 虚拟地址空间 内核虚拟地址空间 vs 用户虚拟地址空间 注意: 不要把“虚拟地址空间”和“物理地址空间”直接对应起来,他们之间映射(Mapping)才能建立关系 思考 小明的32bit X86机器,物理内存为2G,Swap区是否应该设为2G? 小明的32bit X86机器,物理内存为4G,是否还需要设置Swap区? 虚拟地址空间 == (SRAM + Sswap) ??? 不能把 “虚拟地址空间”和“物理地址空间”直接对应起来 进程的虚拟地址空间最大为4G,但多个进程可以共享物理地址空间 小明现有8G内存,如何才能充分利用? 注意区分:机器字长 寻址空间 用64位CPU和OS (理论上寻址可达264=16EB, 目前OS支持16GB内存) 若用32位机器 方法1:修改机器寻址指令,用两个字来组合支持寻址 Intel Pentium - Physical Address Extensions (PAE) 支持36-

文档评论(0)

ghfa + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档