<!--Chapter 13 Processors-->
<sect>プロセッサ<label id="chapter_proc">
<p>
<figure><ph vspace="1"><img src="./The-Linux-Kernel-images/penguin2.gif">
</figure>

<!--
Linux runs on a number of processors; this chapter gives a brief outline of
each of them. 
-->
<p>Linux は、多数のプロセッサ上で実行されている。この章では、それらのいくつか
について簡単なアウトラインを紹介する。

<!--13.1  X86-->
<sect1>x86<label id="chapter_proc_sect1">
<p>

TBD 
<p>(訳注: 原文に解説はありません。<ref id="bibliography_intel" 
name="bibliography の 9"> を参考にしてください。)

<!--13.2  ARM-->
<sect1>ARM<label id="chapter_proc_sect2">

<!--
The ARM processor implements a low power, high performance 32 bit RISC
architecture. It is being widely used in embedded devices such as mobile
phones and PDAs (Personal Data Assistants). It has 31 32 bit registers
with 16 visible in any mode. Its instructions are simple load and store
instructions (load a value from memory, perform an operation and store the
result back into memory). One interesting feature it has is that every
instruction is conditional. For example, you can test the value of a register
and, until you next test for the same condition, you can conditionally 
execute instructions as and when you like. Another interesting feature is 
that you
can perform arithmetic and shift operations on values as you load them. It
operates in several modes, including a system mode that can be entered
from user mode via a SWI (software interrupt). 
-->
<p>ARM は、省電力、ハイパフォーマンスの 32 ビット RISC アーキテクチャを
実装するプロセッサである。これは、携帯電話や PDA(Personal Data Assistants) 
などの組み込みデバイスで広く使用されている。ARM は、31 個の 32 ビットレジスタ
を持っていて、そのうち 16 個はどのモードでも使用可能である。このプロセッサ
の命令(instructions)は、シンプルなロードストア命令(メモリから値をロード
し、操作を実行し、その結果をメモリに戻す)である。このプロセッサが持つ
ひとつの興味深い特徴は、すべての命令が条件命令(conditional)であることである。
たとえば、レジスタの値をテストした場合、次に同じ条件でテストするまで、好きなだ
け好きな時に、条件的に命令を実行することができる。
それ以外の興味深い特徴としては、値をロードするときに、演算処理とシフト処理
とが出来ることである。
またいくつかのモードで実行可能であり、このプロセッサのシステムモードは、
ユーザモードから SWI(software interrupt)経由で入ることが出来る。

<!--
It is a synthasisable core and ARM (the company) does not itself
manufacture processors. Instead the ARM partners (companies such as
Intel or LSI for example) implement the ARM architecture in silicon. It
allows other processors to be tightly coupled via a co-processor interface
and it has several memory management unit variations. These range from
simple memory protection schemes to complex page hierarchies. 
-->
<p>ARM は、統合可能(synthasiable)コアを使用している。しかし、ARM (会社名)自体が
このプロセッサを製造しているわけではない。ARM の提携会社(たとえば、Intel や 
LSI といった会社)が、ARM の設計したアーキテクチャをシリコンに実装している。
このプロセッサは、コプロセッサ(co-processor)のインターフェイス経由で他の
プロセッサとも緊密に連携させることができるので、メモリ管理ユニットの
バリエーションが多数ある。それらは、シンプルなメモリ保護スキームから複雑な
ページ階層のものまで幅広くカバーしている。

<!--13.3  Alpha AXP Processor-->
<sect1>Alpha AXP プロセッサ<label id="chapter_proc_sect3">

<!--
The Alpha AXP architecture is a 64-bit load/store RISC architecture
designed with speed in mind. All registers are 64 bits in length; 32 integer
registers and 32 floating point registers. Integer register 31 and floating
point register 31 are used for null operations. A read from them generates a
zero value and a write to them has no effect. All instructions are 32 bits long
and memory operations are either reads or writes. The architecture allows
different implementations so long as the implementations follow the
architecture. 
-->
<p>Alpha AXP のアーキテクチャは、64 ビットのロード・ストア型の RISC 
アーキテクチャであり、処理速度重視で設計されている。すべてのレジスタは 64 
ビット長であり、32 個の整数レジスタと 32 個の浮動小数点レジスタを持つ。
整数レジスタ 31 番と浮動小数点レジスタ 31 番とは、ヌル(null)オペレーション
のために使用される。すなわち、それらのレジスタからの読み出しは 0 を生成し、
それらへの書き込みは何の効果ももたらさない。
すべての命令は 32 ビット長であり、メモリオペレーションは読み出しか書き込みかの
どちらかである。このアーキテクチャは、実装がアーキテクチャに準拠したものである
限り、異なる実装も許している。

