386以降のCPUが持っているモード。
オベンキョ!
いろいろ細かいことがあるが、ようするに、32ビット化(プロテクトモード)したマシンで、あるセグメントを「お前は8086と同じ動作をしろ!」と命令することができるモード。
CPUは起動時には16ビット状態(リアルモード)である。この状態だとMS-DOS等が動かせる。また、BIOS等、リアルモードでないと動作しないものも動く。
しかし一旦プロテクトモードになるとこうはいかない。処々細かい意見はあるだろうが、CPUがいきなり変わってしまったのと同じくらい変化してしまうので、MS-DOS、またそれ上で動くようプログラムされたソフトは動かなくなってしまう。 (PS2でゲームをやっていた。あるスイッチを押すと、中身がポン!とX-BOXに変わってしまうようなもの。当然中に入っていて今まで動いていたバイオハザードは動かなくなってしまうよね?)
BIOSも同じである。
どうしても16ビット用のソフトを動かしたい、BIOSを呼び出したいと言う場合。普通に考えれば、32ビットモードから再び16ビットモードに戻ればいいということになる。 しかしこれそのものは可能だが、BIOSなりMS-DOSのソフトなりを実行し終えたあと、再び32ビットモードに戻したとしても、元には戻らない。つまり、電源スイッチを押したのよりちょっとだけ早いと、そんな程度である。
そこで386CPUは32ビットになった時、あるセグメントにあるスイッチを入れておくと、そこだけが16ビットとして動く。そんな仕組みを搭載している。これが仮想86モード。
ちょうど、WindowsVISTAのある窓でMSXのシュミレータが動いている。そんな感じを想像してもらうとわかりやすいかも。
セグメントの簡単な復習
- 386以降CPU(以下x86と呼称)はCPUそのものにマルチタスクを行うための機能が搭載されている。
- しかし、マルチタスクは別に並行して同時に動作をできるわけではないのだ。別々の処理を高速に切り替えて行えるというだけである。
- たとえばメモリが0x0000〜0xFFFFまで搭載されていたとする。
- そんなマシンで萌え絵を描きながら(PhotoShop)、鉄人タイガーセブンの歌を聞きながら(Winamp)、愛と勇気とかしわもち(パズルゲーム)をやりたいとする。
- 0x0000〜0x0FFFまではOSが使用する。そうなると、ソフトが使うことができるメモリは0x1000〜0xFFFFとなる。
- ならば、0x1000〜0x1FFFをPhotoShopが。0x2000〜0x2FFFをWinampが。0x3000〜0x3FFFをカシワモチが使う。そしてOSは、これを高速に切り替えてくれる。これなら3つのソフトはまるで同時に動いているように扱える。ばんざーーい!
・・・・・ orz ・・・・ 問題発生 ・・・・・・