SSブログ

特集80386/80486入門2(月刊ASCII 1989年8月号5) [月刊アスキー廃棄(スクラップ)]

特集の「ためになるパソコンCPUの主流80386/80486入門」の残りをスクラップする。。

80486とは
 Intel社の80486CPU(正式名称はi486マイクロプロセッサ,以下486と略す)は,すでにポピュラーになりつつある80386CPU(同じく386と略す)との互換性を保ちつつ、高速化された32bitマイクロプロセッサである。8086→80286→80386の場合のようなアーキテクチャ上の大きな変更はなく、動作モードも拡張されていない.
 486は386とソフトウェア面では完全互換であるが,チップ内に8Kbytesのキャッシュメモリおよびコントローラ,80387相当の数値演算コプロセッサを内蔵しており,25MHzのクロックで動作する(33MHz版も供給予定).その結果,386の20MHz版の3~4倍の性能を持つマイクロプロセッサとなっている.  こでは386と486の違いを中心に解説する.


 ハードウェア面での386との大きな違いは,キャッシュメモリと数値演算コプロセッサが内蔵されたことであろう(図1)。このため,信号ピンの機能に一部変更があり,386とパッケージ形状は同じだが,ピンコンパチブル(差し替えても動作する)ではない。
 386では,キャッシュメモリを内蔵しておらず,キャッシュメモリコントローラとのインターフェイスのための信号ピンが出ていただけであった(Intelより,専用のキャッシュコントローラチップとして80385が提供されている)。486では,キャッシュメモリおよびそのコントローラを内蔵しているため,より高速な動作が可能になっている.
 キャッシュメモリの構成方法には,さまざまな分類があるが,486のキャッシュメモリは8Kbytesの容量があり,それを2Kbytesずつ4つに分割した4ウェイセットアソシアティブ方式である(図2).それぞれの領域は,16bytes単位の128エントリから構成される.この領域には,データと命令コードが混在して格納される.また,数値演算プロセッサへの命令,データも同様にキャッシュへ格納できる.書き込み方式はライトスルー方式(必ずメインメモリに書き込みを行なう)である.
 キャッシュとメインメモリ間の転送は,バースト転送を使い1クロックで4bytesの転送が可能である.キャッシュとCPU,コプロセッサ間は独立した2つの32bit内部バスで結ばれており,並行動作が可能なほか,バスを2つともコプロセッサに割り当てることで64bitの倍精度データを一度に転送することもできる.
 486には,従来80387,80287として別チップになっていた数値演算コプロセッサ(NPX)が内蔵されている.ソフトウェア的には80387と完全互換であり,命令も拡張されていない。しかし,従来の外部CPUバスにメモリなどと同様に接続されていた場合と比べると,データ転送やCPUとの同期が内部で行なわれるために処理が単純化され,動作が高速になっている.
 80287/387にはメモリアクセス能力がないため、メモリからのデータ転送はメインCPUが代行していた。具体的には,コプロセッサ命令の第1バイトであるESC命令とそのアドレッシングモード部分はメインCPUが解釈し,第2バイト以降がコプロセッサのオペコードおよびパラメータとして渡されていたのである.今回,キャッシュメモリが入り,外部CPUのアクセスはキャッシュコントローラが代行するため,このためのオーバーヘッドがなくなり,CPU,コプロセッサともに高速動作することが可能になっている.動作クロック自体も少なくなっており,全体に高速化されている.命令によってはサイクル数が半分程度になっているものさえある。また,80287以降のコプロセッサはマルチタスクに対応するため,エラー状態を含めて,内部情報を退避,再格納する機能を持っていた.この命令の実行にはかなりの時間がかかり,マルチタスク化した場合の数値演算に大きく影響していた(これらの命令の実行サイクルは,ほとんどデータ転送におけるオーバーヘッドによるものだった)。486ではそれらの命令実行サイクル数も半分程度になっており,UNIX,OS/2等のシステムにおける科学技術計算等でも,かなりの性能を発揮することが期待できそうだ。


