レジスタ
【英】register
レジスタとは、レジスタとは、CPU(中央演算装置)そのものに内蔵されている記憶装置である。計算中のデータや計算結果データを一時的に保持する領域などとして用いられる。典型的にはCPUの部品であるが、CPU以外でも複雑な処理を行う集積回路(たとえばGPU)がレジスタを内蔵する場合はある。
コンピュータの演算処理の手順は、きわめて大雑把にいえば、(1)演算装置が記憶装置らデータを読み取り、(2)その内容に従って演算処理を行い、(3)演算の結果を再び記憶装置に書き込む、といった流れの繰り返しで成り立っている。この一連の流れにおいて、演算装置と記憶装置の間で行われるデータ転送が相対的に遅くなり(ボトルネックとなり)やすい。レジスタはきわめて高速に動作する記憶装置であり、かつ、CPUの内部(つまり演算装置に直結した場所)に設置され、高速なバスで結合されている。両素子が同じ配線上の最短距離に位置することにより、データ転送速度の最高速化が実現されている。
コンピュータを構成する記憶装置としては、レジスタの他にメインメモリやキャッシュメモリなども挙げられる。メインメモリはCPUとは切り離された(独立した)要素であり、大容量化が容易である(多くのデータを保持しておける)が、データ転送速度には限界がある。キャッシュメモリはCPU内に設けられた記憶装置であり、レジスタほど高速ではないがメインメモリより高速に動作する。また、キャッシュメモリは、レジスタほど高速でない代わりレジスタよりは大容量化が容易である。キャッシュメモリは、メインメモリから読み込んだデータを一時的に保持しておくために用いられる。これによってメインメモリにアクセスする頻度を減らすことができ、演算処理全体が高速化できる。そしてレジスタは、CPU内部に配置され、高速なバスで結合されているため、極めて高速に動作するという特徴を持っているが、その容量は、あまり大きく確保することができない。このようにして記憶装置は役割を分担しているわけである。
レジスタの用途・役割には、いくつかの種類がある。特に使い道が限定されていないレジスタは「汎用レジスタ」と呼ばれ、特定の用途が割り当てられているレジスタは「専用レジスタ」と総称されることがある。専用レジスタの種類としては、アキュムレータ、スタックレジスタ、プログラムカウンタ、割り込みレジスタ、フラグレジスタなどが挙げられる。
レジスタの利用方法は、例えば、C言語のような高級言語における関数呼び出しの実現方法に見ることができる。C言語では、関数を呼び出す時に、一緒に引数を複数個渡すことができる。この時、引数をメモリにセットし、そのアドレス位置をスタックレジスタを使って覚えさせておけば、関数の側は、これを読み取れば良い。なお、コンパイルを必要とする高級言語においては、レジスタをどのように使いこなすかが、良い性能を引き出すポイントの一つとなる。変数を、数が少なく、容量の限定されたレジスタに最適に格納するのは難しい問題である。ある値を、どのレジスタに格納すべきか決定することを、レジスタ割り付け(Register allocation)という。
ちなみに「レジスタ」という言葉はそもそもは英語で「名簿」「記録簿」「登録簿」という意味合いをもつ一般名詞(または動詞)である。いわゆる「レジ」(=小売店などで金銭の出し入れを行う装置)も「キャッシュレジスター」(金銭登録器)も同語源である。
コンピュータ用語としての「レジスタ」は、同業界における表記上の慣習から、長音記号を省いて(「レジスター」ではなく)「レジスタ」と表記される場合が今なお圧倒的に多い。
|