プログラムはなぜ動くのか?

更新日:2023.05.05 作成日:2009.07.12

ちょっとコンピュータの本質のところを知らないといけない気がして読んで理解を試みる。

少し読んでみると、大学1年のときの記憶がちょっとずつ蘇ってきた。2進数とか補数とか。もうちょっと頑張って聞いておけばよかったなぁって今思います。

とりあえず今日読んだところまで復習がてらメモします。

第一章 プログラマにとってCPUとはなにか

CPUやメモリーの実体は、多くのトランジスタから構成されたIC(Integrated Circuit,集積回路)と呼ばれる電子部品。

CPU

  • レジスタ
  • 制御装置
  • 演算装置
  • クロック
  • レジスタ・・・処理対象となる命令やデータを格納する領域。
  • 制御装置・・・メモリー上の命令やデータをレジスタに読み出し、命令の実行結果に応じてコンピュータ全体を制御する。
  • 演算装置・・・メモリからレジスタに読み出したされたデータを演算する
  • クロック・・・CUPが動作するタイミングとなるクロック信号を発生させる。

これら4つの要素があげられるが、プログラマが意識するのはレジスタだけ。なぜなら、プログラムはレジスタを対象として記述されるから。アセンブリ言語は、CPUの動作を表したものだと言える。

CPUにできることはいたって簡単

  • データ転送命令
  • 演算命令
  • ジャンプ命令
  • コール/リターン命令
 関数を呼び出す、元に戻す

第2章 データを2進数でイメージしよう

  • 補数を求める・・・反転して+1左シフト・・・2倍
  • 右シフト・・・1/2倍を表す
  • 排他的論理和・・・相手を排除する、つなわち同じことが嫌い
  • 両者が異なる場合・・・1
  • それ以外・・・0
  • Cのプログラムでは、「Ox」をつけることで16進数を意味する

論理右シフトと算術右シフトの違い

  • 論理右シフトでは、空いた上位桁に「0」を格納する。
  • 算術右シフトでは、空いた上位桁に「符号ビットの値」を格納する。

実際には何が違ってくるのか?論理右シフトは、電光掲示板のイメージ

第3章 コンピュータが小数点の計算を間違える理由

ここで出ました、浮動少数点数。やはり何回出会ってもいまいちすっきり理解できません。てか、数が出てくると頭がパンクするエセ理系の悪い癖です。

浮動少数点数

  • 符号
  • 仮数
  • 基数
  • 指数

IEEEの規格に基づいて表現されている。

プログラムはなぜ動くのか?

イクセス表現

  • 指数部で表せる範囲の中央の値をゼロとみなすことにより、符号ビットを使わないでマイナスの値を表す工夫

第4章 四角いメモリーを丸く使う

RAM(Random Access Memory)

  • DRAM

記憶保持動作が必要

  • SRAM

必要としない メモリーの論理的なイメージはビルディングこのビルディングには1フロアに1バイトのデータを格納でき、フロアの番号がアドレスを表すものになる。データ型によって、このフロアを何回分使うか決まってくる。

スタック ・・・干し草を積んだ山のイメージ

  • LIFO方式

スタックとなる配列に格納された最後のデータ(Last In)が最初(First Out)に取り出される

キュー ・・・待ち行列のイメージ

  • FIFO方式

最初に入れたデータが(First In)が最初に出てくる(First Out) キューは、リング・バッファと呼ばれる形態で使われることが一般的

プログラムはなぜ動くのか?

第5章 メモリーとディスクの親密な関係

ディスク・キャッシュ

一度ディスクから読み出されたデータを保存しておくメモリー内の領域のこと。

仮想記憶

ディスクの一部を仮想的にメモリーとして使うこと。

例えば、5MBのメモリー空間しか残っていない状態でも、10MBのサイズのプログラムを実行出来る。どうやって実現しているのか?実際のメモリー(物理メモリ)の内容を部分的に置き換えながらプログラムを実行する。

  • ディスク・キャッシュ・・・仮想的なディスク(実体はメモリー)
  • 仮想記憶(仮想メモリ)・・・仮想的なメモリ(実態はディスク)

Related contents