内存与内存管理
参考文档
B站:《王道考研 操作系统》
《现代操作系统》
文章目录
一、内存概述
1.1 内存
内存是用于存放数据的硬件,程序执行前需要先放到内存中才能被CPU处理,这是为了缓和CPU与硬盘之间的速度矛盾。
内存通过对内部的存储单元编址来解决并发执行下各个程序的数据区分。分为按字节编址(每个存储单元大小为1字节(1B),即 8个二进制位)和按字编址(每个存储单元大小为 1个字,即 16 个二进制位)。
指令的工作基于“地址”,每个地址对应一个数据的存储单元,会告诉CPU应该去内存的哪个地址读/写数据,通常是逻辑地址:
- 逻辑地址:程序经过编译、链接后生成的指令中指明的地址,又称为相对地址。在实际放入内存后再根据起始位置得到“绝对位置”。
程序编译后,通过链接程序可以将编译后的一组目标模块及库函数链接在一起,形成完整的装入模块,并有完整的逻辑地址。此时可以通过装入程序将装入模块装入内存运行,这一步实现了逻辑地址到物理地址的转换。
现在普遍使用的装入方式为动态重定位,又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始的,装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址,这种方式需要一个重定位寄存器(存放装入模块存放的起始位置)的支持。
1.2 CPU寻址
内存通常被组织为一个由M个连续的字节大小的单元组成的数组,每个字节都有一个唯一的物理地址,作为到数组的索引。CPU访问内存最简单直接的方法就是使用物理地址,这种寻址方式被称为物理寻址。但是,如果直接把物理地址暴露出来的话会对操作系统造成伤害,给同时运行多个程序的情况造成困难。
现代处理器使用的是虚拟寻址方式,使用虚拟寻址,CPU需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。
虚拟寻址需要硬件与操作系统之间互相合作,CPU中有一个被称为内存管理单元(MMU)的硬件,它的功能是将虚拟地址转换为物理地址。MMU需要借助存放在内存中的页表来动态翻译虚拟地址,该页表由操作系统管理。