一、物理地址空間與邏輯地址空間的區別
1、程序經過編譯後,每個目標模塊都是從0號單元
開始編址,稱爲該目標模塊的相對地址(或邏輯地址)。
2、當鏈接程序將各個模塊鏈接
成一個完整的可執行目標程序
時,鏈接程序順序依次按各個模塊的相對地址構成統一的從0號單元開始編址的邏輯地址空間
。
3、用戶程序和程序員只需知道邏輯地址
,而內存管理的具體機制則是完全透明的,它們只有系統編程人員纔會涉及。
4、不同進程可以有相同的邏輯地址,因爲這些相同的邏輯地址可以映射
到主存的不同位置。
5、物理地址空間是指內存中物理單元
的集合,它是地址轉換的最終地址,進程在運行時執行指令
和訪問數據
都要通過物理地址從主存中存取。當裝入程序(Loader)將可執行代碼裝入內存時,必須通過地址轉換
將邏輯地址轉換成物理地址,這個過程稱爲地址重定位
。
二、地址安全檢測
1)內存分配前,需要保護操作系統
不受用戶進程
的影響,同時保護用戶進程
不受其他用戶進程
的影響。
2)通過採用重定位寄存器
和界地址寄存器
來實現這種保護。重定位寄存器含最小的物理地址值,界地址寄存器含邏輯地址值。每個邏輯地址值必須小於
界地址寄存器,
3)內存管理機構動態的將邏輯地址與界地址寄存器進行比較
,如果未發生地址越界,則加上重定位寄存器的值後映射成物理地址,再送交內存單元。
4)當CPU調度程序選擇進程執行時,派遣程序會初始化
重定位寄存器和界地址寄存器。每一個邏輯地址都需要與這兩個寄存器進行覈對
,以保證操作系統和其他用戶進程(程序)及數據不被該進程的運行所影響。
如果地址越界,會出現內存訪問異常!