コンピュータ
動作原理

コンピュータの動作原理(1)概要

このシリーズで扱う範囲と概要

このシリーズで解説する範囲についてです。
CPU階層.png
マシンコードよりも上の階層は、ソフトウエアのプログラミング言語やOSの領域になるので、今回の範囲には入れていません。アセンブラやマシン語といったキーワードで検索すると丁寧な解説がたくさん出てきます。また、トランジスタよりも下の階層は物理法則です。トランジスタの構造や電子の振る舞いの領域ですから範囲に入れません。
メモリとI/Oについても特に解説はしません。外付けのメモリはプロセッサの機能とは切り離して考えることが出来ます。またI/Oを特別なモノとして見るのは、主にコンピュータシステムの仕組みの方の話になります。

このシリーズの解説は、パーソナルコンピュータの出始めの頃のプロセッサ、例えば現在のインテルのプロセッサの直系の先祖のi8086やその前の8085、モトローラのMC6809などを想定しています。具体的にこのうちのどれかについての解説ではありませんが、基本となる技術はどれにでも通用しますし、今でも基本は変わっていません。

図について

上の図について、それぞれの階層の概要です。
それぞれの階層は考え方や扱う対象が違います。より上の階層は、下の階層を「こういう機能を持ったもの」と考え、内部の具体的な構造と切り離して設計・実装します。ソフトウエアと同じように下の階層のものについては抽象化して考えるのです。

トランジスタ

プロセッサを構成する最も基本的な要素です。トランジスタとだけ言うと色々な特性の色々な用途のものがありますが、今回はMOSFETを取り上げて解説します。MOSFETは信号のスイッチング用途に適しています。また殆どのプロセッサが(コンピュータの黎明期や最近の最先端のものを除けば)MOSFETで出来ています。
MOSFETを組み合わせると基本要素のAND、OR、NOTなどを作る事が出来ます。

論理回路

減算/加算器、バッファ、マルチプレクサなどの論理回路はAND、OR、NOTの組み合わせで出来ています。
それら論理回路を組み合わせると、プロセッサ内部の各ユニットを作ることが出来ます。レジスタ、命令デコーダ、ALUなどが代表的なユニットです。プロセッサは各ユニットを制御信号でコントロールする事で動作します。

プロセッサ

コンピュータの核です。用途やメーカーによってCPUとかMPUとかマイクロコントローラとか、色々な呼び方があります。またプロセッサには特定の処理専用に作られた物もあります。GPUとか数値データプロセッサ、メモリ管理ユニットなどもプロセッサです(コプロセッサと呼ぶ場合もあります)が、このシリーズでは一般にCPUと呼ばれているものについて解説をします。

マシンコード

命令とかバイナリーコードとも言います。主にデータと区別する時に、単に「コード」という言い方をする事もあります。CPUが直接実行出来るのがマシンコードで、アセンブラや(狭義の)コンパイラが出力するのはこれです。マシンコードはプロセッサ内部の変換テーブルで制御信号に変換されます。

プロセッサは

プロセッサは論理回路で組まれたユニットと、制御信号で動作します。制御信号の役割は主に、各ユニットに対して、他のユニットの出力のうちどれを入力するかの選択です。
例えばALU(Arithmetic Logic Unit)は四則演算や論理演算の結果を、それぞれの演算ユニット全部が常に出力しています。これをレジスタやメモリに書き込もうとする時に、ALUのどのユニットの出力を選ぶのか、それを選択する信号を出力するのがマシンコードからの変換テーブルです。そうして選択された結果とクロックと呼ばれる同期信号でその先のユニット(メモリやレジスタ)の次の状態が決まります。それが連鎖して、また次の演算結果が出力される、選択信号がどれにするか選ぶ、これの繰り返しです。

次回からMOSFETを組み合わせてプロセッサを作るまで、順を追って解説します。

参考

YouTubeより。
コンピュータの正体をつかまえよう
時代は古いですが、よく出来ています。

準備

このシリーズでは回路図が色々出てきます。これらはLogisimのドキュメントとして掲載しますので、実際の動作を確認するためにも Logisim 本体を落とておく事をおすすめします。
Logisimサイト
実行ファイル(中身はjar)がナマで置いてあります。インストーラではありません、念のため。
それからJavaのRuntimeが必要です。