雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。

386以降のCPUが持っているモード。

オベンキョ! anchor.png Edit

いろいろ細かいことがあるが、ようするに、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のシュミレータが動いている。そんな感じを想像してもらうとわかりやすいかも。

Page Top

具体的に!!! anchor.png Edit

Page Top

セグメントの簡単な復習 anchor.png Edit

  • 386以降CPU(以下x86と呼称)はCPUそのものにマルチタスクを行うための機能が搭載されている。
  • しかし、マルチタスクは別に並行して同時に動作をできるわけではないのだ。別々の処理を高速に切り替えて行えるというだけである。
  • たとえばメモリが0x0000〜0xFFFFまで搭載されていたとする。
  • そんなマシンで萌え絵を描きながら(PhotoShopEdit)、鉄人タイガーセブンの歌を聞きながら(Winamp)、愛と勇気とかしわもち(パズルゲーム)をやりたいとする。
  • 0x0000〜0x0FFFまではOSが使用する。そうなると、ソフトが使うことができるメモリは0x1000〜0xFFFFとなる。
  • ならば、0x1000〜0x1FFFをPhotoShopEditが。0x2000〜0x2FFFをWinampが。0x3000〜0x3FFFをカシワモチが使う。そしてOSは、これを高速に切り替えてくれる。これなら3つのソフトはまるで同時に動いているように扱える。ばんざーーい!

・・・・・ orz ・・・・ 問題発生 ・・・・・・

Page Top

問題点! anchor.png Edit

  • 使う番地が固定じゃ困る!
    • 上記の方法だと、カシワモチはかならず0x3000に読み込まれないといけない。だって、プログラムする時困るじゃない!
    • 「カシワモチは0x3000」と決められちゃうと、カシワモチをやらない人のマシンは困る! どんなに新型のマシンを買ってきてメモリを増やしても、0x3000〜0x3FFFはポカーンと空いたまま、だれにも使われない。
  • 侵略された!
    • 0x1000〜0x1FFFを使っているPhotoShopEdit。大きな画像を扱っているので、つい、0x2100まで使っちゃった! さあ大変。いままで動いていたWinampが急におかしくなっちゃった!

・・・こんなふうに、ちょっと考えただけでも大問題発生。そこでこういったことをなんとかしようとしてOSが進化して行った。同時にそんなOSの動きを補助しようとCPUにもそういった命令が搭載されていった。


Last-modified: 2024-01-06 (Sat) 22:39:13 (JST) (309d) by