操作系统中逻辑地址和物理地址有什么区别?
![]()
这篇文章是关于操作系统中逻辑地址和物理地址的区别。内存和计算机操作系统使用两种不同类型的地址。物理地址是内存的实际地址,如RAM,虚拟地址只是缓存与RAM之间的逻辑地址映射。
在操作系统中,当我们谈论代码或其一部分的地址或地址空间时,我们指的是该部分代码所在的内存位置。让我们通过现实生活中的异常来了解操作系统中的地址。在现实生活中,我们的房子都有特定的地址,所以当我们想去某个人的地方时,我们会记住他家的地址。这同样适用于操作系统中的地址。我们将数据存储在内存中的不同位置,并为它们分配不同的地址,以便将来可以使用存储它们的相同地址再次获取它们。在操作系统中,我们使用 32 位架构中的 32 位地址空间和 0xFFFFFFFF 形式的十六进制数,从 0x00000000FFFFFFFF FF。
在快速讨论了地址以及为什么需要它们之后,我们现在将区分逻辑地址和物理地址。
1。逻辑地址简介
当我们谈论逻辑地址时,我们指的是CPU分配给每个进程的地址。正如我们所讨论的,进程在内存中的实际地址与进程认为的地址不同。当进程共享内存而不知道它们彼此共享相同的内存空间时,基本上需要这种地址映射。现在让我们讨论逻辑地址。
每当 CPU 运行一个进程时,它都会为该进程分配特定的内存。下图简单说明了内存段的划分,其中程序代码段位于低地址,堆栈位于高地址。
![]()
图1.1:进程内存空间
这个分配的内存空间位于CPU为进程生成的虚拟地址(虚拟或逻辑地址),指的是进程内存空间,其中代码、堆和进程的堆栈部分将驻留。 。这个逻辑地址无疑与内存空间中的实际地址不同。虚拟地址也称为主存储器中真实或物理地址的引用或指针。
大多数操作系统在其程序中定义基址。当生成逻辑地址时,CPU 也会生成一个地址。程序将基地址与CPU生成的地址相加得到逻辑地址,即
逻辑地址=基地址+CPU生成的地址
逻辑地址空间是指所有生成的逻辑地址的集合CPU。
2。物理地址简介
物理地址是进程及其内容在主存或硬盘上放置的地址。当我们运行一个进程或在计算机的主或辅助存储设备中保存一些数据时,我们总是会保存它,以便将来随时访问。比如我电脑的D盘里存放着一个word文件,我想访问它。我将来如何访问它?当然是到D盘,打开word文件。但是,如果我将一个进程保存在主内存中的某个存储单元或内存单元中,并希望将来访问它,该怎么办?关于我们在本教程中查看的地址,我们知道每次创建进程时,CPU 都会生成其虚拟地址,但这又是一团糟。虚拟地址与进程实际放置在内存中的地址不同。
然而,内存单元存储在主存中,通过物理地址(用户不知道)访问,我们所知道的只是进程的逻辑地址。那么如果我们需要访问进程的话,我们该如何访问物理地址呢?到目前为止,这似乎是不可能的,但这肯定不是因为自计算机诞生以来我们就可以访问创建的进程。
所以,我们需要详细讨论这个话题。在进程创建时,CPU不仅会生成虚拟地址,还会使用一些硬件支持将(先前生成的)虚拟地址映射到实际存储的物理地址,这将在下面的地址映射部分中讨论。因此,当我们尝试访问一个已经存储在内存中的进程时,CPU会将虚拟地址返回给硬件,硬件将虚拟/逻辑地址映射到物理地址,并间接映射到进程的内存空间。
2.1。地址映射
现在让我们讨论硬件如何执行逻辑地址和物理地址之间的映射。在CPU和内存管理单元(MMU)的硬件中安装有利于地址卡的使用。下图很好地解释了这一点。
![]()
图 1.2:逻辑地址到物理地址的映射
该内存管理单元完成从物理地址到逻辑地址的所有必要映射。 MMU 执行的整个基础映射是通过称为边界和基础的方案来执行的。这是执行映射最简单的方法。随着地址的映射变得越来越复杂,我们需要向内存管理单元添加越来越多的硬件。我们来讨论基址寄存器和限制寄存器。
2.2。基地址和限制方法
![]()
图1.3:基地址和限制地址的转换
在基于限制和基地址的方法中,每个MMU 单元有两个寄存器,称为基地址寄存器和限制寄存器。基址寄存器包含特定进程(正在运行)的内存部分的起始地址。例如,当硬件需要取某条指令时,必须先将基地址寄存器的值与逻辑地址相加,得到物理地址。因此,基址寄存器与对内存的访问有关,另一方面,边界寄存器要么存储特定进程的内存部分的结束地址,要么还可以包含内存部分的总大小(包括代码、堆栈、和堆)。 )。它仅用于保护,使一个进程不会超出分配给它的内存区域,也不能跳转到另一个进程的内存区域。下面给出了逻辑地址和物理地址的一般比较。
| 物理地址 | 逻辑地址 | ||
|---|---|---|---|
| 定义 | 物理内存地址 | 虚拟地址 | |
| 指物理地址/实际地址 对于逻辑地址空间 | |||
| 可见能力 | 仅对开发者可见,对程序员不可见 | 仅对用户可见 | |
| 访问 | 用户在任何情况下都无法访问 | ||
| 由 | 由 CPU 生成 | 由 MMU 生成 | 。文学引用[1] Yuvayana。 (2020 年 8 月 13 日)。什么是内存管理单元(MMU)? https://er.yuvayana.org/what-is-memory-management-unit-mmu/ [2] Colin Maueren 和 Dimitrios Serpanos。 (2012)。内存管理单元。 https://www.sciencedirect。 com/topics/computer-science/memory-management-unit来源 |嵌入式应用研究院(ID:gh_d6ff851b4069) |
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网