<!--
There are no instructions that operate directly on values stored in memory;
all data manipulation is done between registers. So, if you want to increment
a counter in memory, you first read it into a register, then modify it and 
write it out. The instructions only interact with each other by one instruction
writing to a register or memory location and another register reading that
register or memory location. One interesting feature of Alpha AXP is that
there are instructions that can generate flags, such as testing if two
registers are equal, the result is not stored in a processor status register,
but is instead stored in a third register. This may seem strange at first, but
removing this dependency from a status register means that it is much
easier to build a CPU which can issue multiple instructions every cycle.
Instructions on unrelated registers do not have to wait for each other to
execute as they would if there were a single status register. The lack of
direct operations on memory and the large number of registers also help
issue multiple instructions. 
-->
<p>メモリにストアされた値を直接操作する命令は存在しない。すべてのデータ操作
はレジスタ間で行われる。それゆえ、メモリのカウンタの値をインクリメントしたい場
合、まずそれをレジスタに読み出して、それを修正し、メモリに書き込まなければなら
ない。ある命令がレジスタかメモリ内のどこかの位置に書き込みを行い、別の命令が
そのレジスタかそのメモリ位置を読み出した場合にのみ、相互の命令が干渉しあって
しまう。
Alpha AXP の興味深い特徴のひとつは、フラグを生成できる命令があることである。
たとえば、ふたつのレジスタ値が同じであるかテストし、その結果はプロセッサ
のステータスレジスタにはストアされないが、代わりに第三のレジスタに結果を
ストアするといったものである。これは一見奇妙に思えるかもしれないが、
ステータスレジスタへの依存を取り除くことによって、個々のサイクルごとに
多重命令(multiple instruction)を発することが可能な CPU の製造を、非常に容易に
する。
相互に関係のないレジスタ上での命令は、互いの命令の結果を待つことなく、
実行される。もしステータスレジスタがひとつしかない場合、それにはもっと
時間がかかるだろう。メモリを直接操作する命令がないこと、レジスタ数が
非常に多いことも、多重命令の発行を容易にするものである。

<!--
The Alpha AXP architecture uses a set of subroutines, called privileged
architecture library code (PALcode). PALcode is specific to the operating
system, the CPU implementation of the Alpha AXP architecture and to the
system hardware. These subroutines provide operating system primitives
for context switching, interrupts, exceptions and memory management.
These subroutines can be invoked by hardware or by CALL_PAL
instructions. PALcode is written in standard Alpha AXP assembler with
some implementation specific extensions to provide direct access to low
level hardware functions, for example internal processor registers. PALcode
is executed in PALmode, a privileged mode that stops some system events
happening and allows the PALcode complete control of the physical system
hardware. 
-->
<p>Alpha AXP アーキテクチャは、一連のサブルーチンを使用するが、それは
PALcode(privileged architecture library code)と呼ばれる。
PALcode は、Alpha AXP アーキテクチャの CPU 実装なので、オペレーティングシステム
やハードウェアごとに異なったものとなる。
それらのサブルーチンは、オペレーティングシステムにコンテキストスイッチングや
割り込み、例外処理やメモリ管理のプリミティブを提供するものである。それらの
サブルーチンは、ハードウェアか CALL_PAL 命令によって呼び出し可能である。
PALcode は、標準的な Alpha AXP アセンブラと、いくつかの特定実装に固有の
拡張を付け加えて書かれたもので、たとえば、プロセッサの内部レジスタなどの
低レベルのハードウェア機能への直接的なアクセス手段を提供している。
PALcode は PALmode で実行されるが、このモードは特権モードであり、いくつかの
システムイベントの発生を停止して、PALcode が物理的なシステムハードウェアを完全
に制御することを許すものである。