資料集
ここは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まで搭載されていたとする。
  • そんなマシンで萌え絵を描きながら(PhotoShop)、鉄人タイガーセブンの歌を聞きながら(Winamp)、愛と勇気とかしわもち(パズルゲーム)をやりたいとする。
  • 0x0000〜0x0FFFまではOSが使用する。そうなると、ソフトが使うことができるメモリは0x1000〜0xFFFFとなる。
  • ならば、0x1000〜0x1FFFをPhotoShopが。0x2000〜0x2FFFをWinampが。0x3000〜0x3FFFをカシワモチが使う。そしてOSは、これを高速に切り替えてくれる。これなら3つのソフトはまるで同時に動いているように扱える。ばんざーーい!

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

Page Top

問題点! anchor.png Edit

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

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


Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 3880, today: 1, yesterday: 2
Last-modified: 2012-10-22 (Mon) 21:58:10 (GMT) (2957d) by