リンカ・ローダと実行形式

100個のプロセスが同じ共有ライブラリを使っているとき、物理メモリの使い方として正しいものはどれか。

  1. A書き換えないコードのページは1つのコピーを共有し、書き込むデータのページはプロセスごとに持つ
  2. Bコードもデータも、プロセスごとに100個のコピーを持つ
  3. Cデータのページも含めてすべて1つを共有し、プロセス同士で値が見えてしまう
答えと解説を見る

正解:A. 書き換えないコードのページは1つのコピーを共有し、書き込むデータのページはプロセスごとに持つ

OSは各プロセスの仮想アドレス空間に共有ライブラリを対応づけ、書き換えないコードや定数のページは同じ物理ページを指すようにします。変数などの書き込むデータのページは、書き込まれた時点でコピーを作る(コピーオンライト)などして、プロセスごとに別にします。こうして、100個のプロセスでもライブラリのコードの分のメモリは1つで済みます。

  • A. 正しい。仮想記憶で同じ物理ページを対応づけます。
  • B. コードまでコピーすると、共有ライブラリの利点がなくなります。
  • C. データはプロセスごとに分けられます。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. オブジェクトファイルを逆アセンブルすると、外部の関数printfを呼ぶ命令の飛び先が0のように仮の値になっていた。この値はいつ正しく埋められるか。
  2. 組込み向けの開発で使うリンカスクリプトの役割として正しいものはどれか。
  3. OSのないマイコンで、電源を入れた直後に起動コードがmainを呼ぶ前に行う処理として正しいものはどれか。
  4. ELFのファイルにおける「セクション」と「セグメント」の違いとして正しいものはどれか。
  5. メモリのページに「書き込み可能」と「実行可能」を同時には許さない(W^X、書き込みと実行の分離)ことで防ぎやすくなる攻撃はどれか。