オペレーティングシステム (環境情報学科3年次後期配当 火曜日3限)


■3.10/8 (シラバス:4.プログラミング言語とプログラムの実行)

【目的】プログラムは何(プログラム言語)によって記述され,どのように
実行可能な形に変換され,どのようにメモリ上に読み込まれ,どのように
実行されるのか,これらの概要を知るのが目的。

●テキストでの対応部分
 2.3 プログラムの実行



 プログラムは,機械語と処理対象のデータからなる。昔は,機械語を人間が解釈しやすい形式(アセンブリ言語と呼ばれる)で書いて,それを機械語に直してプログラムにした。以下はアセンブリ言語で,プログラムを作成する過程である。
 人間が読めるようにテキスト形式でかかれたプログラムを,ソースプログラムと呼ぶ。ソースプログラムは,専用のプログラムで機械語の集まりであるプログラムに変換される。これを,「コンパイルする」と言い,コンパイルするプログラムを,コンパイラーと呼ぶ。



 アセンブリ言語は,人間がわかるように一定の定められた形式に従って書かれている。このような形式を
プログラミング言語と呼ぶ。

 しかし,アセンブリ言語は機械語をそのまま書くため,プログラム作成に非常に手間がかかるだけでなく,ソースプログラムを見ても,どのような処理をしているのか分かりづらい。そこで,より人間がわかりやすい形式でプログラムを書けるように工夫された高級プログラミング言語(high level programming language)というプログラミング言語が考案された。高級言語に対して,アセンブリ言語を低級プログラミング言語と呼ぶことがある。
 高級プログラミング言語としては,次のようなプログラミング言語がある。
  ・Fortran (数値計算用)
  ・Cobol (事務処理用)
  ・Lisp (汎用)
  ・Basic (汎用)
  ・C言語 (元々は,UNIX OSを開発するために考案され,現在では汎用に使用される)
  ・Pascal (教育用として開発されたが,後に汎用的に用いられるようになった)
  ・Perl (汎用)
  ・C++ (C言語をオブジェクト指向言語として改良したもの)
  ・Objective C (C言語をオブジェクト指向言語として改良したもの)
  ・C# (米Microsoft社が開発したC言語をオブジェクト指向言語として改良したもの)
  ・Java (米Sun Microsystems社が開発した汎用言語)
  ・Ruby (汎用)

以下は,10回"hello!"と表示するC言語のプログラムである。アセンブリ言語より人間に分かりやすい形式で書かれていることを確認せよ。


 下図は,C言語でプログラムを作成する過程を表している。プログラミング言語で書かれたプログラムをソースプログラムと言う。ソースプログラムは,コンパイラ(compiler)というプログラムによって,機械語で書かれたプログラムに変換(翻訳)される。この変換後の機械語で書かれたプログラムを,CPUに解釈・実行させることによって,プログラムを実行させることができる。C言語のように,コンパイラによっていっぺんに機械語に変換されるプログラミング言語をコンパイラ言語と呼ぶ。



 一方,ソースプログラムが,インタープリタ(interpreter)というソフトウェアが解釈・実行するプログラミング言語をインタプリタ言語と呼ぶ。下図に,コンパイラ言語とインタプリタ言語の違いを示す。



 通常,プログラムは,機能ごとにモジュール(module)に分けて開発する。下図に,ひとつのプログラムが,モジュールによって構成されている様子を示す。
 たとえば,モジュールA,B,Cは,直接オペレーティングシステムが提供している機能(API)を利用している。また,モジュールDは,プログラミング言語に付属してくるランタイムライブラリの機能を利用している。モジュールEは,ランタイムライブラリとモジュールA,Bの機能を利用している。モジュールFは,モジュールB,Cの機能を利用している。モジュールGは,モジュールD,Eを利用している。モジュールHは,モジュールD,E,B,Fの機能を利用している。

 モジュールに分割することによって,プログラムの構造の見通しが良くなる。また,モジュールごとに担当者を決めて開発を分担することが可能になる。使いやすいモジュールは,他のプログラムに再利用が可能になるので,開発コストを下げることができる。

 実際に,プログラムを作成するには,モジュールごとにコンパイルし,最後にひとつのプログラムにするために,合成する。この合成作業を,リンクと呼び,リンクを行うプログラムをリンカ(linker)と呼ぶ。

 上図のように,リンクをして完全なプログラムをあらかじめ作成しておく方法を静的リンクと呼ぶ。一方,プログラムの実行が必要になったときに,随時リンクを行う方法を,動的リンク(下図)と呼ぶ。






戻る