高級言語の歩み

 OSの講義を受けていて気になったことがあった。それを調べた結果のまとめ。

ソースコードから実行ファイルへの道のり

 気になったこととは何かというと、高級言語ソースコードが実行ファイルになるまでの過程である。3年前期に受けたコンパイラの講義で、その流れを聞いた気がするが記憶がおぼろげなため一回調べて軽くまとめてみる。

  1. プリプロセッサ
    • 入力 : ソースファイル、ヘッダファイル
    • 出力 : 前処理済みファイル
    • 処理 : "#include", "#define"などの処理をする
  1. コンパイラ
  1. アセンブラ
    • 入力 : アセンブリファイル
    • 出力 : オブジェクトファイル(program.o)
    • 処理 : 外部参照以外の部分をアセンブリ言語から機械語に翻訳する。外部参照とは、別のオブジェクトファイルやライブラリファイルの関数である。
  1. リンカ
    • 入力 : オブジェクトファイル、ライブラリファイル
    • 出力 : 実行形式ファイル(program.exe)
    • 処理 : 指定されたオブジェクトファイルやライブラリファイルをリンクして実行形式ファイルに変換する。ここで処理の手順や使う関数が全てが分かるので、命令の相対アドレスを決める。
  1. ローダ

 おまけ。実行形式ファイルを実行するとローダによってメモリへロードされ、各命令の相対アドレスを絶対アドレスへ変換する。そしてプログラムの処理を実行する。

参考

 以下のwebページの画像が分かりやすい。これを、コンパイラの講義資料を参考に、文章にまとめただけ。
http://ocw.kyoto-u.ac.jp/09-faculty-of-engineering-jp/compiler