
連結器(用於執行編譯後的連結)和載入器(用於執行執行檔)的存在是否不依賴Linux等作業系統? (我曾經認為Linux中的連結器和載入器要么由作業系統提供,要么像其他應用程式一樣由軟體提供。現在我認為它們非常特殊且不同。無論安裝哪個作業系統,它們都可能是相同的。 )
連結器和載入器是否存在於機器語言(即 ISA 等級)? (在該級別,沒有作業系統。)還是彙編語言級別?
從程式軟體的角度來看,將作業系統視為程式庫是否正確?
謝謝。
我想知道將連結器和載入器安裝到電腦系統的層級/層中的位置。
有關電腦系統的層/級別,請參閱 Nisan 的《電腦系統的要素》:
有關連結和加載,請參閱電腦系統:程式設計師的視角
答案1
連結器(用於執行編譯後的連結)和載入器(用於執行執行檔)的存在是否不依賴Linux等作業系統? (我曾經認為Linux中的連結器和載入器要么由作業系統提供,要么像其他應用程式一樣由軟體提供。現在我認為它們非常特殊和不同。)
與任何其他應用程式一樣,連結器和載入器都有特定的用途。它們對於構建靜態程序以及構建和加載動態程序很重要,但它們是“普通”應用程序(或庫,在運行時加載程序的情況下) -IE雖然它們很複雜,但可以說它們並不依賴作業系統的特殊支援。
因此可以將一個作業系統的程式連結到另一個作業系統(例如在 Linux 上建立 Windows 程序,反之亦然),並在另一個系統上載入為一個系統建置的動態連結程式(請參閱 Wine)。對作業系統的主要要求是它提供某種載入新可執行內容的方法(IE允許正在運行的程式向自身添加可執行記憶體),並且允許對虛擬位址空間進行足夠的控制以滿足程式的要求(特別是用於載入可執行檔和庫的基底位址)。
連結器和載入器是否存在於機器語言(即 ISA 等級)? (在該級別,沒有作業系統。)還是彙編語言級別?
我不確定是什麼導致了這些問題,但連結器對符號和地址進行操作。它們使用包含匯入和匯出符號表的目標文件,以及填充連結器計算值的重定位條目。
將作業系統視為程式庫是否正確?
這是非常有限的。作業系統為在其上運行的應用程式提供一些服務,但它的作用遠不止於此,即使是非常簡單的作業系統(8 位元微處理器、MS-DOS 等);例如,它處理硬體中斷、調度進程(對於多任務系統)、控制存取權限(對於具有存取控制的多用戶系統)...
我的印像是,您所指的圖表作為書籍地圖比作為理解電腦體系結構的方式更有用。