1 / 15

第六章 存储器管理

第六章 存储器管理. 朱敏 zhumin@scu.edu.cn 2014 年 5 月 13 日. 地址绑定. 确定程序的 指令和数据 在内存中的位置 编译时: 绝对代码(只能放在内存中的特定位置) 加载时: 可重定位代码(每次加载,修改地址值) 运行时: 程序可以在内存中移动 访问程序时,临时计算 完整过程:. 地址变换. 编译: 由源文件翻译成包含机器码的目标文件 为 变量名 指派目标文件内的 相对地址 链接: 将多个目标文件打包成可执行文件 根据对应关系,把 相对地址 修改成 逻辑地址 加载:把可执行文件装入内存中

Download Presentation

第六章 存储器管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六章 存储器管理 朱敏 zhumin@scu.edu.cn 2014年5月13日

  2. 地址绑定 • 确定程序的指令和数据在内存中的位置 • 编译时: • 绝对代码(只能放在内存中的特定位置) • 加载时: • 可重定位代码(每次加载,修改地址值) • 运行时: • 程序可以在内存中移动 • 访问程序时,临时计算 • 完整过程:

  3. 地址变换 • 编译: • 由源文件翻译成包含机器码的目标文件 • 为变量名指派目标文件内的相对地址 • 链接: • 将多个目标文件打包成可执行文件 • 根据对应关系,把相对地址修改成逻辑地址 • 加载:把可执行文件装入内存中 • 运行:把逻辑地址转换成物理地址

  4. 0 101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010 x.c y.c z.c cc cc cc y.s x.s z.s as as as y.o x.o z.o Code 程序的一生 Data Stack ∞ 源代码 汇编代码 目标文件 可执行文件 OS ld a.out 编译器 汇编器 链接器 加载器

  5. 堆栈(Stack)向下生长 堆(Heap)向上生长 静态数据(Data)固定 代码(Code)只读 分段式存储管理的时候内存是什么样的呢? 进程的内存逻辑结构 ∞ Stack Heap Data Code 0

  6. stack heap 1011 0000 + 11 0000 ---------- 1110 0000 物理地址视图 逻辑地址视图 1111 1111 stack 1111 0000 (0xF0) 1110 0000 (0xE0) 1100 0000 (0xC0) heap 1000 0000 (0x80) 0111 0000 (0x70) data data 0101 0000 (0x50) 0100 0000 (0x40) code code 0001 0000 (0x10) 0000 0000 0000 0000 段号 偏移

  7. heap 逻辑地址视图 物理地址视图 1111 1111 stack stack 1110 0000 1110 0000 1100 0000 当堆栈向下生长到1110 0000的时候,会发生什么? heap 1000 0000 0111 0000 data data 0101 0000 0100 0000 code code 0001 0000 0000 0000 0000 0000 段号 偏移

  8. heap 逻辑地址视图 物理地址视图 1111 1111 stack stack 1110 0000 1110 0000 1100 0000 物理视图堆栈已经溢出了,需要扩大容量,有可能还要调整位置 heap 1000 0000 0111 0000 data data 0101 0000 0100 0000 code code 0001 0000 0000 0000 0000 0000 段号 偏移

  9. heap 逻辑地址视图 物理地址视图 1111 1111 stack stack 1110 0000 1110 0000 1100 0000 物理视图堆栈已经溢出了,需要扩大容量,有可能还要调整位置 heap 1000 0000 0111 0000 data data 0101 0000 0100 0000 code code 0001 0000 0000 0000 0000 0000 分页式的又会是什么样的呢? 段号 偏移

  10. 11111 11101 11110 11100 11101 null 11100 null 11011 null 11010 null 11001 null 11000 null 10111 null 10110 null 10101 null 10100 null 10011 null 10010 10000 10001 01111 10000 01110 01111 null 01110 null 01101 null 01100 null 01011 01101 01010 01100 01001 01011 01000 01010 00111 null 00110 null 00101 null 00100 null 00011 00101 00010 00100 00001 00011 00000 00010 页表 逻辑地址视图 物理地址视图 1111 1111 1110 1111 stack 1111 0000 stack 1110 0000 1100 0000 heap 1000 0000 heap 0111 000 data data 0101 000 0100 0000 code code 0001 0000 0000 0000 0000 0000 页号 偏移

  11. 11111 11101 11110 11100 11101 null 11100 null 11011 null 11010 null 11001 null 11000 null 10111 null 10110 null 10101 null 10100 null 10011 null 10010 10000 10001 01111 10000 01110 01111 null 01110 null 01101 null 01100 null 01011 01101 01010 01100 01001 01011 01000 01010 00111 null 00110 null 00101 null 00100 null 00011 00101 00010 00100 00001 00011 00000 00010 页表 逻辑地址视图 物理地址视图 1111 1111 1110 1111 stack 1111 0000 stack 1110 0000 1100 0000 当堆栈向下生长到1110 0000的时候,会发生什么? heap 1000 0000 heap 0111 000 data data 0101 000 0100 0000 code code 0001 0000 0000 0000 0000 0000 页号 偏移

  12. 11111 11101 11110 11100 11101 10111 11100 10110 11011 null 11010 null 11001 null 11000 null 10111 null 10110 null 10101 null 10100 null 10011 null 10010 10000 10001 01111 10000 01110 01111 null 01110 null 01101 null 01100 null 01011 01101 01010 01100 01001 01011 01000 01010 00111 null 00110 null 00101 null 00100 null 00011 00101 00010 00100 00001 00011 00000 00010 页表 逻辑地址视图 物理地址视图 1111 1111 stack stack 1110 0000 1110 0000 1100 0000 stack 分配空闲页给程序。 heap 1000 0000 heap 0111 000 data data 0101 000 0100 0000 code code 0001 0000 0000 0000 0000 0000 页号 偏移

  13. 分段式存储管理 • x86汇编语言,段寄存器 • 程序段:CS + 程序计数器 IP • 堆栈段:SS + 栈顶指针SP(基址寄存器BP) • 数据段:DS (对应于C语言静态变量 static) • 附加段:ES • 段号与段内偏移对汇编程序员可见 • 优势: • 多个进程共享程序段,节约内存(动态库)。 • 多个进程共享数据段,实现进程间通信。

  14. 段页式存储管理 • 逻辑地址空间: • 整体先分段 • 段内再分页 • 物理地址空间: • 分成大小与页相等的块 • 三次访问存存 • 透明度: • 段号与段内偏移对汇编程序员可见

  15. 段页式存储管理

More Related