連結器與載入器與執行檔格式

當100個行程使用相同的共用函式庫時,關於實體記憶體的使用方式,下列何者正確?

  1. A不會被改寫的程式碼分頁共用一份副本,會被寫入的資料分頁則每個行程各自持有
  2. B程式碼與資料都為每個行程持有100份副本
  3. C包含資料分頁在內全部共用一份,行程之間會看到彼此的值
查看答案與解析

正確答案:A. 不會被改寫的程式碼分頁共用一份副本,會被寫入的資料分頁則每個行程各自持有

作業系統會將共用函式庫對應到各行程的虛擬位址空間,使不會被改寫的程式碼與常數的分頁指向相同的實體分頁。至於變數等會被寫入的資料分頁,則在被寫入的時點建立副本(寫入時複製,copy-on-write)等,讓每個行程各自獨立。如此一來,即使有100個行程,函式庫程式碼所佔的記憶體也只需要一份。

  • A. 正確。藉由虛擬記憶體對應到相同的實體分頁。
  • B. 連程式碼都複製的話,共用函式庫的優點就沒了。
  • C. 資料是依行程分開的。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 對目的檔進行反組譯時,發現呼叫外部函式printf之指令的跳躍目標是0這樣的暫時值。這個值會在何時被正確填入?
  2. 關於嵌入式開發中使用的連結器腳本(linker script)的功用,下列何者正確?
  3. 在沒有作業系統的微控制器上,通電後啟動程式碼在呼叫main之前所進行的處理,下列何者正確?
  4. 關於ELF檔案中的「區段(section)」與「段(segment)」的差異,下列何者正確?
  5. 藉由不讓記憶體分頁同時具備「可寫入」與「可執行」(W^X,寫入與執行分離),較容易防禦的攻擊為下列何者?

這個領域的比較