最新の64ビットIntelチップPCはどのモードでブートセクターを実行しますか?


12

286などの古いマシンでは、ブートドライブの最初のセクターからメモリの0000:7C00にロードされた最初の512バイトが16ビットリアルモードで実行されていましたが、最新の64ビットアーキテクチャはどうですか?

編集:これについて考えると、これは間違った質問だと思います。ブートローダーの作成者は、使用するモードアセンブリ命令の決定者です。ハードウェアは、言われたとおりに動作します。それから私の質問は、Windows 7、Mac OS X(最新)、64ビットマシン上のGRUBなどの主要なOSブートローダーはどのモードを使用するのでしょうか?

回答:


12

現在のすべてのx86互換コンピューター(これにはIntelとAMDのx64アーキテクチャが含まれますが、Itaniumは含まれません)は、20年以上前の元のIBM PCとまったく同じように、x86リアルモードでブートセクターコードを実行します。これはカーネルモードではなく、メモリ保護、マルチタスク、またはコード特権レベルのない元のセグメントモードです。

フロッピードライブを手に入れ、MS-DOS(またはFreeDOS)を入れて、今日のコンピューターに固定すると、ブートが開始されます。

保護モードに切り替えたり、メモリ保護を設定したりするのはブートコードのタスクです。そのため、推測は部分的に正しいです。ブートローダーは、x86リアルモードとして実行を開始し、保護モードに切り替えて、実際に「カーネル」(リング0)モードでOSカーネルのロードと実行を開始します。

詳細については、Windows NTの起動プロセスに関するウィキペディアの記事をご覧ください。このテーマに関する詳細がかなり記載されています。


haimg、そのリンクと説明に感謝します。@Deshe、ベストアンサーを奪ってすみません。
mring

今はこれを編集する時です。そうでなければ、あなたは自分の答えに同意しません:-)
ダニエルベック

13

最新の64ビットアーキテクチャはどうですか?

これは、最新の64ビットアーキテクチャを備えた最新の64ビットマシン上のファームウェアに依存します。 haimgの答えは、x86の世界では5〜6年前の場合でしたが、今日のx86の世界では時代遅れです。

古いPC / ATファームウェア

これらの最新の64ビットマシンの一部には、古いPC / ATスタイルのファームウェアがあります。他の回答で述べたように、PC / ATとほぼ同じ方法で、ディスクのセクター#0からブートストラッププログラムをロードして実行します。 これは、古いPC / ATブートストラッププロセスです。

新しいEFIファームウェア

他の最新の64ビットマシンには、新しいEFIファームウェアがあります。これらは、ディスクのセクタ#0からのブートストラッププログラムをロードしていないすべてのEFIブートローダーアプリケーションを読み込んで実行するEFIブートマネージャーによってブートストラップします。このようなプログラムは保護モードで実行されます。 これはEFIブートストラッププロセスです。

一般的なEFIファームウェアは、プロセッサリセットを終了するいくつかの指示内で保護モードに切り替わります。保護モードへの切り替えは、EFIファームウェアの初期化のいわゆる「SECフェーズ」の早い段階で行われます。技術的には、32ビット以上のx86プロセッサは、リアルモードではなく、口語ではアンリアルモードとして知られているもので起動します。(CSレジスタの初期セグメント記述子は、従来のリアルモードマッピングを記述せず、これを「非現実」にします。)

このように、それらのEFIシステムがリアルモード入ることはないと言うことができ、適切な EFIブートローダ(すなわち、それらは使用しないときにネイティブにブートストラップするとき、すべてのを、互換性サポートモジュールを)彼らは保護モードへの直接非現実モードから切り替えているので、それ以降は保護モードのままになります。


ブートストラッププロセスへのリンクが壊れているか、無効になっているようです。代替品が見つかりません。
slm

これはあなたのもの?- jdebp.eu/FGA/pcat-boot-process.html
SLM

1
そして今、私はあなたの名前がURLを見て知っています8-)。スパイを試みないことは気づかずにはいられませんでした。
slm

あなたはntlworldから物事を移したと思います、それは正しいですか?
slm

第一の可能な交換用URL - jdebp.eu/FGA/pcat-boot-process.html。あなたのA'erをコピーして貼り付けてください。これでもウィキペディアは、このA'erが引用されています- en.wikipedia.org/wiki/Talk%3AReal_mode
slm

1

私の知る限り、ブートコードは常にカーネルモードで実行されます。

1つは、ファームウェアによって実行される最初の命令であるという理由だけで、ブートセクターから実行されたときに使用するモードを決定することは不可能です。コードが実行を開始する前に、使用可能な命令を設定する方法はありません。したがって、設計上、ブートセクタのコードに使用できるアセンブリセットは、アーキテクチャによって事前に決定されています。

そのために特権のないモードを選択した場合、より高い特権のモードからの命令を使用することは不可能になり、ブートコードが利用可能な最も特権のあるモードで実行されるという事実をかなり強制します。


1

IntelマニュアルVolume 3 System Programming Guide 325384-053US 2015年1月:

2.2動作モード

プロセッサは、電源投入またはリセット後に実アドレスモードになります。

キックのために、マニュアルからの素敵な図:

ここに画像の説明を入力してください

GRUBは、保護モードでマルチブートOSを起動します。マルチブート仕様0.6.96マシン状態

「CR0」ビット0(PE)を設定する必要があります。

GRUBとx86_64についてはわかりません。


GRUBは、マルチブート仕様に準拠した OSを保護モードで起動します。* BSDも含まれますが、私が知る限り、Linuxはこの仕様に従っておらず、独自のことを行っています。マルチブート仕様に準拠したOSを起動する場合、GRUB構成ではmultibootキーワードが使用されます。Linux用、そこに専用されているlinuxlinux16GRUBのUEFIのバージョン、に、そしてlinuxefiLinux固有のブートプロトコルを使用するようにGRUBを言って、キーワード。
telcoM

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.