« jrogue for MacOS X! | Main | 我が意を得たり »

MacOS X


MacOS XのベースはDarwinである。従って、MacOS XのカーネルのソースはDarwinのそれと基本的に同じである。ただし、MacOS Xでは、AppleがBTOでつけたいくつかのSCSIカード等を使用するためのドライバが追加されており、これらはカードベンダーのライセンスとの兼ね合いで、Darwinでは公開されていない。しかし、それらのカードを使わないのであれば、DarwinのカーネルはMacOS Xに持って来てもきちんと動作する。MacOS X用のDev-toolsをインストールすれば、自前でカーネルハックも可能だ。

MacOS X Public beta だが、G4アップグレードカードを使用したPCI Macでは全く起動しない。これはカーネルがCPUの初期化をする段階で、旧機種+G4という環境を想定していないためである。この件に関して、L2Chashe Configを作ったRyan Rempel氏がDarwin-Dev MLで詳細な分析をしている。
以下Rampel氏のmailからの一部翻訳。


L2CR プロセッサレジスタは、起動時にデフォルトで0になっている。一般にL2CRレジスターを正しい値に設定するのはROMの仕事である。しかし、7600のROMはL2CRレジスタの事を知らない。従って、このルーチンが現在のL2CRの値を得ようとした時、この値は0になる。これはL2キャッシュを無効にするべき正しい値である。しかしこれはもちろん最適な値ではない。
興味深い事に、G3プロセッサでは、キャッシュ無効状態ではあるものの、カーネルはブートし、per_proc_infoの値を手動でセットして、後でcacheInit()を呼ぶ事でL2キャッシュを有効にできる(これは私のL2CasheConfigユーティリティが行なっている事である)。なぜG3とG4でこのような違いが生じるのか。
start.s内のG3とG4のコードを見比べてみると、G3コードはL2CRの値が正しいRAMサイズかどうかチェックしているのに気づくだろう。(RAMサイズはL2CR内の2ビットの値であらわされる)。G3では、0x00のRAMサイズはリザーブされており、従って、アップグレードされた7600で、L2CRが0である場合、コードはそれが間違った値であると判断し、故に、per_proc_infoに、L2キャッシュがあるという設定をしない。
G4では、これに対して、0x00のRAMサイズは有効であり、それは2MBのRAMが存在する事を示している。従って、コードはL2キャッシュがあるとper_proc_infoに記録し、かつ、L2CRの値は0である。しかし、もちろんこれは矛盾した状態である。後に、cacheInit()ルーチンはL2CRの値0でL2キャッシュを有効にしようとする。これは、もしcacheInit()が値0を文字どおり0として扱うならば、そう悪くはない。しかしそうはしない。ルーチンはL2キャッシュが存在すると仮定し、キャッシュを有効にしようとする。結果的に、このルーチンは有効ビットをセットし、L2CRレジスターを0ではなく0x80000000にする。この結果、正しくない値をセットした事によって、コンピューターは即座にフリーズする。

ところで、僕はアセンブラについてはZ80しかやったことなかったので、もとのソースはチンプンカンプンでした。でもまあざっとソースを眺めるとbがブランチの意味らしい位はわかるし、bgeやbltもまあなんとか。というところ。こういう場合、コメントが充実してると実際助かるな。上記のG4カードで起動しないなんてのは、ある程度経験のあるプログラマならすぐに原因と対処法を発見できるレベルの問題だと思うけど、PublicBeta登場後、今までなかなか出てこなかったあたりは、Apple社内のOS Xチームは旧機種のサポートには興味がないだろうし、Opensourceとして取り組んでいる外部のプログラマは人数が不足しているんだろうな。こういうのは自分のマシンで動かないのを何とかしたいという人間が解決する傾向がある。

ところで、CPUアクセラレータを作っている会社こそが、Darwinに参加してこういう所を調べるべきだと思うのだけど、どうだろう。いや多分やってると思うけどさ。他の周辺機器や拡張カードメーカーはAppleと一緒に、最新機種にフォーカス絞っていけるだろうけど、CPUアクセラレータの場合、旧機種でこそ有り難みがあるわけで、新OSのコアを直接触れるDarwinはチェックしておくべきだと思うのだけどどうだろう。まあ、言わなくても実際やってるかなあ。

なんか、MacOS X PBで、弊社のG3/G4アクセラレータは起動しますが、L2キャッシュが有効になりません、なんてことをWebページに載せてる会社は自分とこのG4カードでの確認すら行なっていないんじゃないかと思うのよ。

|

« jrogue for MacOS X! | Main | 我が意を得たり »

「パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/53276

Listed below are links to weblogs that reference MacOS X:

« jrogue for MacOS X! | Main | 我が意を得たり »