"wd"
なのか?▼わたしは UNIX Wizard ではなく、Freeでない頃の純BSDは いじったことないし、 相性問題の激しかったころのAT互換機もいじっていないので、 間違ったことを言っている可能性がありますが、
$Id: wd.html,v 1.6 2001-03-27 06:40:41+09 kabe Exp $
まず結論から言ってしまうと、"wd" てのは "Western Digital" の略… だと思っていたんですが、4.4BSD-Liteの MAKEDEV には
# wd* "winchester" disk drives (ST506,IDE,ESDI,RLL,...)などと書いてあるので、真相は昔のことを知っている 人でないとわからんです。
BSD-Lite由来のNetBSD,FreeBSDでは、後になって
wd - Generic WD100x diskcontroller driver (FreeBSD 2.0, 1994/08/31)なんてのがマニュアルに追加されてるので Western Digital のつもりのようですが…
wd - WD100x compatible hard disk driver (NetBSD 1.4, 1998/10/15)
手元に "DYNIX System Administration Guide" という 誰も知らない(国内では100人いないと思う)4.2BSDベースのOSの マニュアルがあるんですが、これでは "wd" は新しめ(当時;300MBくらい)の SCSIディスクを指しています。
IBM PC/XT や ATについていたハードディスクは、
CPU(i286) --(ISAバス)-- WD1003 ----+--- ST-506 +--- ST-506 [ マザーボード ][ 拡張カード ]この頃のHDDの容量は 10M-20M くらいが相場で、500MB なんて想像もつかん という時代です。
WD1003とST-506の間の接続は、シーク信号や読み書きの アナログ信号が通っています。 ちなみにフロッピーディスクではどうかというと、
CPU(i286) --(ISAバス)-- μPD765 ----+--- 5" FDD (Shugart接続) +--- (2台目FDD, 5"か3.5") [ マザーボード ][ 拡張カード ]μPD765てのは NEC のチップです。今ではチップセットに取り込まれてはいるものの、 日本発のスペックが世界標準になった隠れた例だと思います。
しかし高機能な故コマンド体系が複雑で、ドライバを書くのがめんどくさい。 自作マイコンを作った時は、 あまりに誤動作するのとドライバがめんどくさいという理由で、 もう一つのメジャーである FD1793 (Western Digital) を使いました。 互換品の MB8877(富士通) なんかは FM-77(同) で使われています。
時代が進んでハードディスクが標準的になると、部品点数を削るため 中間にある部品は両側のどちらかに吸収されます。
フロッピーの場合はわかりやすくて、μPD765とFDDの間で切り、 FDD はそのままで、μPD765はマザーボードのマルチI/Oチップやチップセットに 吸収されます。
ところが HDD ではなにを血迷ったのか ISAバスの位置で切断され、
WD1003コントローラはハードディスク側に搭載されるようになりました。
(現実問題として、高速のアナログ信号を引き回したくないという
考えだと思う。)
これが IDE (Intelligent Drive Electronics) ハードディスクです。
CPU(i286) --(ISA)--+-- マルチI/O(μPD765互換) -- FDD | +-- 単なるバッファ ---------- IDE-HDD (WD1003互換コントローラ搭載) [--------------マザーボード-------------------]
ですから、IDE コネクタには ISA バスとほとんど同じ信号線が出ています。 基本的な図式は EIDE や UltraATA になっても変わっていません。 BIOSの 504MB 制限なども、元をたどれば このWD1003 のスペックが元になっています。
初期のIDEディスクでは、2台目のディスクは1台目と同じメーカーのものを 使えという話を聞いたことがあるかと思います。 WD1003がHDD側に移ってしまったので、無理が生じているからです。
つまり、今までは 1つの WD1003 で 2台のHDD を制御していたわけですが、 IDE では
CPU --- バッファ ---IDEコネクタ---+-- WD1003 --- HDD | +-- WD1003 --- HDD [---------マザーボード-----] [----IDE HDD-----]となり、本来1つのコントローラーが2つ、同じアドレスに 居座っていることになります。 何もしなければ信号がぶつかったりするので何らかの対策が必要です。
ので、IDEの2台目は「スレーブモードで動け」と設定し、 2台目のHDDに関するアクセスだけに反応するように細工します。 同様に1台目には「マスター」に設定し、1台目にだけ反応するようにする。 コントローラー全体に対するコマンドは、両方が読みとり、 片方だけが応答するという形になります。 (両方応答すると信号がぶつかってしまう。)
ここで、「片方だけが応答する」わけですから、ちゃんと2台目との整合性 がとれていないとうまく動作しません。 1台目のコントローラーからは2台目が一切見えませんから、今までの CPUからのアクセスを横から見ていて「たぶん2台目はこういう動作をしてるんだろう」 と予想しながら動かないといけません。
IDEディスクのメーカーが違えば、使われているコントローラーの仕様も
微妙に変わってきます。基本は WD1003 互換のはずなんですが、予想が
外れると変な動作になると。
だから、「なるべく同じメーカーで揃えろ」
場合によっては「容量も揃えろ」と言われるようになるわけです。
(同じメーカーでも動かない場合もあったかもしれない)
こんなんじゃ話にならんということで、ANSI がIDE を規格化したのが ATA (AT-Attachment) です。 最近のIDEハードディスクは全てこれに対応していますから、 相性問題はほとんどなくなりました。ありがたやありがたや。
WD1003はHDDは2台しか制御できないので、ATに繋げられるHDDは 基本的に2台までです。 最近のAT互換機では「セカンダリIDE」を搭載、つまり等価的に WD1003相当のものをもう一つ、別のアドレスににつなぎ込むことによって、 4台までのHDDが制御できるようになりました。 (時代は進化しているので、WD1003互換ではあるがいろいろ拡張されています)
CPU ---&'#($%--+--[IDE1:ISAバスもどき]--+-- (WD1003に見える) -+- HDD | +- HDD | +--[IDE2:ISAバスもどき]--+-- (WD1003に見える) -+- HDD +- HDDIDEはコントローラー1つにつき1つの IRQ を消費するので、ただでさえ少ない IRQ がさらに少なくなりました。 (プライマリ → IRQ14, セカンダリ → IRQ15 )
コントローラーに使われていた WD1003 チップの頭文字、というのが 私が信ずるところです。 が、前述のように 4.4BSD-Lite では "winchester" と書いてあるので 本当はどうだったんかいな。
なぜ winchester ではなさそうだと思うのかというと、
逆に winchester をサポートする理由としては
もっとも当時のデバイスドライバはアーキテクチャ間で使い回しが 効かなかったでしょうから、i386に限った話で十分… ううむ winchester の略なのか?
んじゃ WD1003 の WD はなんの略だと聞かれても、真相は Western Digital の 名付け親に聞かんとわからんです。半導体チップの名前ですから、必ずしも なんかの略だというわけでもない。 (日立→HD、NEC→μP、富士通→MB、モトローラ→MC…)
今ではWestern Digital製のチップが一切使われていない構成も
普通になっていますが、わざわざデバイスドライバの名前を "ide"
とか "ata"
に変える気は起こらんと思います。
別に困っていないしね。
BSD以外ではどーなっとるのかのぅと思っても、調べられる資料は 思ったより少ないような。
wd
ata
(7D)
idedisk,idecdrom
、/dev/ide?
ide
"ide"
を採用しとるようです。
日本では、初心者を卒業した中級者むけの書籍や資料は本当に少ないです。
PCアーキテクチャが根付くためには、config.sysの議論や機器の 接続のお話だけではだめで… (ブートストラップP-2#4, 1993/07/01)という状況は、5年後の今でもあまり変わっていません。