1. 程式人生 > >實體地址、虛擬地址、邏輯地址、線性地址、虛擬記憶體

實體地址、虛擬地址、邏輯地址、線性地址、虛擬記憶體

1.實體地址

用於記憶體晶片級的單元定址,與處理器和CPU連線的地址匯流排相對應。

在實地址模式(因為真實模式沒有分段或分頁機制,Cpu不進行自動地址轉換),程式設計師操作的就是實體地址,所謂的實體地址就是實體記憶體上的32位地址,實體地址可以直接定位到實體記憶體上的位置,無論任何操作,最終都必須要得到實體地址才能在實體記憶體上進行操作.

2.虛擬地址作業系統都提供了虛擬記憶體virtual memory管理抽象程序使用虛擬記憶體中的地址,由作業系統協助相關硬體,把它轉換成真正的實體地址

有了虛擬記憶體,一個程式就可以使用比真實實體地址大得多的地址空間。所謂的虛擬地址,從廣義上講

,不是物理的就是虛擬的,因為不是實體地址的地址是無法在實體記憶體上定位的,所以他們都可以被稱為虛擬地址”,從這個意義上講,邏輯地址和線性地址都可以被稱為虛擬地址而從狹義上講,虛擬地址指的是沒有經過分頁機制和分段機制轉換的地址,也就是段暫存器和變址暫存器內容的組合,從這個意義上來說,虛擬地址就是類似於CS:SI這樣形式的地址.

3.邏輯地址Logical Address

邏輯地址就是上層程式設計師可以操作的地址,和段相關的偏移地址部分也就是變址暫存器中儲存的32偏移地址,而其他暫存器上的地址往往對於上層程式設計師來說是不可更改甚至是不可見的只有在真實模式下,邏輯地址才和實體地址一致

(因為真實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯地址也就是在保護模式下程式執行程式碼段限長內的偏移地址(假定程式碼段、資料段如果完全一樣).應用程式設計師僅需與邏輯地址打交道,而分段和分頁機制對您來說是完全透明的,僅由系統程式設計人員涉及.應用程式設計師雖然自己可以直接操作記憶體,那也只能在作業系統給你分配的記憶體段操作.

4.線性地址

對狹義上的虛擬地址通過分段機制以後,可以得到段基址段界限以及段偏移地址(即邏輯地址),段基址與段偏移地址的組合就是線性地址,線性地址可以在虛擬記憶體上完成定位如果啟用了分頁機制,那麼線性地址可以再經變換以產生一個實體地址.若沒有啟用分頁機制

,那麼線性地址直接就是實體地址.對於程式設計師來說,他們並不關注MMU如何工作以及其得到的結果,他們只需要關心線性地址或者邏輯地址就可以完成全部工作了.

5.虛擬記憶體

是指計算機呈現出要比實際擁有的記憶體大得多的記憶體量.因此它允許程式設計師編制並執行比實際系統擁有的記憶體大得多的程式.這使得許多大型專案也能夠在具有有限記憶體資源的系統上實現.

很多記憶體管理策略都需要同時將多個程序放在記憶體中,以便執行這些程序,這些策略都需要在程序執行之前將整個程序放在記憶體中。而虛擬記憶體技術允許執行程序不必完全放在記憶體中,這樣我們就可以執行比實體記憶體大的程式,使得程式設計師不受記憶體儲存的限制。

    比如說異常處理、錯誤處理可能不經常執行或者就不執行,這些程式使得我們可以只需要載入需要執行的部分,從而減少了記憶體使用。

    從而,構造一個大的虛擬記憶體空間,將其對映到較小的實體記憶體。這個大的虛擬記憶體空間儲存我們程序的所有資訊,而當執行程序時,我們只加載需要執行的部分,。這裡就需要採用一定的技術,比如按需調頁、頁面置換、幀分配等,使得程序的執行可以在虛擬記憶體和實體記憶體之間進行協調,完成整個程式的執行。

    優點:虛擬記憶體可以大於實體記憶體,一般為實體記憶體的1.5倍到3倍,從而可以執行比實體記憶體大的程式,進而使得更多的程式可以同時執行,提高了多道程式的程度,增加了CPU的使用率,並且使得程序之間的獨立性得到了更好的體現。

6.記憶體的基本管理(頁  段  段頁)

1通常將邏輯記憶體進行分頁,將邏輯記憶體分成很多小的頁面,然後通過頁表,對映到實體記憶體,而實體記憶體則劃分為很多成為幀的塊,從而和頁對應起來,頁和幀的對應關係主要是通過頁表來儲存的,頁表中有很多條目,較為詳細地儲存了這些資訊。程序都有自己的記憶體空間(虛擬記憶體),上面所說的虛擬記憶體技術就是指程序的虛擬記憶體空間儲存了所有的程序資訊,然後虛擬記憶體空間分成很多頁,這些頁並不是在程序執行時全部換入到實體記憶體,而是按照需要進行換入,這需要一定的演算法管理

    虛擬記憶體(虛擬儲存器)是計算機系統記憶體管理的一種技術。它使得應用程式認為它擁有連續的可用的記憶體(一個連續完整的地址空間),而實際上,它通常是被分隔成多個實體記憶體碎片,

    虛擬儲存器是由硬體和作業系統自動實現儲存資訊排程和管理的。它的工作過程包括6個步驟:

  1CPU訪問主存的邏輯地址分解成組號a和組內地址b,並對組號a進行地址變換,即將邏輯組號a作為索引,查地址變換表,以確定該組資訊是否存放在主存內。  2)如該組號已在主存內,則轉而執行;如果該組號不在主存內,則檢查主存中是否有空閒區,如果沒有,便將某個暫時不用的組調出送往輔存,以便將這組資訊調入主存。  3)從輔存讀出所要的組,並送到主存空閒區,然後將那個空閒的物理組號a和邏輯組號a登入在地址變換表中。  4)從地址變換表讀出與邏輯組號a對應的物理組號a  5)從物理組號a和組內位元組地址b得到實體地址。  6)根據實體地址從主存中存取必要的資訊。    排程方式有分頁式、段式、段頁式3種。

頁式排程是將邏輯和實體地址空間都分成固定大小的頁。主存按頁順序編號,而每個獨立編址的程式空間有自己的頁號順序,通過排程輔存中程式的各頁可以離散裝入主存中不同的頁面位置,並可據表一一對應檢索。頁式排程的優點沒有外碎片只有內碎片,頁表對程式設計師來說是透明的,地址變換快,調入操作簡單;缺點各頁不是程式的獨立模組不便於實現程式和資料的保護

段式排程是按程式的邏輯結構劃分地址空間,段的長度不等的,並且允許伸長,它的優點是消除了內碎片有外碎片易於實現儲存保護,便於程式動態裝配;缺點是調入操作複雜

段頁式排程中把物理空間分成頁程式按模組分段,每個段再分成與物理空間頁同樣小的頁面。段頁式排程綜合了段式和頁式的優點。其缺點是增加了硬體成本,軟體也較複雜。大型通用計算機系統多數採用段頁式排程。