Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

大昔のMMU

1 259 vues

Publié le

Ancestral MMU of micro computers

Publié dans : Technologie
  • Identifiez-vous pour voir les commentaires

  • Soyez le premier à aimer ceci

大昔のMMU

  1. 1. 大昔の MMU (Memory Management Unit) 2017.JUL.22 たけおか@AXE/たけおかラボ @takeoka
  2. 2.  1.「リレーショナルデータベースを内在するカーネルプログ ラム、方法及び装置」 ● かなり広範囲に適用される… ● データベースをカーネル空間内で動作させる ● 特許番号【特許第5711840号】 ● 登録日 【2015年3月13日】 ● 株式会社ネクスティエレクトロニクスと、 たけおかラボ株式会社との共同特許 ● 2.「アプリケーションに依存することなくファイルにアクセスする OSプログラム及び方法」 ● データファイルに、データへのアクセス手続きを、くっつけておく ● OS API経由で、データファイル内のアクセス手続きを呼び出す ● どんな形式のファイルでも、データの読み書きができる ● 特許番号【特許第6143038号】 ● 登録日 【2017年5月19日】 ● 株式会社ネクスティエレクトロニクスと、 たけおかラボ株式会社との共同特許 ※たけおかラボ(株)は、(株)アックスの子会社 取得済み特許:今後の基本ソフトウェアの重要な部分
  3. 3. 8bit時代 MP/M 8080 (1979年) ● MP/M (CP/Mのマルチユーザ版) – 8080 CPU ● Z80の先祖。Z80は、8080のバイナリ上位互換 ● クロック:2MHz – マルチユーザ/マルチタスク ● 最小 32KB メモリで動作 – バンク切り替えが通常の時代 ● 「バンク切り替え」一般人には、PC9801(8086,V30)で1MBを超えるときに、有名になる ● MP/Mは、メモリの下位32KB〜48KBを、切り替えて使用 – 上位に、OSが居た – MMUがあれば、使用できた ● マッピング(アドレス変換) – アクセス管理、不在ページ管理など無い ● バンク切り替え/ページ・テーブル操作部分は、抽象化、分離されていた – XIOS部分を、ハードウェアに合わせて、コーディング – 1MBぐらいの実メモリを扱える ● 8080,Z80の論理空間は64KB
  4. 4. 4 OS常駐 使えない 使えない バンク切り替え・メモリ模式図 ● 物理メモリの上位アドレスは、バンク・レジスタで与える ● (主に80系の場合)上位アドレスには、OSが常駐する ● 物理メモリの一部は、使えないことが多い – OS常駐部と重なる部分が、無駄になるハードウェアが一般的 論理空間 バンク#0 0番地 上位アドレス バンク#1 バンク#2 OS常駐 バンク・ レジスタ
  5. 5. 5 バンク切り替え・メモリ模式図 バンク#0 0番地 上位アドレス OS常駐 バンク・ レジスタ OS常駐 使えない バンク#1 使えない バンク#2
  6. 6. 6 昔のハードウェア バンク切り替え(1) ● TLBなんか無い ● 物理アドレス上位は、バンク・レジスタで拡張 ● 64KB 論理空間の上位8〜16KBぐらいは、バンク切り替えが効かないようにする – 論理空間の最上位アドレスには、OS(CP/Mとか)が常駐 – リセット時には、ROMが出てくるようにも、しなければならない バンク・ レジスタ CPU メイン・ メモリ バンク設定 Z80系は、 I/O命令 下位アドレス 13bit 変換テーブルが一つの場合 データ・バス 物理メモリ 上位アドレス 上位アドレス 3bit 最上位8KB検出 (3bitのAND==1 Then bank=0)
  7. 7. 7 マッパ・メモリ管理模式図 ● プロセスは論理アドレス空間で動作 ● 実メモリと、プロセス空間のメモリ・アドレスは異なる ● メモリ保護がある ● 基本的に、他のプロセスのメモリは、触れない ● プロセス空間に、物理ページを貼り付けてアクセス可能にすることを、「マップする」という プロセス B 機械の実メモリマップ プロセスの仮想空間 プロセス A プロセスの仮想空間 実メモリがマップされる ページ単位で 通常はOSが暗黙に行う 実メモリがマップされる ページ単位で 通常はOSが暗黙に行う
  8. 8. 8 昔のハードウェア mapper(1) ● TLBなんか無い(TLBミスのペナルティは無い \(^^)/) ● 全アドレスを、テーブルで持つ ● 高速SRAMにテーブルを入れる ● テーブルをセットするのは、ちょっとした工夫が要る – セットしたいテーブルのアドレスを、上位アドレスに出し、データ線から書き込み 高速 SRAM CPU メイン・ メモリ アドレス 読み出しデータ 上位アドレス 4bit(PDP-11, Z80, 6809) 12bit(680x0) 下位アドレス 12bit (4KB/ページ) 変換テーブルが一つの場合 データ・バス 書き込みデータ 上位アドレス 本数、多め。 8bitで、1MB 物理メモリ
  9. 9. 9 TLBインコヒーレンシ、なにそれ?! ● TLBなんか無い ● 昔は良かった – 2CPUぐらいなら、あり得た – CPU内キャッシュが無い時代だった。メイン・メモリも超遅かった 高速 SRAM CPU メイン・ メモリ DRAM アドレス 読み出しデータ 上位アドレス 4bit(PDP-11, Z80, 6809) 12bit(680x0) 変換テーブルが一つの場合 上位アドレス 本数、多め。 8bitで、1MB 物理メモリ CPU CPU
  10. 10. 10 昔のハードウェア mapper (2) ● 全アドレスを、テーブルで持つ ● 高速SRAMにテーブルを入れる ● コンテキスト(プロセス)を、複数持てる ● コンテキストが複数 無いと、プロセス・スイッチの度に、全テーブルの入れ替えが 発生 高速 SRAM CPU メイン・ メモリ アドレス 読み出しデータ 上位アドレス 4bit(PDP-11, Z80, 6809) 12bit(680x0) 下位アドレス 12bit (4KB/ページ) 複数コンテキストの、変換テーブルがある場合 データ・バス 書き込みデータ 上位アドレス 本数、多め。 8bitで、1MB 物理メモリ コンテキスト・ レジスタ
  11. 11. 6829MMU 8bit時代 (1980年ごろ) ● 6829(67476)は、6809専用MMU – アドレス変換のマッパ。64KB論理空間を、2MBの物理メモリにマップ ● 16bit アドレス→21bit アドレス – 2KB/ページ(下位11bit) – コンテキスト(“TASK”)は、4つ ● 6829を増設すると、増やせる – システム/ユーザの管理(プロテクション)はある – DMAは、Task#1 を使用 ● システム・モード/ユーザ・モードがある – 6809CPUには、そういう概念は無い。 MMUがサポート – システム・モードでは、MMU操作ができる ● ユーザ・モードは、MMUに触れない – 見えないページは、絶対に見れない ● CPUが外部割り込みを受けるか、ソフトウェア割り込み(SWI, (INT))を実行すると 6829は、システム・モードになる – CPUが出力しているステータス信号を、見ていると,割り込み応答 実行が判る ● システム・モードから、ユーザ・モードへの移行 – CPUが、6829のヒューズ・レジスタに値を書き込む ● 何クロック後に、ユーザ・モードになるか ● プロセス再開の定石ルーチンの実行クロック数は、決まっている – キャッシュとか無いので、いつも同じクロック数 – その後、ぴったりのクロック後に、ユーザ・プロセスの再開を行う @houmei さんのつぶやきより
  12. 12. 6829MMU 8bit時代 (1980年ごろ) ● システム・モードから、ユーザ・モードへの移行 – CPUが、6829のヒューズ・レジスタに値を書き込む ● 何クロック後に、ユーザ・モードになるか ● プロセス再開の定石ルーチンの実行クロック数は、決まっている – キャッシュとか無いので、いつも同じクロック数 – その後、ぴったりのクロック後に、ユーザ・プロセスの再開を行う 1サイクル FUSEレジスタに セット ユーザ空間の スタックから、 情報をレジスタに 復帰 Return from Interrupt ユーザ空間に切り替わる Motorola MC6829 advanced informationより http://matthieu.benoit.free.fr/cross/data_sheets/mc6829.pdf
  13. 13. 8bit時代 OS/9 6809 (1982年ごろ) ● OS/9 6809 Level 1 – MMU無し版, 64KB で動作 – マルチタスクOS ● プログラム・ローダを手抜きしていたので、PIC(位置独立コード)しか許されな かった – すべての変数は、indexレジスタ相対 – 6809は、ポインタ・レジスタが4本もあった(8bit機としては、すごく多い) – プログラム中の定数は、PC(プログラム・カウンタ)相対で参照 ● 実行バイナリを、外部記憶から読むことを嫌がり メモリをスキャンして、 ヘッダを見つけたら、終わりまでのCRCを計算し、 CRCが合致したら、そのバイナリが正常であるとして、実行を開始した (^^; – ROMも、スキャン対象。ROM組込みのコマンド・バイナリも発見された ● OS/9 68000 は、フツーになってしまい、特に面白くはない(残念)
  14. 14. 8bit時代 OS/9 6809 (1980年ごろ) ● OS/9 6809 Level2 – MMUあり版 – 2MBまでの物理メモリをサポート – Gimix というハードウェアが、OS/9 6809 Level2のリファレンス・ ハードウェア ● 割と手抜き ● 当時は、高速SRAMで、アドレス変換機構を作っても、十分、高速に動作した – 日立のBASIC Master S-1が、また、 独自のマッパ ● このマッパは、まっとう ● モトローラ純正MMU 6829 – Gimixとは、まったく異なる
  15. 15. PDP/11のMMU(1) ● PDP/11 のMMUは、マッパ – アドレス変換 – 不在ページ/書き込み禁止の検出はできる ● だが、フォールトからの回復&再開はできない – 例えば、write命令は、フォールトを起こしても、終了してしまう ● 64KBの論理空間を、8つのセグメントに分割 ● 各セグメントの論理アドレスは、物理メモリ・アドレスにマップ ● 各セグメント長は、0〜8KBytesまで可変 (64Bytes単位で) ● セグメントは、ベース・アドレスから、Up/Down方向に伸ばせる – Downは、スタックの伸長に ● PDP-11/40, PDP-11/45 などは、248 KB物理メモリ(12 bit長)に変換 ● PDP-11/70, PDP-11/44, PDP-11/23などは、4MB物理メモリ(16 bit 長)に変換 – 64Byte(6bit長)が単位 http://gunkies.org/wiki/PDP-11_Memory_Management
  16. 16. PDP/11のMMU(2) ● UNIX Ver.7は、マッパを使用 – デマンド・ページングとかやらない ● RSX/11M (PDP/11 のネイティブOS) – オーバレイによるプログラム・コードの入れ替え ● プログラムを、複数のセグメントで構成 ● リンク時に、セグメントを指定 ● サブルーチン・コール時に、適切なセグメントを入れ替え – 不適切なセグメントの依存関係は、リンクがエラーになる
  17. 17. 8bit時代 (1983年) ● CP/M 3 – シングル・ユーザ、シングル・タスク – メモリマッパなどがあれば使えた – HD64180 (日立のニセZ80、後のZ180) のメモリマッパが、 CP/M 3用
  18. 18. 18 64180・メモリ管理模式図 ● 論理空間が、3領域に分割 & アドレス変換 – 低位メモリ – コモン・エリア(最上位=OS常駐部) – バンク・エリア(中央部) ● CP/M Plusに最適 バンク・ エリア コモン・エリア 論理アドレス 物理メモリ 低位メモリ OS常駐部 バンク#1 バンクの 低位リミット レジスタ コモン・エリアの 低位リミット レジスタ コモン・ベース・ レジスタ バンク・ベース・ レジスタ 低位メモリ バンク#2
  19. 19. 19 64180・メモリ管理機構 ● コンパレータ(比較器),adder(加算器)がある。 ● 日立が好きな感じ(私の主観的 感想) Hitachi HD6180 Family より http://www.farnell.com/datasheets/99468.pdf
  20. 20. 16bit時代 Z8001用 MMU (1982年ごろ) ● Z8010:Z8001用MMU ● マッパであった – セグメント単位のアドレス変換 – セグメントは、物理的に連続した領域 – セグメントのサイズ・チェックは行う ● アクセス管理はあった ● ユーザ/システム ● Z8001は、フォールトからの回復はできなかった – Z8003で可能に MMU CPU メイン・ メモリ アドレス/コマンド 実アドレス 最上位アドレス (セグメント番号) 7bit アドレス・データ・バス下位8bit アドレス・データ・バス上位8bit 上位アド レス 16bit
  21. 21. SUN2(1983年),SUN3(1985年) ● 68010, 68020 に、外付け – 高速SRAMで、変換テーブル – コンテキストは、4つ (SUN3/160?) – SUN2もコンテキストは複数 ● MMUへのコマンドはアドレスに載せた – マッパ中のテーブルへのアドレス設定コマンドなど – 変なアドレスからの読み込みが、テーブルへのセット・コマンドだったり 高速 SRAM CPU メイン・ メモリ アドレス 読み出しデータ 上位アドレス 12bit 下位アドレス 12bit (4KB/ページ) 複数コンテキストの、変換テーブルがある場合 データ・バス 書き込みデータ 上位アドレス 本数、多め。 だが、実メモリ 16MBのモデ ルは希少 コンテキスト・ レジスタ ?繋がっていないと思われ… 2bit程度〜
  22. 22. SONY News (1987年) ● 68020 に、外付け – 高速SRAMで、変換テーブル – Newsの最初のデスクトップ・モデルの コンテキストは、1つ (だったはず OS用コンテキストがあったかも) – プロセス・スイッチのたびに、MMUテーブル入れ替えが発生 ● SUN3の同じクロック周波数のモデルと比べて、もっさり動作した
  23. 23. 68030(1987年) ● オンチップMMU内蔵 ● TLB方式 – CPUコア内のマイクロコードによる、ハード・ウォーク – 初代Sparc(1987), PowerPC601(1992)は、ハード・ウォーク ● PPC603は、ソフト・ウォーク 〜現在に至る… ● X86, ARMは、伝統のハード・ウォーク ● 他のアーキテクチャは、ソフトウェアによるページ・テーブル・ ウォークが多い

×