主記憶體:配置、連結與分段
邏輯位址(a logical address)
假設一齣戲裡的每位演員拿到的劇本都從第 1 頁開始編號,不論他們在哪個劇院演出。在劇本裡,「翻到第 40 頁」永遠代表同一件事,即使建築物裡實際的座位號碼跟那些頁碼毫無關係。邏輯位址就像那個頁碼:它是程式在自己私有世界裡使用的位址,彷彿程式從零開始計算,與它在實體記憶體裡真正的位置無關。
具體來說,當你的程式碼做出像「載入位址 1000 處的值」這樣的動作時,那個 1000 就是邏輯位址——由 CPU 在執行程式時產生。它(一般而言)不是 RAM 晶片裡真正的位置。在存取真正發生之前,那個邏輯位址必須在指令執行時被一塊硬體轉換成實體位址。在最簡單的方案中,這個轉譯就只是一次加法:實體 = 邏輯 + 基底,其中基底是程式實際被放置的位置。一個程式能產生的全部邏輯位址,稱為它的邏輯(或虛擬)位址空間。
為什麼重要:這種分離正是讓許多程式得以共存的關鍵觀念。每個程式都可以彷彿擁有從零開始的記憶體那樣撰寫與編譯,而作業系統則悄悄地把不同程式放在不同的實體位置。程式永遠不需要、也不必在意它真正住在哪裡。在幾乎所有現代系統中,「邏輯位址」與「虛擬位址」是同一回事。
同一個計算機程式的兩份副本,都用邏輯位址 0 來指它們的第一道指令。作業系統把副本 A 放在實體 5000、把副本 B 放在實體 90000,於是副本 A 的邏輯 0 變成實體 5000、副本 B 的變成實體 90000——毫無衝突。
相同的邏輯位址可以對應到完全不同的實體位置。
若程式在編譯時就被綁定到實體位址,你就無法自由重定位它,也無法同時執行兩份副本。邏輯與實體的分離正是換來那份自由的關鍵。
又称
另见