内存管理基本概念.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
END * 内存管理基本概念 内存管理模块提纲 基本概念和背景 连续区内存分配 页式内存管理 页表结构 段式内存管理 示例:Intel i386 非连续区内存分配 重温一些计算机组成的知识点 程序必须装入内存后,才能(以进程为单位)被CPU解释、执行 CPU能够直接访问的,只有主存、寄存器 访问寄存器需要 1 个CPU时钟周期,很快 访问主存需要许多时钟周期,或者,需要若干机器周期 Cache 位于主存、寄存器之间 计算机这么处理用户程序 C or C++ Source File C or C++ Compiler Include Files Source Listing Assembly Source File Assembler Source Listing Relocatable Object Module Create User Library (optional) Librarian User Library Library Directory Listing Linker Linker Command File Relocatable Object Module Link Map Absolute Object Module Device Programmer Target Development System 用户程序是如何编译执行的 Compiler和Assembler: 负责将用户源程序转换成目标程序,通常为二进制代码(binary object code). Linkage editor: 负责将多个目标代码连接产生单个可执行程序(.exe文件)。 Loader:加载程序到内存并准备执行。 汇编器(Assemblers) Assembler任务 把符号指令翻译成二进制指令 把标号(labels)翻译成地址 处理伪指令(pseudo-ops) 区别于编译,它基本上是one-to-one的翻译 产生的目标文件(Object file)添加了 Text段:代码 Data段:初始化了的全程变量 BSS段:未初始化的全程变量 基地址寄存器,界限寄存器 基地址(base)寄存器和界限(limit)寄存器共同划定逻辑地址空间 指令和数据的地址绑定(Binding) 源程序地址通常为符号形式,compiler将其绑定(映射)在可重定位的地址(例如“从本模块开始的第14字节”);Linkage editor/loader 将其映射为绝对地址,例如“74014”。 指令和数据的地址绑定通常发生在 3 个阶段 编译时绑定:如果代码、数据的存放首地址已知,编译阶段即可确定绝对地址。如果首地址变更,则需要重新编译 指令和数据的地址绑定(续) 装入时绑定:如果代码、数据的存放首地址未知,编译阶段生成可重定位地址,装入时才确定绝对地址 执行时绑定: 如果允许进程在执行时迁移其代码、数据,那么,地址绑定也在执行时进行。需要硬件装置支持其地址映射 (e.g., 基地址寄存器和界限寄存器) 逻辑地址空间 vs. 物理地址空间 区别于物理地址空间的各种逻辑地址空间,是OS得以管理内存的必要条件 逻辑地址 – CPU产生的地址; 也称为虚地址 逻辑地址 – 非物理的各种地址标记包括符号名,包括编译、汇编、连接、装入操作产生的地址 物理地址 – 内存单元接收到的地址。也就是说,“浮现”在地址总线的地址,以二进制形式表达。 存储管理单元 (MMU) 存储管理单元(Memory-Management Unit ,MMU)是CPU内部的硬件装置,其功能是将虚拟地址(或逻辑地址)转换成物理地址 例如一种简单的MMU策略,在用户进程将逻辑地址送往地址总线前,MMU把重定位寄存器(relocation register)的值,加到这个逻辑地址 用户进程只能处理逻辑地址,它无法获取真正的物理地址 基于重定位寄存器的动态重定位(Dynamic relocation) 动态连接(Dynamic Linking) 进程即将用到的代码段,不被预先连接入程序,只有到真正被调用的时刻才连接 需要动态连接库(Linux的.so,或者Windows的.dll)的配合 设计一小段代码,称为存根(stub)。 当真正调用到该段代码时,通过stub定位该段代码,或者从外部装入内存 动态装入(Dynamic Loading) 进程即将用到的子程序,不被预先装入,只有到真正被调用的时刻才装入内存 这样,进程本次运行中没有调用的子程序,就不会被装入内存 更有效地利用了内存空间 不需要操作系统特别的支持。 交换(Swapping) 进程映像暂时传输至后备存储空间保存(换出,swap out),需要(执行)时再装入内存 (换入,swap in)。称为“交换” 后备存储

文档评论(0)

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

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

1亿VIP精品文档

相关文档