C語言中文網
首頁 > 編程筆記 > 操作系統筆記 閱讀:758

邏輯地址空間和物理地址空間

CPU 生成的地址通常稱為邏輯地址,而內存單元看到的地址(即加載到內存地址寄存器的地址)通常稱為物理地址

編譯時和加載時的地址綁定方法生成相同的邏輯地址和物理地址。然而,執行時的地址綁定方案生成不同的邏輯地址和物理地址。在這種情況下,我們通常稱邏輯地址為虛擬地址,本節我們對邏輯地址和虛擬地址不加區別。

由程序所生成的所有邏輯地址的集合稱為邏輯地址空間,這些邏輯地址對應的所有物理地址的集合稱為物理地址空間。因此,對于執行時地址綁定方案,邏輯地址空間與物理地址空間是不同的。

從虛擬地址到物理地址的運行時映射是由內存管理單元(MMU)的硬件設備來完成。基地址寄存器這里稱為重定位寄存器。用戶進程所生成的地址在送交內存之前,都將加上重定位寄存器的值(如圖 1 所示)。

使用重定位寄存器的動態重定位
圖 1 使用重定位寄存器的動態重定位

例如,如果基地址為 14000,那么用戶對位置 0 的訪問將動態地重定位為位置 14000;對地址 346 的訪問將映射為位置 14346。

用戶程序不會看到真實的物理地址。程序可以創建一個指向位置 346 的指針,將它保存在內存中,使用它,將它與其他地址進行比較等,所有這些都是通過 346 這樣一個數字來進行。只有當它作為內存地址時(例如,在間接加載和保存時),它才會相對于基地址寄存器進行重定位。用戶程序處理邏輯地址,內存映射硬件將邏輯地址轉變為物理地址。所引用的內存地址只有在引用時才最后定位。

我們現在有兩種不同類型的地址:邏輯地址(范圍為 0?max)和物理地址(范圍為 R + 0~R + max,其中 R 為基地址的值)。用戶只生成邏輯地址,且以為進程的地址空間為  0?max。然而,這些邏輯地址在使用之前應映射到物理地址。邏輯地址空間綁定到另一單獨物理地址空間的這一概念對內存的管理至關重要。

所有教程

優秀文章

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo