計算機の基本原理
今日の講義
- コンピュータの基本構造を復習する
- コンピュータをシンプルに理解する
- これからの講義でやる内容の課題の提起
コンピュータの基本構造
- CPUがある
- メモリ(主記憶)がある
- 入力機器がある
- 出力機器がある
- 記憶装置がある
もっとシンプルに
- CPUがある
- 命令を読む
- 命令を解釈する
- 演算を行なう
- メモリへ操作を行なう(読む、書く)
- 次の処理へ進む
- メモリ(主記憶がある)
- 番地を指定してランダムに読み書きできる
- 命令を格納する
- データを格納する
- ディスクはなくても計算はできる
- メモリに直接書ければ入力装置はらない
- メモリの中身が見れれば出力装置はいらない
もっともシンプルなコンピュータ
- メモリがある
- プログラムカウンタがある
- 決められた命令を解釈実行できる
- 必要に応じて計算ができる(計算をするアキュームレータがある)
最低限の命令は
- メモリの内容をアキュームレータに読み込む(LOAD命令)
- メモリの内容をアキュームレータに書き込む(STORE命令)
- メモリとアキュームレータの間で計算を行いアキュームレータの内容を更新する(CALC命令, ADD, SUB, ...)
- 計算結果によりジャンプする(JUMP命令)
Manchester Baby MARK1の命令の例
- アキュームレータをクリアする命令
- アキュームレータから指定したメモリの番地を引き算する命令
- アキュームレータの内容を書き出す命令
- アキュームレータの内容がマイナスならプログラムカウンタを変更する(ジャンプ命令)
アドレスの修飾(アドレッシングモード) - 絶対的な番地を指定する(絶対アドレッシング)
- 現在のPC(プログラムカウンタ)の位置から相対的な番地を指定する(相対アドレッシング)
- レジスタやメモリの値を番地として間接的に番地を指定する(間接アドレッシング)
命令の構成 - オペコード(操作コード)とアドレッシングの組み合わせ
- アドレッシングで指定する番地に大して、オペコードで指定する操作を行う
- 組み合わせにより複雑な操作を定義できる
ワード - 一度に処理されるデータの長さ
- 命令の単位
- データの単位
- データ転送の単位
- 4bit, 8bit, 16bit, 32bit, 64bit, ...
- 最も高速に処理できるデータ長を指して○○ビットコンピュータと呼ぶことが多い
命令のワード長 - 固定長
- シンプルな命令で命令セットを構成
- 演算はレジスタ間のみといった制限
- 可変長
- 複数のオペランド(アドレッシングなどの述語)を指定する命令は長い
- 3オペランド命令(Z ← X + Y)、すべてメモリの番地を指定して処理できる
- 使用頻度により命令の長さが違うものもある(あった) → Xerox D-Machine
アドレスの付け方 - たとえば32bitコンピュータのアドレスの付け方
- 32ビットワード単位にアドレスを振る
- 8ビット(バイト)単位にアドレスを振る
- 文字列の処理などを考えると2の8ビット(バイト)単位のほうが柔軟性があり現在の主流
- 1ワード内のアドレスの順番が問題(バイトオーダ問題)
エンディアン(バイトオーダ) - リトルエンディアン → ワードの下位バイトのほうがアドレスが小さい
- ビッグエンディアン → ワードの上位バイトのほうがアドレスが小さい
- Intel:リトルエンディアン、IBM, Motrola:ビッグエンディアン
- どちらもメリット、デメリットあるが、さまざなな場面に顔を出す
- 相互に変換処理が必要
レジスタ - プロセッサ内部の高速なメモリ
- 演算用のレジスタを特にアキュムレータと呼ぶ
- 目的を定めた専用レジスタマシン
- 汎用レジスタによる汎用レジスタマシン
- Intelのx86は専用レジスタマシン
レジスタの種類(専用レジスタマシン) - アキュームレータ(演算用)
- インデックスレジスタ(アドレス修飾用)
- ステータスレジスタ(プロセッサの状態を表すデータ)
- プログラムカウンタ
- スタックポインタ
レジスタの種類(汎用レジスタマシン) - 汎用レジスタ(8から32本程度)
- プログラムカウンタ(汎用レジスタの1部であったりする)
- スタックポインタ(汎用レジスタの1部に割り付け)
- ステータスレジスタ
コンピュータの方式ふたたび - 命令とデータ、どうちも共通にメインメモリに格納する
- プログラム内蔵型(フォンノイマン型とも呼ばれるが...)
- プログラムをデータとして扱える柔軟性を手に入れた
- 性能的には分離したほうがいい → ハーバードアーキテクチャ
I/Oの考え方 - メモリと同じようにアドレスをつけて操作
- I/O用に別のアドレスをもうける
- I/Oは別のプロセッサで処理をする(チャネル、DMA)
- CPUを効率的に利用するため古典的なCPUは別プロセッサで処理をさせる
I/Oの連携 - ポーリング
- 時々I/Oを見に行く
- I/O側からはCPUに強制的通知はできない
- 割り込み処理(インタラプト)
- 割り込み信号によりプログラムに割り込む
- 現在の処理を中断し、割り込みルーチンへジャンプ
- I/O処理を効率的に処理可能
I/Oの並行処理 - ディスクからデータを読み込み
- 計算処理を行い
- プリンタに結果を出力する
- 1と3はほとんどCPUを使わずI/O機器の処理
- この3つの仕事は平行に処理できるはずだが...
割り込み処理の活用 - I/Oは外部の機器に依頼をし、完了通知を割り込みでもらう
- 完了処理をした後、元のプログラムに復帰
- I/O機器は独立して動き、平行処理が可能
- マルチタスク処理へ発展
I/Oのためのデータ転送 - CPUが行う
- DMA(Direct Memory Access)による方法
- I/O機器が直接メモりにデータを書き込む
- 転送の完了は割り込みで通知
- 効率が高い
- 大量データ処理の主流(ディスクI/O, ビデオI/Oなど)
割り込み処理 - 現在の番地(戻り番地)の保存
- 現在のプロセッサの状態の保存
- レジスタの内容の保存
- 割り込み処理ルーチンへのジャンプ
割り込みからの復帰 - 割り込みの処理の逆作業
- レジスタの内容の復元
- プロセッサの状態の復元
- 保存された戻り番地へジャンプ
チャネルプロセッサ - 汎用大型機の技術
- I/O処理をする専用プロセッサ
- よりインテリジェントなI/O処理
次回の予告 - 技術の生い立ちを検証していく
- 60年前にタイムトリップ
- 歴史を追いながらコンピュータ技術をみていく
- 必然とそうでないもの...偶然...
- 大型計算が主流になるまで
|
 Updating...
Ċ Hideto Sazuka, 2009/09/22 6:30
|