MMU

MC68000用のメモリ管理ユニットとしてMotorolaが開発したのがMC68451です。セグメント式のメモリ管理を提供します。メモリを比較的大きな複数のセグメントと呼ばれるブロック(各ブロックのサイズは任意で、しかも共通のサイズである必要はない)に分割し、それぞれのセグメント単位でメモリ属性を管理します。一般的な使い方では、マルチタスクモニタで各タスクごとにプログラムとデータのセグメントを割り当て、他のタスクからのアクセスを制限したり、プログラムセグメントにタスクが書き込みを行った場合には異常検出を行えるようにするという形になります。どちらかというと、あらかじめ動作するタスクの種類や数が固定である組み込み用システムの信頼性を高めるためのMMUであり、パーソナルコンピュータとしてユーザが任意のタスクを勝手な順序で起動して処理するような用途には向いていません。
このMC68451は1個で32個のセグメントを管理できます。それ以上のセグメントが必要な場合、複数のMC68451を組み合わせて32の倍数でセグメント数を増加させられます。非常に手の込んだLSIでしたが、出荷時期が遅れに遅れ、使用例は少ないと思います。また、MMUを使用すると、アドレス変換時間がよけいに必要となるためシステムの動作が遅くなり、もともとMC68000と組み合わせてもシステム全体の信頼性を高めるだけの役目しかないために(んー、プログラムの開発がやりやすくなるかというと、どうでしょう)、わざわざコストの高いMMUを使用する積極的なメリットが見つからないというのも、使われなかった原因でしょう。

MC68451

あと、MMUを併用してもMC68000単独では仮想記憶を使えません。相応の外部回路が必要となります。あ、たまにMC68000にはバグが有って仮想記憶が使えないのをMC68010で修正したなんて書いてあるものを読みますが、それは誤りです。MC68000には仮想記憶の機能がないので使えなかったのを、MC68010では仮想記憶サポートを追加しただけです。8080Aに乗算命令がないのが8080Aのバグだと主張するようなバカらしい意見ですね。バグ説は。
それでMC68010とMC68451を組み合わせることも可能で、一応は仮想記憶を使いこなすことができますが、人がパーソナルコンピュータ的に使用するためのOSを実装するにはセグメント式のMMUは使いにくいので、そういう用途に使われた例はほとんどないでしょう。たとえば、128 KByteのメインメモリと20 MByteのハードディスクドライブを備えた何かの制御装置で、各タスクがせいぜい30 KByteのメモリを消費するけれど制御プログラム全体では1 MByteになってしまってメインメモリに同時に格納することができない。ただし同時には3個のタスクがメインメモリに存在すれば、パフォーマンスはそんなに落ちないなんて場合に役立ちます。プログラムオーバーレイの技術を使えば仮想記憶なしでも動作させられそうですが、細かいオーバーレイの設計をせずに一応は動くプログラムが作れるという意味では、そういう仮想記憶をサポートするモニタ下でプログラムを開発する方が楽になります。こういった組み込み用途では、各タスクの使用するメモリの上限がプログラム作成時に厳密に決まっていることが多いためセグメント方式のメモリ管理に適合しやすいわけで、仮想記憶サポートがCPUにあれば、実行時にタスク単位でメモリの内容を入れ替えることができます。

Return to IC Collection