计算机操作系统中的内存使用同时包含两种不同类型的地址。物理地址表示内存的实际位置,比如RAM;虚拟地址则是缓存和RAM之间的逻辑地址映射。
在操作系统中,当我们讨论代码或其中的某个部分的地址或地址空间时,我们指的是该部分代码在内存中的位置。为了更好地理解操作系统中的寻址,让我们通过一个现实生活的比喻来解释。在现实生活中,每间房子都有独特的地址,所以当我们要去某人的居所时,我们会记住他/她的房子地址。在操作系统中,地址也是如此。我们将数据存储在内存的不同位置,并为它们分配不同的地址,以便以后可以通过相同的地址再次访问它们。在操作系统中,我们使用32位体系结构中的32位地址空间,表示为从0x00000000到0xFFFFFFFF的十六进制数。
在对地址及其必要性进行简要讨论后,现在我们来区分逻辑地址和物理地址。
1、逻辑地址的简要介绍
当谈论逻辑地址时,我们指的是CPU为每个进程所分配的地址。正如我们已经讨论过的,进程在内存中的实际地址与进程本身认为的地址是不同的。这种地址映射基本上是在进程共享内存时必需的,因为进程无需知道彼此共享相同的内存空间。现在,让我们详细讨论逻辑地址。
每当CPU运行一个进程时,它都会为该进程分配特定的内存空间。下图简要展示了内存段在不同位置的划分方式,其中程序代码段位于低地址,栈位于高地址。
![image-20231113223141085](https://pic.imgdb.cn/item/65523390c458853aef700a91.png)
图1.1:进程的内存空间
此分配的内存空间位于 CPU 为进程生成的虚拟地址(虚拟或逻辑地址),指示进程的代码、堆和堆栈部分将驻留的进程的内存空间。这个逻辑地址无疑与内存空间的实际地址不同。虚拟地址也称为指向主存储器中实际或物理地址的引用或指针。
大多数操作系统在其程序中都定义了基地址,在生成逻辑地址时,CPU 生成一个地址,程序将基地址与 CPU 生成的地址相加得到逻辑地址,即
逻辑地址 = 基地址 + CPU 生成地址
一个逻辑地址空间是指CPU产生的所有逻辑地址的集合。
2、物理地址简介
物理地址是进程及其内容放置在主内存或硬盘中的地址。每当我们运行一个进程或将一些数据存储在计算机的主存储设备或辅助存储设备中时,我们总是将其存储起来以备将来随时访问。比如我在电脑的D盘存了一个word文件,我想访问它,以后怎么访问?当然是去D盘打开word文件。但是如果我将一个进程保存在主存中的某个存储单元或内存单元中,并希望将来访问它,该怎么办。就我们在本教程中研究过的地址而言,我们知道每当一个进程被创建时,CPU 都会生成它的虚拟地址,但又是一团糟。虚拟地址与进程实际放置在内存中的地址不同。
然而,内存单元存储在由物理地址(用户未知)访问的主内存中,我们所知道的只是进程的逻辑地址。那么当我们需要访问进程的时候我们将如何访问物理地址呢?到目前为止,这似乎是不可能的,但这当然不是因为我们从计算机诞生到现在一直在访问创建的进程。
因此,我们需要详细讨论这个问题。在进程创建时,CPU 不仅会生成虚拟地址,还会使用一些硬件支持将(先前生成的)虚拟地址映射到实际存储它的物理地址,这在下面的地址映射部分进行了讨论。因此,当我们尝试访问内存中已经保存的进程时,CPU 将虚拟地址返回给硬件,硬件将虚拟/逻辑地址映射到物理地址上,并间接访问进程的内存空间。
2.1、地址映射
现在让我们讨论硬件如何在逻辑地址和物理地址之间执行映射。在CPU和内存管理单元(MMU)的硬件中安装有助于地址的映射。下图很好的解释了。
![image-20231113223144267](https://pic.imgdb.cn/item/65523390c458853aef700a9a.png)
图1.2:逻辑地址到物理地址的映射
这个内存管理单元对逻辑地址上的物理地址执行所有必需的映射。由MMU执行的非常基本的映射是由一种称为界限和基址的方案执行的。这是执行映射可以使用的最简单的方法。随着地址的映射变得越来越复杂,我们需要向内存管理单元添加越来越多的硬件。让我们讨论基址寄存器和界限寄存器。
2.2、基址和界限法
![image-20231113223147626](https://pic.imgdb.cn/item/65523390c458853aef700a92.png)
图1.3:基地址和边界地址的转换
在基于界限和基址的方法中,每个 MMU 单元都有两个寄存器,称为基址寄存器和界限寄存器。基址寄存器中包含特定进程(正在运行)的内存部分的起始地址。例如,当硬件需要取一些指令时,首先需要将基址寄存器的值与逻辑地址相加,得到物理地址。因此,基址寄存器与访问内存有关,另一方面,界限寄存器要么存储特定进程的内存部分的结束地址,要么还可能包含内存部分的总大小(包括代码、堆栈和堆)。它仅用于保护,以便进程不超过分配给它的内存区域,并且它可能不会跳入另一个进程的内存区域。下面给出了逻辑地址和物理地址的一般比较。
物理地址 | 逻辑地址 | |
---|---|---|
定义 | 物理内存地址 | 虚拟地址 |
空间 | 内存空间所在的实际内存地址 | 引用物理地址/实际地址,称为逻辑地址空间 |
可见性 | 只对开发人员可见,对程序员不可见 | 只对用户可见 |
访问 | 用户在任何情况下都无法访问 | 用户可以轻松访问 |
生成 | 由 CPU 生成 | 由 MMU 生成 |
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !
![137e00002230ad9f26e78-265x300](https://pic.imgdb.cn/item/65523390c458853aef700bae.png)