操作系統中邏輯地址和物理地址的區別

來自公衆號:嵌入式應用研究院

本文是關於操作系統中邏輯地址和物理地址之間的區別。計算機操作系統中的內存使用兩種不同類型的地址。物理地址是內存的實際地址,如RAM,虛擬地址只是緩存和RAM之間的邏輯地址映射。

在操作系統中,每當我們談論代碼或其部分的地址或地址空間時,我們指的是該部分代碼所在的內存位置。讓我們通過一個現實生活中的異常來了解操作系統中的尋址。在現實生活中,我們的房子都有特定的地址,所以如果我們想去某個特定的人的地方,我們會記得他 / 她的房子的地址。操作系統中的地址也是如此。我們將數據存儲在不同位置的內存中,併爲它們分配不同的地址,以便我們將來可以使用存儲它們的相同地址再次訪問它們。在操作系統中,我們使用 32 位體系結構中的 32 位地址空間和0xFFFFFFFF形式的十六進制數,從 0x000000000xFFFFFFFF

在對地址以及爲什麼需要它們進行了快速討論之後,我們現在將區分邏輯地址和物理地址。

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 單元都有兩個寄存器,稱爲基址寄存器和界限寄存器。基址寄存器中包含特定進程(正在運行)的內存部分的起始地址。例如,當硬件需要取一些指令時,首先需要將基址寄存器的值與邏輯地址相加,得到物理地址。因此,基址寄存器與訪問內存有關,另一方面,界限寄存器要麼存儲特定進程的內存部分的結束地址,要麼還可能包含內存部分的總大小(包括代碼、堆棧和堆)。它僅用於保護,以便進程不超過分配給它的內存區域,並且它可能不會跳入另一個進程的內存區域。下面給出了邏輯地址和物理地址的一般比較。

OnV7qD

3、文獻引用

[1] Yuvayana. (2020, August 13). What Is Memory Management Unit (MMU)? https://er.yuvayana.org/what-is-memory-management-unit-mmu/

[2] Colin walls, & Dimitrios serpanos. (2012). Memory Management Unit. https://www.sciencedirect.com/topics/computer-science/memory-management-unit

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_24ZUXyXBn9229Gc7k0YLQ