バンク切り換え
出典: フリー百科事典『ウィキペディア(Wikipedia)』
バンク切り換え(Bank Switching、ページングと呼ばれることもあるが、通常のその用語とはほとんど関係ない)は、1次元配列であるアドレス空間を多次元配列にする事により、アクセス可能なアドレス空間を拡張するものである。8ビットのマイクロコンピュータシステムで一般に使われた技術であり、アドレスバスを拡張せずにアクセス可能なRAMやROMの量を増やすことを目的としていた。
目次 |
[編集] 概要
かつてよく使われたタイプは、アドレス空間を2次元配列にする物である。たとえばアドレスバスが16ビットしか無く、まったく工夫されていない場合アドレス空間は65536ワードしか使えない。そこでたとえばアドレス0xc000番地から0xffff番地をバンク切り換えして二つの要素を持つようにすると、49152+16384×2=81920ワードを扱える様になる。この手法は、古くは磁気コアメモリとROMバンクを切り換えて、アドレス線を節約する方法に用いられた。8ビットパソコンでは最大メインメモリに匹敵するVRAMのアドレス空間をCPUにアクセスさせる為に使われた。メインメモリを64Kバイト搭載した8ビットパソコンにおいてCP/M、OS-9等を動作させる際に邪魔になるBASIC ROMをRAMに切り換える機能があった。
仮想記憶の普及によって単純なバンク切り換え機構は廃れた。仮想記憶においては、論理アドレス空間をページまたはセグメントと呼ばれる小さな単位に分割し、それぞれをアドレス変換機構において物理アドレスに結び付けている。現在の実装では、アドレス空間は[プロセス][ページまたはセグメント][論理アドレスオフセット]によって構成される3次元疎配列となる(仮想マシンモニタを使っている場合には4次元疎配列)。原理的にはバンク切り換えの発展系であるが、仮想記憶をバンク切り換えと呼ぶ事は無い。
また、RAMディスクはファイルシステム用であるが、同様にバンク切り換えメモリを用いるものもあった。
[編集] 実施例
[編集] 8ビットマイクロプロセッサ
Z80 や 6502 といった 8ビットマイクロプロセッサでは、メモリアドレスは 16ビットで表されるため、最大でも64Kバイトのメモリ空間しかアクセスできない。そのため、64Kバイト以上のメモリを搭載する 8ビットシステムでは、メモリは64Kバイト毎のバンク(あるいはページ)に分割して使用した。つまり、同時にアクセスできるメモリ空間は依然として64Kバイトであるが、バンクを切り換えることでそれ以上のメモリを使用可能としたのである。これによって搭載メモリ量は増加したが、プログラムが複雑化し、性能的にも若干低下する場合があった。
バンク切り換えは、もっとアドレス空間の広いプロセッサを使うよりも効率的ではない手法であるが、1980年代のコンピュータシリーズの延命措置としては簡単な手法であった。例えば Apple //e, //c や Apple /// は Apple II+ 用のソフトウェアを実行することができ、コモドール128 はコモドール64のソフトウェアを実行することができた(コモドール64自身も64KBのRAMとROMをバンク切り換えしていた)。この場合、互換性を保つために最初の64Kバイトは何もしなくてもアクセス可能にしていたのである。また、日本ではゲーム指向のコンピュータが最初からバンク切り換えで大容量メモリを搭載する傾向があった。MSXや、PC-8800シリーズの後期モデルがこれにあたる。
日立製作所 Z80上位互換CPUHD64180はバンク切り換えベースのMMUをCPUに内蔵し、アクセス可能なアドレス空間をZ80の64キロバイトから1MBに拡張した。
ファミリーコンピュータには本来バンク切り替え機能はなく、ROMカートリッジ側にコントローラを搭載することでバンク切り替えが行われた。ファミリーコンピュータはもともと扱える容量が少なく、ディスクシステムの登場によってROMカートリッジは終了となるはずであった。ところがバンク切り替えによって大容量ROMカートリッジを扱う手法が確立されると、読み込み速度の遅いディスクシステムの方が次第に廃れ、最終的にはディスクよりもカートリッジの方が大容量となっていた。
[編集] PC-9801におけるバンクメモリ
NECのPC-9801(とその後継)においては、16ビットマイクロプロセッサであるIntel 8086(とその上位互換CPU)が採用されたが、アドレス空間が1メガバイトしかなかったので、アプリケーション等のメモリ要求量の増大にともない、後述のEMSの国内での普及に先行して、バンク切り換え用メモリとしてのバンクメモリが開発された。各周辺機器メーカーからそれぞれ独自規格のバンク切り換え用メモリが発売され、対応アプリケーションやゲーム等も一部でそれぞれ発売された。その後、アイ・オー・データ機器が提唱した「I/Oバンク方式」によるバンク切り替えメモリ管理BMS(Bank Memory Specification) が制定され、複数のアプリケーション間の競合を避けるメモリ管理も行われた。バンクメモリだけでなくハードウェアEMS/プロテクトメモリにも兼用できる製品もあった。
しかし、BMSやそのドライバの制定・普及がEMSに遅れをとり、EMSの普及・デファクト化や、プロテクトメモリ/XMSの普及等により、互換性もないため、時代の流れで次第に廃れていった。なお、アプリケーションの互換性確保のために、80386以降のCPUで使用可能な、仮想バンクメモリドライバ、仮想BMSドライバと言うものも開発された。技術的には仮想86EMSと同様である。
[編集] EMS
Intel 8086アーキテクチャではアドレス空間が1メガバイトしかなかったので、EMSと呼ばれるメモリ管理方式が考案された。1988年、ロータス社、インテル社、マイクロソフト社は、MS-DOSを搭載したPC/AT互換機で使用するEMSの仕様について合意した。これはメモリ空間の一部を拡張し、より多くのメモリ資源にアクセスさせる為のメカニズムである。これは広く普及し、プロセッサの世代が交代しIntel 80286以降のようにMMUが搭載されるようになってからも使われ続けた(贅沢にもMMUは単なるバンク切り換えコントローラとして使われた!)。EMSの仕様は互換性を保つために後のMicrosoft Windowsでもエミュレートされてサポートされていた。
[編集] その他
プロセッサを複数搭載する事でメインメモリにアクセスできるCPUとVRAMにアクセスできるCPUにと、担当を分割させるアーキテクチャもあった。これは負荷分散も同時に実現できるが、一つの筐体にコンピューターシステムを2つ分搭載させる故にコストは高くついた。
読み出しバンクと書き込みバンクを別途指定できるようにする事で、入力と出力を同じアドレスで行い、出力データの保持とアドレス計算を省く方式が考え出された(リード・モディファイ・ライト Read Modify Write)。これもまた画像処理に応用された。
モトローラ MC68000シリーズではブート時、アドレス0番地から2ロングワードにスタックポインタ初期値・ブートストラップへのアドレスをCPUに提示しなければならず、なおかつ稼動時にはさらに割り込みベクタをRAMにして書き換え可能にする必要があった事から、起動時のバンク切り換えは必須であった。
バンク切り換えはゲーム機でも使われた。任天堂のファミリーコンピュータは6502の派生プロセッサを使用していたが、そのゲームカートリッジは時にはメガバイト単位のROMを内蔵していた。また、ゲームボーイのカートリッジにはMBC(Memory Bank Controller)と呼ばれるチップが内蔵されており、メモリのバンク切り換えだけでなく、赤外線通信機構やモーターへのアクセスを可能にしていた。
カテゴリ: 書きかけの節のある項目 | 記憶装置 | OSのメモリ管理