ASCII1989(08)c13特集CPU図1_W520.jpg
ASCII1989(08)c14特集CPU図2_W520.jpg
この解説を読んだだけで486は速いだろうと思える。事実速かった。

 486では,CPUを構成する演算ユニットやメモリ管理ユニット,そして命令解析ユニットなどが独立して動作するようになっている.したがって,それぞれが並行して動作し,演算中に次の命令を解析するといった動作が可能である。このため,命令の実行サイクルは,大幅に短縮された.8086の時点から,命令フェッチは,キューを使って先読みするようになっていたが,命令デコードユニットが独立して動作することで,最悪の場合を除き,命令デコード時間は命令実行サイクルに入らないですむ.
 さらに,386までは,命令解析,実行に「マイクロプログラム」を使っていたが,486では,複雑な命令を除きそれらを「ワイヤードロジック」で行なう.
 ほとんどの場合CPUは、命令を直接実行できるわけではなく,さらに単純な内部処理をつなぎ合わせて実行する.この内部処理の手順を記述したものがマイクロプログラムである.したがって,インストラクション上は1命令でも,内部では何度も処理が行なわれることになり、複雑な命令では実行に数十サイクルを要することも珍しくなかった.
 ワイヤードロジックというのは文字通り,目的とする処理を一挙に実行できるハードウェアユニットを作ってしまう方法である.そのため,複雑な命令の実現には非常に大規模な回路が要求されるが,内部的にも1処理になるためサイクル数を削減できる.486では各ユニットが並行動作することもあり,簡単な命令は1サイクルで実行できるようになった。たとえば,レジスタ間の転送命令は,386で2サイクルかかっていたが,486では1サイクルである
 486で拡張された命令は6種(オペコード上では15個)である.浮動小数点演算命令は80387と完全互換で、命令は拡張されていない.
 拡張された命令は,キャッシュ関係2種,ページング用TLB(Translation Lookaside Buffer)制御1種,マルチプロセッサ用命令2種,一般命令1種である.以下ではこれらの命令の機能と目的を解説する.
 CPU内部にキャッシュメモリが追加されたため,キャッシュ制御の命令が追加された。“INVD"と"WBINVD"である。前者はCPUの内部キャッシュを無効にし,後者はさらに,外部に接続されたライトバック方式のキャッシュの内容をメモリに書き戻したうえ無効にする,という趣旨の命令である.しかし,CPUが外部キャッシュを操作することは不可能なので,メモリへの書き戻し作業などはCPUの指示(信号ピンのアサート)を受けてキャッシュコントローラが行なう必要がある.
 なぜか内部キャッシュ用のINVD命令でも外部に特定の信号が出るようになっており,これを用いて外部装置がなんらかの処理を行なうことも不可能ではない.したがって,これらの命令によって何が起きるかは周辺ハードウェアの設計にかかっている.
 キャッシュ命令は,タスクの切り替えといった,キャッシュの内容が意味を持たなくなる場合に,キャッシュの初期化を行なうのに用いる.なお,この2つの命令は前述したように機種依存するため,将来の486ファミリでは違ったものとなる可能性があると,インテルのデータシートには記載されている.
 “INVLPG”は,ページング(メモリをページに分割して管理する仮想記憶の方法の1つ.386,486はページング方式の仮想記憶をサポートしている)に用いられるTLBと呼ばれるバッファをすべて無効にする.TLBは、最近変換したリニアアドレスとページアドレスの変換結果を保持しており,頻繁にアクセスするページをアドレス変化なしでアクセスできるようにするためのものだ。INVLPG命令は,大規模にメモリ配置を変更した場合などにOSがTLBを無効にする場合に利用される.
 なお,以上の命令はアプリケーションが勝手に使うものではなく,OSなどにのみ実行が許される命令である.

