第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
© Copyright 2024 Paperzz