第2回講義資料 2009/09/25

計算機の基本原理

今日の講義
  • コンピュータの基本構造を復習する
  • コンピュータをシンプルに理解する
  • これからの講義でやる内容の課題の提起

コンピュータの基本構造
  • CPUがある
  • メモリ(主記憶)がある
  • 入力機器がある
  • 出力機器がある
  • 記憶装置がある
もっとシンプルに
  • CPUがある
    • 命令を読む
    • 命令を解釈する
    • 演算を行なう
    • メモリへ操作を行なう(読む、書く)
    • 次の処理へ進む
  • メモリ(主記憶がある)
    • 番地を指定してランダムに読み書きできる
    • 命令を格納する
    • データを格納する
  • ディスクはなくても計算はできる
  • メモリに直接書ければ入力装置はらない
  • メモリの中身が見れれば出力装置はいらない
もっともシンプルなコンピュータ
  • メモリがある
  • プログラムカウンタがある
  • 決められた命令を解釈実行できる
  • 必要に応じて計算ができる(計算をするアキュームレータがある)
最低限の命令は
  1. メモリの内容をアキュームレータに読み込む(LOAD命令)
  2. メモリの内容をアキュームレータに書き込む(STORE命令)
  3. メモリとアキュームレータの間で計算を行いアキュームレータの内容を更新する(CALC命令, ADD, SUB, ...)
  4. 計算結果によりジャンプする(JUMP命令)
Manchester Baby MARK1の命令の例
  1. アキュームレータをクリアする命令
  2. アキュームレータから指定したメモリの番地を引き算する命令
  3. アキュームレータの内容を書き出す命令
  4. アキュームレータの内容がマイナスならプログラムカウンタを変更する(ジャンプ命令)

アドレスの修飾(アドレッシングモード)

  1. 絶対的な番地を指定する(絶対アドレッシング)
  2. 現在のPC(プログラムカウンタ)の位置から相対的な番地を指定する(相対アドレッシング)
  3. レジスタやメモリの値を番地として間接的に番地を指定する(間接アドレッシング)
命令の構成
  • オペコード(操作コード)とアドレッシングの組み合わせ
  • アドレッシングで指定する番地に大して、オペコードで指定する操作を行う
  • 組み合わせにより複雑な操作を定義できる

ワード

  • 一度に処理されるデータの長さ
  • 命令の単位
  • データの単位
  • データ転送の単位
  • 4bit, 8bit, 16bit, 32bit, 64bit, ...
  • 最も高速に処理できるデータ長を指して○○ビットコンピュータと呼ぶことが多い
命令のワード長
  • 固定長
    • シンプルな命令で命令セットを構成
    • 演算はレジスタ間のみといった制限
  • 可変長
    • 複数のオペランド(アドレッシングなどの述語)を指定する命令は長い
    • 3オペランド命令(Z ← X + Y)、すべてメモリの番地を指定して処理できる
    • 使用頻度により命令の長さが違うものもある(あった) → Xerox D-Machine
アドレスの付け方
  • たとえば32bitコンピュータのアドレスの付け方
    1. 32ビットワード単位にアドレスを振る
    2. 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. ディスクからデータを読み込み
  2. 計算処理を行い
  3. プリンタに結果を出力する
  • 1と3はほとんどCPUを使わずI/O機器の処理
  • この3つの仕事は平行に処理できるはずだが...
割り込み処理の活用
  • I/Oは外部の機器に依頼をし、完了通知を割り込みでもらう
  • 完了処理をした後、元のプログラムに復帰
  • I/O機器は独立して動き、平行処理が可能
  • マルチタスク処理へ発展
I/Oのためのデータ転送
  • CPUが行う
    • 1ワードづつの通信
    • 効率が悪い
  • DMA(Direct Memory Access)による方法
    • I/O機器が直接メモりにデータを書き込む
    • 転送の完了は割り込みで通知
    • 効率が高い
    • 大量データ処理の主流(ディスクI/O, ビデオI/Oなど)
割り込み処理
  • 現在の番地(戻り番地)の保存
  • 現在のプロセッサの状態の保存
  • レジスタの内容の保存
  • 割り込み処理ルーチンへのジャンプ
割り込みからの復帰
  • 割り込みの処理の逆作業
  • レジスタの内容の復元
  • プロセッサの状態の復元
  • 保存された戻り番地へジャンプ
チャネルプロセッサ
  • 汎用大型機の技術
  • I/O処理をする専用プロセッサ
  • よりインテリジェントなI/O処理
次回の予告
  • 技術の生い立ちを検証していく
  • 60年前にタイムトリップ
  • 歴史を追いながらコンピュータ技術をみていく
  • 必然とそうでないもの...偶然...
  • 大型計算が主流になるまで

Ċ
Hideto Sazuka,
2009/09/22 6:30
Comments