MC68000 でのデマンドページングの実現
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/18 09:45 UTC 版)
「MC68000」の記事における「MC68000 でのデマンドページングの実現」の解説
680x0系の最初のプロセッサであるMC68000の仕様は、外部支援なしにはデマンドページングの実現が困難なものであった。 デマンドページングでは、実行中の命令のメモリアクセスがページフォールトを起こしたら、(それが正常なアクセスであれば)その実行中の命令の実行を一旦フリーズし、外部記憶と主記憶の間でスワッピングをおこなってから、実行中だった命令の実行から再開する、という処理が必要である。 しかし、MC68000がページフォールトの際に保存する内部情報は、「実行中だった命令の実行からの再開」ができないものであった。このため、MC68000の通常の割り込みの処理に従ってしまうと、デマンドページングは実現できない。これを、単にそもそもサポートするつもりが無かったものとみるむきもあれば、「仕様のバグ」とみるむきもあれば、後述のようにして実現が可能であるし、MMUも計画中に過ぎなかったのだから「将来仮想記憶をシリコン上に実装することを正当化する需要が発生するまでの暫定的な実装仕様」だったと考えるほうが自然である、とみるむきもある。 そのようなMC68000で仮想記憶を実装するためには、MC68000には次のような機能があった。バスアクセス中にあるピンをアサートすることにより、命令の実行をそこで一旦フリーズし、スリーステートバスをハイインピーダンスにして解放させたままいつまででも止めておいて、そののち、元の命令の中断したバスアクセスから再実行(re-run)する機能である。これによるバスサイクルをリランサイクル(rerun cycle)という。 これを利用して、メインのCPUであるMC68000を止めた状態で、別のプロセッサでページ処理をおこなうようにして、デマンドページングを実装できる。必然性はないが、同じバスに接続する容易性から、この補助プロセッサにもMC68000が使われることが多い。 以上のようなMC68000のデュアル・プロセッサによる仮想記憶を実現したコンピュータとしてはアポロコンピュータのDomainが有名である。同社の実装ではページスワップを担うスレーブ・プロセッサは、通常時はグラフィックス・プロセッサとして動作し、必要に応じてマスターのページ・スワップ要求に応じた。 この問題は後のMC68010で解決された。MC68010では、バスエラーとアドレスエラーが発生した場合、エラーを発生させた元の命令を指すプログラムカウンタのアドレスをスーパバイザスタックに保存することにより、元の処理に復帰できるようになった。
※この「MC68000 でのデマンドページングの実現」の解説は、「MC68000」の解説の一部です。
「MC68000 でのデマンドページングの実現」を含む「MC68000」の記事については、「MC68000」の概要を参照ください。
- MC68000 でのデマンドページングの実現のページへのリンク