web-dev-qa-db-ja.com

誰がBIOSをロードするかRAMコンピュータ中にbootstrap

コンピュータが起動すると、BIOSのコードが最初に実行されます。しかし、BIOSのコードはどのようにRAMにロードされて実行されますか?

私はこの質問を参照しました--- BIOSはBIOSチップから読み取られるか、起動時にRAMにコピーされますか? ですか?)==。 ROMからロードされ、ROMは別のチップですが、RAM?また、BIOSコードはどこにロードされますか?それはリアルモードアドレススペースの最後の1 MiBにありますか、それとも他の場所にありますか?

誰かがコンピュータの起動から、使用されているメモリアドレスを含む最初のBIOS命令の実行までの手順をリストできれば、非常に役立ちます

8
Cygnus

私が書いたように その質問への私の答えで この主題に関して受け取った民衆の知恵-残念ながらそこにある他の答え(そしてここではSuperUser)によって例証されているように-現在の状況を説明する豊富な技術資料が利用可能です。

そもそも「ROMからロードされたBIOS」について質問することはなかったので、私の答えを読んでいれば、これほど混乱することはなかったでしょう。

「BIOSチップ」はROMではありません。プロセッサの起動とファームウェアの最初の命令の間にマシンコードはありません。 「RAM」と「ROM」の両方の「M」は「メモリ」を意味します。

以前に書いたように、最近のPCでは、マシンのファームウェアは不揮発性RAMに保持されています。以前のようにROMではありません。LPCバスに接続されたNVRAMチップの詳細については、前の回答を参照してください(例:これを入力すると、私の横に分解されて座っているマシンで、ファームウェアを保持しているNVRAMはPm49FL004T、LPCフラッシュRAMチップ)です。

32ビットCPUはリアルモードで起動せず、1MiBラインより下のアドレスで起動しません。これは、16ビットx86プロセッサの時代から数十年の古いゴミです。それらは口語的に非現実モードとして知られているものから始まります、そして再び私の以前の答えで私は実際に何が起こったのかについての詳細を与えました80386の登場以来。最初の命令は、実際には32ビットアドレス空間の最上部にあるアドレスからロードされます。FFFFFFF0

以前の回答で、マシンのファームウェアが主に32ビットおよび64ビットのx86マシンの物理アドレス空間にマップされている場所について詳しく説明しました。注意:両方のRAMとROMはmemoryです。物理アドレスはmemoryアドレス、システムバス上。RAMまたはROMのいずれかをアドレス指定できます。(他のアドレスも指定できます) 、しかしそれはこの議論を複雑にしているだけです。)物理アドレスFFFFFFF0は512KiB範囲の上位16バイトの下にあり、不揮発性RAMのファームウェアの上位512KiBはシステムに常にマッピングされています。 「チップセット」によるバス。

いくつかの神話上のROMプロセッサの初期化またはリセット時に実行されるチップからの「ロード」はありません。ファームウェアを保持するチップは不揮発性RAM。電源を入れ直しても、「フラッシュ」されたときに書き込まれた内容を保持します。CPUは、システムバスとLPCバス(場合によっては、物理メモリアドレスを使用して、チップセットを介してシステムバスに接続されたLPC/FWHブリッジ)。

参考文献

7
JdeBP