B−FreeOS入門書
コンピュータで色々な事ができるわけPart2  目次へ戻る

前回までで、CPUから見てメモリに読み書きする事とI/Oポートに読み書きする事は同じである事と、I/Oポートにデータを書く事でいろいろな機器を制御できることを説明しました。
今回は、もうひとつのつなげ方を説明したいと思います。

●電話を考えてみる
目の前に、プッシュホンがあると思ってください。
これをCPUにつなげたとすると、「フック,1,2,3,4,5,6,7,8,9,0,#,*」をそれぞれ線で結ぶ事になりますね。
では、電話を掛けてみましょう。
電話番号が、123-456-7890だとすると、
  フックをOFF
  プーという音を聞く
  1をON/1をOFF
  2をON/2をOFF
      :
  9をON/9をOFF
  0をON/0をOFF
  呼び出し音が鳴る
  相手と話す
  フックをON
という具合になると思います。
ここで重要なのは、時間に沿ってある順番にON/OFFを切り替えていくという事です。
そうする事により、たった13個のスイッチをON/OFFするだけで何億以上もの相手に電話を掛ける事ができます。

●プロトコルとは
この電話の例では人間と交換機/人間との間のやり取りですが、コンピュータ同士や機器とのやり取りの手順をプロトコルと言います。
インターネットのホームページのアドレスに出てくるhttpというのもプロトコルの名前だったりします。
それぞれのプロトコルでは、
  どのようなハードウェアでつながっているか?
  どんなデータを扱うのか?
  どちらからやり取りを始めるのか?
  どういう順番で何を送る、あるいは受けるのか?
  どういう時にエラーになるのか?
というような事が決められています。
それに従う限り、どのようなデータでもやりとりができるわけです。
このプロトコルという考え方は、パソコンの中でも使われています。

●CPUでどこまでやるのか
話は変わりますが、たとえば、画面解像度が640×480ピクセルでフルカラー(約1680万色)のディスプレイがあるとします。
これを表現するため必要なメモリの大きさは、次のようになります。
  約1680万色の場合、RGB各色が256階調必要。
  (256×256×256 = 16,777,216色)
  これは画面上の1ピクセルに3byte必要だという事。
  よって1画面あたり 640×480×3 = 921,600byte 必要となる。
では、このディスプレイで動画を表示する場合を考えてみます。 1秒間に30枚の画像を書き換えるとすると、921,600byte×15枚で、13,824,000byte(=約14Mbyte)も必要になります。
  余談ですが、DV(デジタルビデオ)は、これをリアルタイムで1/5に圧縮してテープに記録しています。
専用とはいえ、すごい事をやっていますよね。

もしこれをCPUが書き換えているとしたらどうでしょうか?
はっきり言って、現在の性能ではかなり苦しいものがあります。

●他の物を利用しよう
CPUに荷が重いのであれば、他の物にやってもらえばいいですよね。
それらのハードアェアは、用途によって××コントローラと呼ばれます。
そして、大抵は次のようにつながっていると考えて良いでしょう。

 
  ちなみにグラフィックアクセラレータとかサウンドチップなどもコントローラの仲間です。
グラフィックアクセラレータなんて、コントローラよりアクセラレータ(加速させる)の方がすごそうに聞こえるからそう呼んでいるんだと思います。

この図でCPUとコントローラがつながっている部分があります。(メモリの下の部分)
CPUは、この部分を使ってコントローラにデータ(この場合には命令になる)を書くと、それを受けてコントローラが外部の機器からデータを取ってきてメモリに入れたりするような事ができるようになります。
また同じように他のCPUをつなげる事もできます。
実際CPUが内蔵されているコントローラはかなり存在します。
さて、先ほどの動画を考えた場合、次のようなコントローラがあればCPUの負荷はかなり軽減されます。
 ・DVD−ROMから圧縮された1画面分のデータをメモリに書くコントローラ
手順1.

  2.
  3.
  4.
DVD−ROMの読み込み場所を指定
(特に指定しなれば、読み込みの実行で次の読み込み位置に変更される)
読み込むデータの大きさを指定
読み込み先のメモリの場所を指定
読み込みの実行
 ・メモリから1画面分のデータを展開してディスプレイに送るコントローラ
手順1.
  2.
  3.
メモリの読み込み場所を指定
読み込むデータの大きさを指定
表示の実行
この場合、CPUはそれぞれのコントローラに、手順にしたがってデータを書くだけになります。
この手順も一種のプロトコルと言えるでしょう。
目次へ戻る