ジャパンネット バンク バンク切り換え
切り換えとは?
バンク切り換え(Bank Switching、ページングと呼ばれることもあるが、通常のその用語とはほとんど関係ない)は、1次元配列であるアドレス空間を多次元配列にする事により、アクセス可能なアドレス空間を拡張するものである。8ビットのマイクロコンピュータシステムで一般に使われた技術であり、アドレスバスを拡張せずにアクセス可能なRAMやROMの量を増やすことを目的としていた。
仮想記憶の普及によって単純なバンク切り換え機構は廃れた。仮想記憶においては、論理アドレス空間をページまたはセグメントと呼ばれる小さな単位に分割し、それぞれをアドレス変換機構において物理アドレスに結び付けている。現在の実装では、アドレス空間は[プロセス][ページまたはセグメント][論理アドレスオフセット]によって構成される3次元疎配列となる(仮想マシンモニタを使っている場合には4次元疎配列)。原理的にはバンク切り換えの発展系であるが、仮想記憶をバンク切り換えと呼ぶ事は無い。
バンク切り換えを拡張スロットに応用し、拡張スロット毎にメモリページが異なるように設計し、全てのI/OをメモリマップドI/Oとすると、メモリやI/Oのアドレスが衝突するというトラブルを完全に防ぐことが出来る。 また、拡張スロットにROMを配置する場合に、CPUから見える論理アドレスを固定することが可能なため、メモリリロケーション機構を省く事が出来ることも長所として挙げられる。 このような拡張スロットの実装例としてMSXが挙げられる。
バンク切り換えでは、CPUのアドレスの他にページ切り換え用のレジスタが必要である。このレジスタは、少なくとも論理的(ソフトウェア的)にはCPUの外にあるのが一般的である(HD64180のようにCPUチップの中にこのページ切り換え用のレジスタを持っているチップも存在したが、プログラミング上は、CPU内部のレジスタとして扱われていなかった)。
このことはアドレスをCPU内部のレジスタとページ切り換え用のレジスタの2箇所で別々に管理することを意味する。 それはCPU内部のレジスタからページレジスタへの桁上がり等のハードウェアが実装されていないことになるため、配列等がページサイズより大きい場合等場合はソフトウェアでページを管理する必要が生じた。
これはソフトウェアの処理が必要な分、1次元アドレス管理より速度が低下し、またソフトウェアを必要とするということは、そのソフトウェアにバグが潜む可能性が生じるということであり、システムの信頼性の低下が起こった。
このようなバグの例として、一塊のデータがページ境界に配置される場合が挙げられる、これは大きさが2nバイトでは無い構造体の配列が、全体としてページサイズを超えた場合等に起こる。
バンク切り換え用のレジスタの仕様(接続されているI/Oアドレス等)は、たとえCPUが同一であっても、一般論として機種毎に異なっていたために、同一CPUでありながら非互換となる原因の一つとなった。
Z80 や 6502 といった 8ビットマイクロプロセッサでは、メモリアドレスは 16ビットで表されるため、最大でも64Kバイトのメモリ空間しかアクセスできない。そのため、64Kバイト以上のメモリを搭載する 8ビットシステムでは、メモリは64Kバイト毎のバンク(あるいはページ)に分割して使用した。つまり、同時にアクセスできるメモリ空間は依然として64Kバイトであるが、バンクを切り換えることでそれ以上のメモリを使用可能としたのである。これによって搭載メモリ量は増加したが、プログラムが複雑化し、性能的にも若干低下する場合があった。たいていの場合、アドレス空間の広いプロセッサを導入するほうが高い効率を期待できる。
ファミリーコンピュータには本来バンク切り替え機能はなく、ROMカートリッジ側にコントローラを搭載することでバンク切り替えが行われた。ファミリーコンピュータはもともと扱える容量が少なく、ディスクシステムの登場によってROMカートリッジは終了となるはずであった。ところがバンク切り替えによって大容量ROMカートリッジを扱う手法が確立されると、読み込み速度の遅いディスクシステムの方が次第に廃れ、最終的にはディスクよりもカートリッジの方が大容量となっていた。