ワイヤードロジックは素人にも良く分かる概念だった。だから知識が碌にないにもかかわらずワイヤードロジックだから速くていいのだと知ったかぶりをしていた。

 マルチプロセッサ構成をとった場合に複数のプロセッサが同じリソースにアクセスしてしまう場合がある。その際,あるプロセッサがアクセスを終了していないのに,別のプロセッサがアクセスを行なうと,システムの誤動作をもたらす.これを防ぐためには,共有領域への一連のアクセスを中断なしに実行する必要がある.たとえば,セマフォのアクセスは,「読み込み,テスト,書き込み」の動作を,他のプロセッサの干渉なしに行なわなくてはならない.シングルCPUならば,前後に割り込み禁止,解除の命令を付けることで外部デバイスのアクセスを排除できるが,マルチプロセッサの場合にはそうはいかない。そこで拡張されたのが,次の2つの命令である.
 “XADD"命令は,XCHG(交換)命令とADD(加算)命令を一緒にした命令であり,“CMPXCHG"命令は,CMP(比較)命令とXCHG命令を一緒にしたものである.
 これらの命令にLOCKプリフィックスを付けることで,命令実行中の他のCPUからのアクセスを禁止し,セマフォなどの操作を安全に行なうことができるわけである。
 486で拡張された一般命令は,“BSWAP"がある。この命令は32bitレジスタ内のデータをバイトごとの並びを変えるものだ。86系のCPUはワード以上のデータは,下位バイトが先にくるように並ぶ(これをLittle Endianという)。しかし,68系のCPUやメインフレームなどでは,逆に上位バイトが先にくるようになっている(Big Endian).この両者を変換するのがこの命令である(図4)。これらのCPUとのマルチプロセッサ環境や,Big Endian方式のフォーマットで書かれたデータファイルのアクセスなどに威力を発揮する.
 ソフトウェアから見ると486は,286から386への変化のように大きく変わったわけではなく,8086→80186のように周辺を集積し,命令実行速度を上げた形の改良といえる。新たなアーキテクチャ上の変更を行なう必要はないと考え,高速化やマルチCPU化(これも一種の高速化である)に対応したCPUにしたものだ。したがって用途としては,386のものがそのまま当てはまる.
 OSなどの現状を見ると,パーソナルコンピュータ用にはようやく80286の機能を生かすOS/2が登場した段階であるが,ワークステーション等では,386の32ビットアドレッシングやページ管理仮想記憶が利用されている.
 486は,高速なパソコン用(MS-DOS,OS/2用)CPUとしての用途は当然としても,どちらかというと,ワークステーション向けの改良といった感がある。マルチCPU化への対応については,特にそう感じる.
 1~2年で486搭載のマシンが現在の386マシン程度の値段で手に入るようになるはずだが,その時に動いているOSは, 体何なのだろうか?
(呉井一)

(写真提供:インテルジャパン(株))


ASCII1989(08)c15特集CPU図4_W329.jpg
 セマフォという概念はずっとピンとこなかった。マルチプロセッサなんて使ったこと無いし、意識したことがなかった。ホームページ作りのとき複数ユーザーが同時に同じファイルをアクセスするとき排他的制御を実現するためにセマフォの概念が理解できた。Unixではlock,unlockがあったがWindowsではなかったのでmkdirを使ったことが懐かしい。
 BSWAP命令は使ったことがなかったが、Little EndianとBig EndianはCでプログラミングしたときも意識した。
「その時に動いているOSは,体何なのだろうか?」Windows 3.1やWindows95でした。

以下コラム記事をスクラップする。

マイクロプロセッサとは
 大型小型を問わず,コンピュータの動作のすべてを統括しているのがCPUである.標準的なCPUは,データやアドレスを一時的に保存するレジスタ,加減乗除や論理演算などを行なう演算部(ALU),メモリや周辺機器とのデータのやり取りを行なう回路(BIU),命令を解釈し、他の回路をコントロールする制御部からなっている.以前はこれらは複数の部品や基板で構成されていたが,LSI技術の登場でCPUの主要部分すべてを,1つの部品(LSIチップ)に組み込むことが可能になった。これがマイクロプロセッサ(以下MPUと略す)である.
 MPUは,外部にあるメモリや入出力機器と,バスと呼ばれる信号線の集まりで接続される.バスは,データを送るためのデータバス,データをやり取りする相手先を指定するアドレスバス,さまざまなコントロール信号を伝えるためのコントロールバスの3つの部分からなっている.
 メモリ中に蓄えられたプログラムは,バスを通してMPUに送られ,制御部にあるデコーダで解釈される。その結果にしたがって,制御部がALUやレジスタを操作したり,レジスタの内容をバスを通して周辺機器やメモリに送るように指令を発する.
 プログラムの解釈は、初期のCPUでは純粋な電子回路で行なっていた(ハードワイヤードロジック).ところが,MPUの構成や命令が複雑化するのにともなって,ごく基本的な動作だけをハードワイヤードロジックで行なうごく小規模なCPUを用意し、命令の解釈と実行を,MPU内部のメモリに蓄えられたプログラム(マイクロプログラム)でその小CPUを動作させて行なう「マイクロプログラミング」方式のMPUがあらわれた。マイクロプログラミングは、命令の拡張や設計が簡単になあるため,現在主流になっているMPUのほとんどがこの方式を使っている.
 しかし,マイクロプログラミング方式は,ハードワイヤードロジックにくらべて動作速度が劣るため、最近では命令の種類を減らしてすべての命令をハードワイヤードロジックで実行するRISC(Reduced Instruction Set Computer)タイプのMPUも登場してきた。RISCに対して、命令の種類が多いMPUをCISC(Complex Instruction Set Computer)と呼んでいる.



