第9章コンパイラ コンピュータプログラムが実行されるまで 0/1に対応す る

第9章コンパイラ
小林広明
2002年7月12日
<計算機工学>
7/12/2002
1
コンピュータプログラムが実行されるまで
高水準
言語
高級言語
プログラム
アセンブリ
プログラム
機械語
プログラム
低水準
言語
0/1に
に対応す
る電気信号
7/12/2002
翻訳
(コンパイラ)
コンパイラ)
変換
(アセンブラ)
アセンブラ)
ハードウェア・
ソフトウェア境界
<計算機工学>
y = a+b;
if y>100 then x=100
else x =-100
….
ld r1 a
ld r2 b
add r3 r1 r2
beqz L1
...
0100 0011 0111
0000 0110 0000
...
2
1
言語プロセッサ
•
コンパイラ
– 高級言語で記述されたプログラムを機械語に翻訳する
• 高級言語: C,PASCAL,FORTRAN,COBOL,LISP,BASIC…
– 逐次処理,繰り返し構文,条件判断構文 ,サブルーチン呼出し,
四則演算を含む算術式を記述できる人工言語
– 豊富なデータ構造
» 配列,構造体,ポインター,浮動小数点数,文字列,複素
数,…
•
アセンブラ
– 機械語に1対1に対応するアセンブリ言語で記述されたプログラムを機械
語に変換する
• アセンブリ言語はコンピュータ特有の命令から構成
– 固有の機械命令と型を持たないデータ
– 演算操作,レジスタ操作,メモリ操作を直接記述
<計算機工学>
7/12/2002
3
高級言語のもつプログラム構造
処理
処理
yes
処理
判断
no
no
判断
処理
yes
処理
処理
処理
逐次処理
7/12/2002
判断処理
<計算機工学>
繰り返し処理
4
2
サブルーチン機能
•
サブルーチン
– 1つのまとまった機能を果たすプ
ログラム
• sin関数を計算するサブルー
チンなど
– ほかのプログラムから呼び出され
る
– C/Pascalでは手続き(procedure),
関数(function)として定義
M:メインルーチン,A,C:サブルーチン
7/12/2002
<計算機工学>
5
コンパイラの構造
•
字句解析
ソースプログラム
•
構文解析
– プログラムが言語の文法規則に
合った正しい文かどうかを判断
•
コード生成
エラー処理
– ソースプログラムを解析し,数,プ
ログラム言語の指示文などを検
出する
字句解析
構文解析
•
最適化
– 処理の重複や無駄な計算の除去
•
最適化
– コンピュータの機械命令を生成
コード生成
エラー処理
– 字句解析および構文解析で検出
されたエラーを処理
7/12/2002
<計算機工学>
オブジェクトプログラム
6
3
構文解析
•
プログラムの文法をメタ言語で定義
– メタ言語:文法を記述する言語
例 BNF記法
– BNF記法の規則
• <> 1つの概念、変数を定義
• ::= 左辺を右辺で定義
• |
「または」の意味
– BNF記法を用いた算術式Eの定義
• E::=T|E+T|E-T
• T::=P|T×P|T/P
• P::=数|(E)
• 数::=変数|整数|実数
構文解析木
7/12/2002
<計算機工学>
7
コード生成
•
構文解析木からコンピュータの機械命令
を生成
例 スタックを利用した算術式のコード生成
c 算術式を構文木に変換
• スタックを使った変換アルゴリズム
d 構文木から逆ポーランド記法へ変換
• 解析木のノードをポストオーダー解析
で並べる
e 逆ポーランド記法から機械命令セット
(アーキテクチャ)に対応した機械語命令
列を生成
7/12/2002
<計算機工学>
逆ポーランド記法
A op B → A B op
8
4
コード生成:スタックアーキテクチャの場合
•
逆ポーランド記法からスタックを使って命
令コードを生成
•
逆ポーランド記法を左から走査し、
• 変数/定数ならスタックにプッシュ
• 演算子ならスタックから必要なオペラ
ンドデータを取り出して演算し、結果
をスタックに戻す
7/12/2002
Push
Push
Push
Push
Sub
Push
Push
Add
Div
Add
Pop
逆ポーランド記法
A op B → A B op
X
A1
A2
A3
A4
A5
X
<計算機工学>
9
コード生成:アキュミュレータアーキテクチャの場合
•
逆ポーランド記法を左から走査し、
– 変数/定数ならスタックにプッシュ
し、さらにスタックに要素が3つ以上
格納され,スタックの先頭の要素
から3番目の要素がAccという記
号なら
ST TEMPi
という命令を生成し、スタックの3番
目の要素をTEMPiとする
命令コード生成表
– 演算子なら表にしたがって命令を
生成し,スタックポインタを2つ減じ
たあとで、
• 演算子が=でなければ、Acc
という記号をスタックに入れる
• 演算子が=なら終わり
7/12/2002
<計算機工学>
10
5
コード生成:アキュミュレータアーキテクチャの場合(続き)
入力式
逆ポーランド記法変換式
7/12/2002
入力
X
A1
A2
A3
-
A4
A5
+
/
+
=
スタックの状態
X
A 1X
A 2A 1X
A 3A 2A 1X
AccA1X
A4Acc A1X
A5A4TEMP1A1X
AccTEMP1A1X
AccA1X
AccX
<計算機工学>
LD
SUB
A2
A3
ST
TEMP1
LD
ADD
A4
A5
ST
LD
DIV
TEMP2
TEMP1
TEMP2
ADD
A1
ST
X
11
13章オペレーティングシステム
小林広明
2002年7月12日
7/12/2002
<計算機工学>
12
6
オペレーティングシステム(OS)の目的
•
OSがないコンピュータ
– コンピュータのハードウェア要素を
直接利用者が操作しなければな
らない
• 操作が煩雑
• 非効率なコンピュータの利用
•
OSのないコンピュータの動作
OSの目的
– 利用者に対してコンピュータの
ハードウェアを意識させない,より
抽象度の高いサービスを提供
• 入出力
– ファイル操作
– 表示
• プログラム実行管理
• プログラム編集・コンパイル
• メモリ管理
OSの位置付け
<計算機工学>
7/12/2002
13
OSの基本機能
•
•
制御プログラム
– ジョブ管理
– プロセス・タスク管理
– メモリ管理
– ファイル管理
– 通信管理
処理プログラム
– コンパイラ
• 高級言語プログラムを機械
語に翻訳
– エディタ
• プログラムの編集・デバック
– ウインドウシステム
– コマンドインタプリタ
• シェル
7/12/2002
コンピュータシステムの構成
<計算機工学>
14
7
ジョブ管理
•
用語
•
ジョブ管理
– ジョブ
• ユーザの実行プログラム
– プロセス・タスク
• ジョブを実行する際、計算機
のハードウェア資源が割り当
てられる単位で、1つのジョブ
は複数のプロセス(タスク)か
ら構成される
– バッチ処理
• ジョブを順番に処理する。
– ただし,ジョブが入出力
処理を必要とするとき
は,入出力を別の処理
装置で行い,次のジョブ
に計算処理を移す
マルチプログラミング
<計算機工学>
7/12/2002
15
ジョブ管理(つづき)
•
タイムシェアリングシステム(TSS,
時分割)
– 複数のユーザに対し,単位時間
毎に均等に計算機を割り当てる
• 並行処理、擬似並列処理
– UNIX
Ö プロセスは実行中,待機、実行可
の3つの状態を遷移する
•
TSSによる割り当て
リアルタイム(オンライン処理)
– 必要なときに即時計算処理を行う
い、応答を返す
• 銀行業務システム
• 鉄道の予約システム
7/12/2002
TSSでのプロセスの状態遷移
<計算機工学>
16
8
メモリ管理(1)
•
マルチプログラミングのためのメモリ上
での複数のジョブの排他的管理
– ジョブの再配置
– 記憶保護
記憶保護
ジョブの再配置
<計算機工学>
7/12/2002
17
メモリ管理(2)
•
仮想メモリシステム
– 論理的なメモリ空間を用意し,物
理的なメモリサイズより大きなプ
ログラムを処理することが可能
論理メモリ空間とと物理メモリ空
間の対応関係を管理
半導体
メモリ
– ページ
• 半導体メモリ上でやり取りさ
れるプログラムの単位
– 通常4KB程度
ディスク
7/12/2002
<計算機工学>
18
9
ファイル管理
•
ファイルシステムの提供
– データやプログラムをファイルとい
う単位で管理
• 階層化(木構造)ファイルシス
テム
木構造ファイルシステム
の実現
木構造ファイルシステム
7/12/2002
<計算機工学>
19
10