0x12 内存管理(一)

本文详细介绍了内存管理的背景和方法,包括独立运行内存空间的保护、逻辑地址与物理地址的区别、内存管理单元的作用,以及动态加载和链接。接着,文章深入探讨了连续内存分配的三种策略:单一连续分配、固定分区分配和可变分区分配,分析了各自的优缺点和内存碎片问题。最后,重点讲解了分页内存管理,阐述了分页的基本方法、地址转换机制、硬件支持以及内存保护,强调了分页技术在内存管理和保护方面的优势。
摘要由CSDN通过智能技术生成

长篇预警

一、内存管理背景

内存是现代计算机运行的中心,它是由字或字节组成,每个字或字节都有自己的地址。

基本硬件

程序必须装入内存才能被执行
CPU可以直接访问的存储器只有主存、高速缓存和寄存器
寄存器通常可在1个(或少于1个)CPU时钟周期内完成访问,完成主存访问可能需要多个CPU时钟周期;
CPU暂停(Stall):在读取内存数据时,CPU空闲;
在内存和CPU之间,增加高速内存,来协调速度差异,这种内存缓冲区称为高速缓存Cache;
内存保护需要保证正确的操作。

独立运行内存空间

确保进程可访问的合法地址范围,并确保进程只访问其合法地址。
两个寄存器实现进程保护:

  • 基址寄存器(Base)
    进程最小的合法物理内存地址
  • 界限寄存器(Limit)
    进程地址的长度
  • CPU在执行指令时,需要进行地址合法性检验
    在这里插入图片描述
    合法的地址应该是大于等于基址寄存器的值,小于基址与界限寄存器的值之和。否则将陷入操作系统内核,作为寻址错误处理。

指令和数据绑定到内存

程序以二进制可执行文件的形式存储在磁盘上,为了执行,程序被调入内存并放在进程空间内。

地址绑定(重定位):在秩序装入内存时,把程序中的相对地址转换为内存中的绝对地址的过程。

指令和数据绑定到内存地址可在三个不同阶段:

  1. 编译时期(Compile time)
    如果内存位置已知,可生成绝对代码;
    如果开始位置改变,需要重新编译代码
  2. 加载时期(Load time)
    如果存储位置在编译时不知,则必须生成可重定位(relocatable)代码
  3. 执行时期(Execution time)
    如果进程执行时可在内存移动,则地址绑定可延迟到运行时;
    需要硬件对地址映射的支持(例如基址和限长寄存器)
    在这里插入图片描述

逻辑地址和物理地址

逻辑地址
由CPU产生,在进程内的相对地址,也称虚拟地址、相对地址、程序地址;
物理地址
内存地址,所有内存统一编址,也称绝对地址、实地址。

编译和加载时的地址绑定生成相同的逻辑地址和物理地址,此时重定位是静态的;但执行时的地址绑定导致不同的逻辑地址和物理地址,此时的重定位称为动态重定位
由程序所生成的所有逻辑地址的集合称为逻辑地址空间,与这些逻辑地址所对应的所有物理地址的集合称为物理地址空间。
逻辑地址空间绑定到物理地址空间这一概念至关重要,是正确进行内存管理的中心。

内存管理单元(MMU)

运行时,从虚拟地址到物理地址的映射是由一个硬件设备来完成的。该硬件称为内存管

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值