68Kは、割り込みの際に特権スタックに書かれるデータが世代毎に異なり、スーパーバイザを含めたソフトウェア互換性は維持できていません。これは単純に設計思想で、スーパーバイザは世代毎に移植して、ユーザプログラムは互換、ということで考えていたのだと思います。一方、80386ではリアルモードで8086と全く同じシステムソフトウェアを使うことが可能です。 同じように、キャッシュについても、68030では命令キャッシュに乗っているデータを書き換えた場合、当然キャッシュに乗っているデータを実行してしまい、一部の自己書き換えを用いるプログラムではキャッシュを利用できません。i486もキャッシュを実装していますが、こちらは自己書き換えコードをサポートする設計になっています (Shoemaker, Ken: The i486 microprocessor integrated cache and bus interface [doi.org])。
そりゃあれですよ (スコア:2)
直接的には、それだけバイナリ互換が重要だったからなんだけれども
386のアーキテクチャ設計が非常に優秀だったからってのがあるでしょう。
で、ARMがx86を殺すかどうかなんとも言えないと思うけどな。
Re: (スコア:0)
386が優秀ではないとは言わないが、i686で採用した内部RISCによって延命できたと思うよ。
別の見方をすると、CPUシリーズで異なるuOPを吸収しているのがx86じゃないかな。
生物界でも、優秀な種が生き残っているというわけでもなく、柔軟性があったからという例は多い。
私はi386より68Kの方が優秀だったと思う。
Re: (スコア:2)
> 私はi386より68Kの方が優秀だったと思う。
i386比でなら68kは善戦していますが、最短命令が1ワード(2バイト)と言うのは、i386の最短命令長1バイトと比べてメモリ貧乏だった当時はコード密度の点で厳しかったです。
また、i386は自力で仮想記憶をサポートしていますが、68kは68010に外部MMUを追加しなければ仮想記憶をサポートできなかったり、命令セットが32bit化けを最初から想定しているなど掲げた理想は高かったのに比べて実装が追いついていない面もありました。
アーキレベルの残念な点は
・CLR命令でRMWバスサイクル発生させる( MOVEQ #0, DST で十分)
・相対ジャンプのオフセットが何故バイト?奇数だとアドレスエラーになるのでワードで指定すれば倍の範囲にジャンプできた
・直交性のあるアーキを標榜する割にデータレジスタとアドレスレジスタが別
などなど、それほど良いプロセッサかどうかは疑問。
結局、i386と競ったというのが伝説の原因?
Re:そりゃあれですよ (スコア:2)
68Kは、割り込みの際に特権スタックに書かれるデータが世代毎に異なり、スーパーバイザを含めたソフトウェア互換性は維持できていません。これは単純に設計思想で、スーパーバイザは世代毎に移植して、ユーザプログラムは互換、ということで考えていたのだと思います。一方、80386ではリアルモードで8086と全く同じシステムソフトウェアを使うことが可能です。
同じように、キャッシュについても、68030では命令キャッシュに乗っているデータを書き換えた場合、当然キャッシュに乗っているデータを実行してしまい、一部の自己書き換えを用いるプログラムではキャッシュを利用できません。i486もキャッシュを実装していますが、こちらは自己書き換えコードをサポートする設計になっています (Shoemaker, Ken: The i486 microprocessor integrated cache and bus interface [doi.org])。
このように、偏執的なまでの互換性へのこだわりがPC市場で受け入れられている・要求されているのだと私は理解しています。
Re:そりゃあれですよ (スコア:2)
例外の時にスタックに積まれるデータは内部マイクロコードのダンプと言うべきもので、むき出しの内部アーキが出てしまうのですが、x86は特権レベル移行と連動してスタックポインタを自動的に切り替える事でうまくそれを隠していますね。
x86が特権モードのない8086からスタートしたのが、結果的にいい方向に作用したようにも見えます。
80386が単に速い8086として振る舞うことが容易、というのは市場戦略上の成功要因の一つですね。
Re: (スコア:0)
486でもキャッシュをパージしないとうごかないっすよ。
Re:そりゃあれですよ (スコア:1)
486の場合、「プリフェチキューが長くなった」「命令コードがプリフェッチキューに入ったあとでメモリを書き換えても、キュー内の命令コードには反映されない」ということで、自己書き換え系のコードが結構動かなくなりましたね。
Re: (スコア:0)
よっぽど不評だったのかPentiumで勝手にフラッシュしてくれるようになったね。やっぱり互換性大事。
Re: (スコア:0)
68040といえばbrain damaged MMU(NetBSD/Amiga)で有名ですが、
命令キャッシュのinvalidationは特権命令で、Kaffe VMのJITコンパイラのコメントにモトローラのバカ野郎と書かれていました