1. 固定地址映射
在编程和编译过程中,需要确定逻辑地址和物理地址之间的映射关系。其特点在于程序加载时必须放置在指定的内存区域,这可能导致地址冲突并可能导致运行失败。
2. 静态地址映射
操作系统在程序装入时完成从逻辑地址到物理地址的映射。其公式表示为 MA = VA + BA。该特性的亮点在于在程序运行之前就确定了映射关系,装入内存后无法移动,且占用连续的内存空间。
3. 动态地址映射
在程序执行过程中,将逻辑地址转换为物理地址。同样,其公式也表示为 MA = VA + BA。此方法的优势在于程序占用的内存空间可动态变化,不要求连续的内存空间,这有助于多个进程共享代码。它也存在一些缺点,如需要硬件支持(MMU)和软件复杂性较高。
为了解决内存不足的问题,借助辅助存储在逻辑上扩展内存。
- 迁入:将需要运行的部分装入到内存中。
- 迁出:将暂时不运行的部分存储到辅助存储设备中。
这种做法的前提是,短时间内不运行的程序部分往往占据大部分内存空间。
内存管理相关原理
实现虚拟存储的前提包括足够的辅助存储、适当的内存容量以及地址变换机构。
对于内核学习网站而言,重要的是为程序分配足够的内存空间。
在32位机器上,地址空间范围从0x00000000到0xFFFFFFFF,总计4GB。其中,低地址空间为用户空间,高地址空间则被系统使用。
虚拟内存与物理内存的映射
- 用户低2GB空间分配详解
- 特定区域用于拒绝访问,以帮助程序员避免引用错误的指针。
- 专用进程地址空间和其他关键区域如线程环境块(TEB)和进程环境块(PEB)。
- 共享的用户数据页以只读方式映系统空间中包含关键信息。
- 核心高2GB空间分配详解
- 内核执行体、硬件驱动程序等关键系统组件的存储位置。
- 其他如系统缓存、缓冲池等的分布情况。
每个进程都拥有自己的虚拟内存地址空间,这些地址空间相互独立但又可以共享数据。虚拟内存地址本身并不直接对应任何物理地址;直接引用会导致错误。虚拟内存地址必须映物理地址后才能储存数据。内存分配和回收实质上是虚拟和物理内存之间的映射关系。
为了确保多道程序在内存中的正常运行并且互不干扰,需要采取一系列措施来防止访问越界和越权。这可以通过在CPU中设置下限寄存器和上限寄存器来实现,它们存放程序在内存中的上下限地址。当程序访问内存时,硬件会自动将目的地址与这些寄存器中的地址界限进行比较,从而判断是否越界。