Motorola社の68040もCRISPチップ
 68000は1979年に発表された,内部処理32bit,外部バス16bitのCPU(同社はMPUと呼ぶ)であり,Intel社の80x86シリーズとともに,パソコン用CPUの2大勢力となっている.バスも32bitになった68020/68030は,ワークステーション市場(NEWSやSUN-3など)で先行して採用された経緯があり,今後も386/486と市場を分け合っていくものと思われる.このようななかで,68040がどのような形で発表されるかは注目されるところだ.すでにHewlett Packardが同社のワークステーションの最上位機種への搭載を決定しているほか,ソニーもNEWSに採用したいとしているなど,市場の期待は大きいが,実際のプロフィールは3月に概要が発表されたのみだ.ここでは発表資料をもとに,68030からの主要な変更点をレポートし,486との共通項やCISCチップの今後を眺めてみたい。
ソフト的なアーキテクチャは68030と同じ
 要約すると68040は,68030に周辺回路を組み込んでワンチップ化したもので,68030の完全上位互換で,命令系にもラディカルな変更は加えられていない。68030がすでにMMUを取り込んでいたので,今回加えられたのはFPU(浮動小数点演算装置)とキャッシュシステムである.ままた,命令の一部をワイヤードロジックにすることで,基本命令を中心に動作速度の改善を図っている(25MHz版で13.5MIPS.同クロックの68030の約1.7倍).
 FPU部は,68882の機能のうち超越関数部分を除く部分で構成されているので,68882用のそれらの命令を受け取ると例外処理の割り込みが発生する.Motorolaは,これを受けて超越関数をソフトエミュレートする「68882超越関数ハンドラ」を,68040とセットで提供する.エミュレーションとはいえ,68040ではFPU部でも基本的な命令をワイヤードロジック化したため,68030+68882(33MHz)よりも68040(25MHz)のほうが高速に動作するという.キャッシュメモリは486と異なり,インストラクション用とデータ用に2系統を装備しており,同時に動作可能になっている.システムは486と同じ4ウェイセットアソシアティブ方式で,容量はインストラクション/データそれぞれに4Kbytesとなっている.
 このほか,DMACやマルチプロセッサシステムでのバス共用時のために,バススヌーピング機能が装備された.これは,他のチップがメモリをアクセスした際に,アクセスされたアドレスがCPU内キャッシュに存在する場合はキャッシュを無効にする機能である.これによって従来利用できなかった共有領域でのキャッシングが可能になった.

CISCとRISCの接近
 ソフト上の設計変更がない点,FPUとキャッシュの組み込み,マルチプロセッサ環境の意識など,68040と80486には類似した点が多い。特にワイヤードロジックによる命令実行サイクルの低減という,RISC的なアーキテクチャを取り入れた点は,従来機能の拡張を主眼にしてきたCISCチップとしては転回的な変化である.一方,RISCチップでも一部浮動小数点演算などをサポートする動きもあり,両者は双方の利点を吸収しながら接近することになるようだ。
 同社ではすでにRISCチップ88000シリーズを販売しているが,こちらは高速化をクリティカルに要求される分野向けに機能を上げていき,CISCの68000シリーズは,従来の68000用ソフトウェアをそのまま利用できる利点を生かし,ハイエンドのワークステーション用などから浸透を開始したいとしている.

この頃のCPUは素人にも分かるもので分かれば楽しくなった。分かったうえでパソコンを使うと楽しかった。ちょうどこのころCPUの進歩がぐんと早くなったように思う。




nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。