web-dev-qa-db-ja.com

ブートローダーは実行を続けますか?

この質問では、Windows(BOOTMGR)とLinux(GRUB)の両方のブートローダー、およびBIOSモードとEFIモードを検討しています。ブートローダーがカーネルを呼び出した後、ブートローダーは何らかの方法で実行を続けますか、それとも実行中のOSに置き換えられて死にますか?

3
xendi

ほとんどの場合、そうではありません。カーネルがロードされた後、ブートローダーはフルコントロールをカーネルに転送し、ブートローダーのコードは非アクティブになり、そのメモリはカーネルによって再利用できます。このメカニズムは、チェーンロードとして知られています。

ただし、カーネルがロードされた後でもメモリを予約するブートユーティリティがいくつかあります。このようなツールの一例は [〜#〜] memdisk [〜#〜] で、オペレーティングシステムで使用可能な仮想ディスクドライブとしてメモリ内のディスクイメージを表示できます。 MEMDISKは、その機能を実行するために、ディスクイメージ自体だけでなく、ディスクI/Oを実行するファームウェア呼び出しをインターセプトするコード用にもメモリを予約する必要があります。他のほとんどのそのようなツールはこの性質のものです。たとえば、この機能をネイティブに提供しないBIOSのUSBディスクからの起動を可能にするツールがあります。これは、ディスクI/O呼び出しをインターセプトすることによって同様に機能します。ただし、この場合でも、このようなツールのコードは、オペレーティングシステムが具体的に呼び出した場合(正確には、ツールによってエミュレートされたファームウェアサービス)にのみ実行され、単独でアクティブ化することはできません。

原則として、オペレーティングシステムカーネルがロードされた後、ブートローダーコードがよりアクティブな役割を果たすことを妨げるものは何もありません。そのようなソフトウェアをカーネルの不可欠な部分ではなく「ブートローダー」と呼ぶこと。

1
user3840170

ブートローダーは何らかの方法で実行を続けますか

いいえ、ブートプログラムは、システムの完全な制御を、ロードしたプログラム/カーネルに移します。
CPUがマルチコアの場合、CPUはシングルコアのみを有効にし、ブートプロセスはシングルスレッドです。
したがって、ブートプログラムは、ロードしたプログラム/カーネルにジャンプすると実行を停止します。
ブートコード、スタック、およびデータはすべて、いつでも上書きされる可能性があるため、ブートプログラムの再開を保証することはできません。

2
sawdust