web-dev-qa-db-ja.com

2つのOSを同時にデュアルブートすることはできますか?

2つのOSを同時にデュアルブートすることはできますか?

たとえば:現在、Ubuntu 11.04とWindows 7をデュアルブートしています。Ubuntuは単一の500 GB HDDで実行されており、Windows 7は1TB RAID 1ミラーで実行されています。 2つのOSを切り替えるには、再起動が必要です。再起動せずに2つのOSを切り替えることはできますか?

[〜#〜] note [〜#〜]:VirtualBoxとVMWare Playerの機能を完全に認識しています-両方を使用しています。 「仮想化を使用してください!」と答えないでください。

編集:これが不可能な場合は、それが不可能な理由を教えてください。私にとっては、それほど難しいことではないようです。私のビジョンは知識に邪魔されないことを覚えておいてください!

36
James Hill

すべてではないにしても、ほとんどの主流のオペレーティングシステムは、ホストコンピューターの低レベルの機能(ハードウェア、ポートなど)への独占的なアクセスを期待しており、他のものと共有する概念はありません-機能しません-そのため、同じシステムで2つのOSを同時に実行するには、オペレーティングシステムを互いに保護する何らかの形式の透過的なアービトレータ、つまり仮想化アプリケーションが必要です。

36
Linker3000

Hyper-VとXen(いわゆる「ベアメタル」ハイパーバイザー)は、あなたが求めているように見えるものに最も近いにもかかわらず、それらを却下しているようです。はい、それは仮想化ですが、VirtualBoxが機能する方法とは異なります。

VirtualBoxが独自のオペレーティングシステムだったとしたら、小さなVirtualBox OSをインストールして、VirtualBox OSの上で仮想マシンとしてWindowsとUbuntuを並べて実行できます。まあ、それは本質的にHyper-VまたはXenが行うことです。これは、ハードウェアとゲストオペレーティングシステム間の薄い仮想化レイヤーであり、既存のハードウェアと既存のオペレーティングシステムと並行して直接実行できる範囲にあります。

あなたはしないでくださいこれらのいずれかに個別のサーバーが必要です。ハイパーバイザーをマシンの最初のオペレーティングシステムであるかのようにインストールし、WindowsとUbuntuを仮想マシンとして追加します。ハイパーバイザー。

XenとHyper-VはどちらもゲストオペレーティングシステムとしてUbuntuとWindowsを実行しますが、サポートされている構成ではない場合があります。 XenはよりLinuxyであり、Hyper-VはMS製品であるため、使いやすいOSに基づいてハイパーバイザーを選択することをお勧めします。

15
Kevin

あなたができる最も近いことは...休止状態を利用することです。残念ながら、オペレーティングシステムは相互に十分に離れているため、仮想化を実装しない限り、両方のOSを同時に実行することはできません。正直なところ、仮想化はあなたが考えるほど悪くはありません...特に「VT」拡張をサポートする仮想化プラットフォームを使用している場合はなおさらです。ゲストOSは、ハードウェアと直接通信する機能があり、メモリマッピングなどがはるかに優れています。 SSDに直接インストールされたゲストOSを実際にセットアップしました...ホストOSよりも高速に実行されました。

8
TheCompWiz

答えが「いいえ」である単純で短い理由は次のとおりです。ハードウェアを制御するソフトウェアは何ですか。

OS 1がそれを実行している場合、OS 2は実行されていません。OS2が実行している場合は、OS 1を実行していません。両方が実行している場合、他のソフトウェアが物理ハードウェアへの共有アクセスを仲介する必要があります。 、そしてそれが仮想化です(除外しました)。

7
David Schwartz

頭に浮かぶのは:
-メモリ管理(RAMおよびキャッシュ)
-プロセス管理(実行中のプロセススレッド)

したがって、おそらく2つのOS間でメモリ使用量とプロセスを調整する中間者が必要になるでしょう。

それは別のOS /ファームウェアです。
誰かがそれを実装した場合、OSはそれを実装しますが、2つではなく3つが同時に実行される可能性があります。

編集-
linker3000が書いたものを追加する:ポートの管理

この「中間者」は、基本的にホストOSおよび仮想化された他のOSになり、ソリューションがすでに知っていたものに戻ります

2
Shekhar

私が知っているすべてのOSは、コンピューターハードウェアの完全な制御を要求します。

理論的には可能です。どちらのOSも、次のように設計する必要があります。

  • マスター(ハードウェア全体の制御)とスレーブ(マスターOSにリソースを要求)の両方として実行
  • 別のOSからの要求に応じてハードウェアの制御を放棄する

これらの条件が両方とも満たされれば、仮想化を行わなくても2つのOSを同時に実行できます。 cooperative multitasking を使用する2つのOSに似ています。もちろん、協調的なマルチタスク処理は、不十分に書かれたアプリケーションが制御権を放棄することを拒否する問題のために、ほとんど見捨てられてきました。おそらく、2つの適切に記述されたOSが、Niceを再生します。次に、インセンティブは何でしょうか?

2
Kenneth Cochran

「なぜ」の部分を取り上げましょう。

最新のOSの理由の1つは、システム上で複数のプログラム(プロセス)を同時に実行できるようにすることです。これを安全に行うには、次のことが必要です。

  • おそらく(特別なニーズがない限り)システム内でRAM=固定方式で分割する必要はありません。たとえば、プロセスごとに256MB固定-2GBシステムでは8プロセスに制限されます。各プロセスがメモリを「要求」して、完了時にそれを返すことができるようにしたいとします。

  • また、I/Oデバイスを一定の方法でデバイス間で分割したくない場合もあります。通常は、メモリなどの一部またはすべてのハードウェアを共有リソースにするか、少なくとも特定の時間に特定のプロセスに対してのみ一時的にのみ使用します。これには、すべてのプロセスが独自にI/Oを実行するのではなく、I/Oをスケジュールおよび調整するために何かを「通過」する必要があります。ほとんどのI/OはCPUに比べて非常に遅いため、スケジューリングは重要です。シングルコアシステムでも、I/Oを待機している間、CPUに他のプロセスを機能させることができます。

上記を正しく行うには、いくつかのCPUハードウェア機能を利用する必要があります。これらの1つはMMUで、もう1つは保護モードです。 2つのOSがこれらのハードウェア機能を共同で共有して、2つ以上のOSを実行できますか?

もちろん、ハードウェアには、あるOSが他のOSのメモリ全体を踏み止めることを阻止できるものはありません。 CPUがカーネルモードの場合(oneカーネルモードのみ)、どのコードでも何でも実行できます。 1つのOSのコードが他のOSのコードまたはデータで実行される可能性は100%です。また、オペレーティングシステムには過去に脆弱性があり、将来はさらに脆弱になることがわかっています。したがって、セキュリティにとって非常に悪いです。

さて、この上に別の「レイヤー」を配置して、複数のOSのハードウェアサポートが必要だとしたら、すばらしいと思いませんか。これがまさにハードウェア仮想化機能が行うことであり、実行中の複数のOSの間にハードウェアの障壁を置き、ハイパーバイザーと呼ばれるトップレベルの「インターフェース」があります。ハイパーバイザーは1つだけ持つことができます。そして、はい、どちらかのOSで実行されているプロセスは、I/Oを行うために3つのレイヤーを通過する必要があります(プロセス-ローカルカーネル-ハイパーバイザー)

1
LawrenceC

仮想化以外に方法はありません。どのゲストシステムがさまざまなハイパーバイザーで機能するかについての明確な情報を取得するのは難しいと思います。 http://en.wikipedia.org/wiki/Hypervisor 情報を得るための良いスタートであり、Xenは試してみる価値があるかもしれませんが、誰かがそれを明確に確認または拒否するのを待つでしょうWindows 7ゲストをサポートします。

0
Nornagest

仮想化はないと言っていましたが、MS Hyper Vサーバーのようなものがあなたのニーズに合うかもしれません

0
Akash