2010年7月27日火曜日

計算機 初歩の初歩の初歩 ~計算機とは?~

技術的な話の少ない当ブログ。
このままでは良くない、と感じた筆者は抜本的な構造改革に取り掛かる。
しかし、その行く手には・・・

って、どこぞの予告編みたいですね。
かなり気合入れていますので、今回の投稿が予告編になってしまう恐れがありますが進めてみます。


この文章を見ているということは、読者は全て『計算機』を使用しているということになります。
さて、『計算機』とは何か?
パソコン? スパコン? マイコン? ケータイ? 電卓?
どれも『計算機』に当たります。(マイコンや電卓ではこの文章は見れませんが^^;)

「パソコンの何処が計算機なのさ?」

と思われると思いますので、『計算機』とは何か、を書いてみようと思います。


Computer(コンピューター)の和訳(google辞書で翻訳)は
  1. コンピュータ
  2. コンピューター
  3. 計算機
  4. 電子計算機
  5. 計算器
  6. 高速演算機構
     となり、「計算の為の機械」と言えます。(「機械」と「器械」の差はスルーします。このへんを厳密に定義する人々もいるようですが本筋じゃありませんので)

    では、どのようにして正しい計算をする仕組みを作るのか?
    この理論の大本と言えるのが『オートマトン』です。
    wikipediaによると















    オートマトン (automaton (pl: automata)) とは「自動人形」を意味している言葉で、情報科学の分野においては、次のような特徴を持ったシステムのことである。
    • 外から、連続している情報が入力される
    • 内部に「状態」を保持する
    • 外へ、何らかの情報を出力する
    というのがオートマトンなのですが、ずいぶんと抽象的になります。
    具体的には有限オートマトンに詳しいのですがここをしっかり説明すると大学の講義数コマ分の分量になりますので、興味のある方はリンク先(wikipedia)を見てください。
    尚、リアルでの質問も受け付けます。(メールなどでの質問は申し訳ありませんが勘弁してください。参考サイトを検索する方が遥かに早いです)


    簡単に言うと、状態の遷移を示す為の理論です。


     「状態:空腹」、「入力:食事」⇒「遷移」⇒「状態:満腹」、「入力:時間経過」⇒「遷移」⇒「状態:空腹」・・・


    と言えばなんとなくわかるかと思います。
    上記のオートマトンの説明に沿うならば、

    外からの情報入力(「入力:**」)があり、情報入力に応じて状態遷移する。
    遷移元と遷移先の「状態:**」を内部に保持し、「状態:**」の情報を外へ出力する。

    と言えますね。


    どれほど複雑なプログラムでも、このような状態遷移が必須となります。
    初期状態と外からの入力がない限り、どれほど高度なシステムも動きようがないのがわかると思います。

    このオートマトンというものは、自動/半自動の仕組みの大半で使われていますので、身近なもので状態遷移を考えてみるのも面白いと思います。



    さて、オートマトンが状態遷移を示すのはわかるのですが、それのどこが「計算」なのか?
    次はそのへんを見ていきたいと思います。



    現在使用されている『計算機』の基本は、ほとんどが「ノイマン型」と言われるものを使用しています。
    この「ノイマン型」計算機は「チューリングマシン」の理論を使っているのですが、「チューリングマシン」は「オートマトン」の定義を拡張したものです。


    もう少し噛み砕いてに説明をしたかったのですが、これはそういうものだ、そういう関係だと思ってください。
    チューリングマシンとは(wikipediaより)


    チューリングの仮想機械は、
    1. 無限に長いテープ
    2. その中に格納された情報を読み書きするヘッド
    3. 機械の内部状態を記憶するメモリ
    で構成され、内部状態とヘッドから読み出した情報の組み合わせに応じて、次の動作を実行する。
    • ヘッド位置のテープの情報を読みとる
    • ヘッド位置のテープに情報を書き込む
    • 機械の内部状態を変える
    • ヘッドを右か左に一つ移動する
    上の動作を、機械は内部状態が停止状態になるまで反復して実行し続ける。
    というものです。
    オートマトンの拡張だけあって、似ていますね。
    情報の読み取り(オートマトンで言えば外部からの入力)、情報の書き込み(外部への出力)、内部状態の記憶(内部に「状態」を保持する)、とそろっています。


    実際には「無限に長いテープ」なんてものは存在しませんが、ノイマン型コンピューターでは有限の記憶領域の範囲内での計算を保証する作りになっています。
    ノイマン型とは(再びwikipediaより)


    ノイマン型アーキテクチャの計算機は5つの部分からなる。演算論理装置(ALU)、
    制御装置メモリ入出力と、これらを接続する情報経路である。


    ノイマン型アーキテクチャの計算機は以下のようなステップを繰り返し行うことで計算を行う。
    1. プログラムカウンタのさすアドレスから次の命令を読み込む
    2. 命令長さの分だけプログラムカウンタを増やす
    3. 制御装置で命令をデコードする。制御装置は計算機の他の部分に対して命令を出したり、
      繰り返しを行うためにプログラムカウンタの値を替えたり、条件分岐のためにALUの状態によって
      プログラムカウンタの値を替えたりすることができる。
    4. ステップ1へ戻る
    とあります。
    ようやく計算っぽい話(ステップ3.)が出てきました。


    外部からの入力(命令の読み込み)に応じて計算を行うのがノイマン型コンピューター。つまり、計算する為の機械。『計算機』です。
    ここまで書いて(全く厳密じゃない、さわりだけですが)ようやく『計算機』が『計算する為の機械』であるという説明が出来ました。


    ノイマン型アーキテクチャのステップ1,2はマシン語やアセンブラに、ステップ3は構造化言語に、それぞれ関連してきますので、SEならば知っておきたいところです。
    というか、これくらいは知っておかないとプログラミング言語の基本をおさえたとは言えませんので。
    又、ノイマン型アーキテクチャの計算機の5つの部分は、ハードウェアの基本そのものになります。


    さて、ずいぶん大量の情報を垂れ流してしまいましたが、これが初歩の初歩の初歩。
    理解なしでもシステム構築が出来る世の中ですが、理解しておいた方がより良いです。
    続編の予定としては、この書き込みの派生として、それぞれの分野の話を書いていこうと思います。







    偉そうに書きましたが、これって情報系の大学の講義で教わるレベルの内容です。
    筆者が情報工学科卒というのもありますが、このレベルの話はSEならば1年目くらいで理解すべきだと考えています。
    体系的に学問としてやるのは大学の先生方にお任せですが、今回の書き込みを読み切れないSEはもう少し勉強が必要でしょう。


    尚、情報工学科で取得できる教職は数学のみでした。
    あまり関係ないですがw

0 件のコメント:

コメントを投稿