主記憶體:配置、連結與分段
載入器(the loader)
如果連結器是把完成的書組裝起來的編輯,那麼載入器就是把那本印好的書從架上取下、攤開在你桌上讓你真正能讀的圖書館員。載入器是作業系統中負責把躺在磁碟上的可執行檔搬進主記憶體、成為一個執行中行程、佈置妥當並準備好讓 CPU 開始執行的那一部分。
具體來說,當你啟動一個程式,載入器讀取可執行檔、為它配置記憶體、把它的程式碼與資料複製(或映射)進那塊記憶體、佈置行程的堆疊與任何初始狀態、若程式未被放到它預期的位址就執行最後的重定位,最後把控制權轉移到程式的進入點,讓它開始執行。在執行時繫結下,載入器可以把程式放到任何有空閒 RAM 的地方,讓記憶體管理單元負責轉譯;在載入時繫結下,載入器本身在把程式複製進來時做重定位修正。
為什麼重要:載入器是從靜態檔案到活生生行程的橋樑——磁碟上的任何東西,在載入器把它搬進記憶體之前永遠不會執行,因為 CPU 只從主記憶體執行。載入器與動態連結密切合作:在現代系統上,載入器(或它呼叫的動態連結器)還會定位程式所需的共享程式庫,並在啟動時把它們接上。記清順序:編譯,然後連結(建置時),然後載入(啟動時),然後執行。
你雙擊一個程式。載入器配置記憶體、把可執行檔的程式碼與資料複製進來、佈置堆疊、必要時修正位址、定位任何共享程式庫,並跳到進入點——直到此刻程式才開始執行。
從磁碟上的一個檔案,變成記憶體裡一個活生生的行程。
連結器與載入器是經典的考試陷阱:連結器在建置時執行一次並建立可執行檔;載入器在每次啟動時執行並建立執行中行程。它們是在不同時間行動的不同工具。
又稱
另見