LinuxカーネルイメージをRAMにロードした後に何が起こりますか?

LinuxカーネルイメージをRAMにロードした後に何が起こりますか?

起動プロセス後にLinuxカーネルイメージがRAMにロードされた後に発生するアクティビティの流れを知りたいです。

ベストアンサー1

Linux 2.6以降:

コア

RAMにロードされた後、カーネルは次の機能を実行します。

setup():

  1. 物理メモリのレイアウトを説明するために、RAMにテーブルを作成します。
  2. キーボードの繰り返し遅延と速度を設定します。
  3. ビデオアダプタカードを初期化します。
  4. ハードディスクパラメータを使用してディスクコントローラを初期化します。
  5. IBM マイクロチャネル・バスを確認してください。
  6. PS / 2ポインティングデバイス(バスマウス)を確認してください。
  7. 高度な電源管理(APM)サポートを確認してください。
  8. サポートされている場合は、使用可能なハードディスクを説明するテーブルをRAMに書き込みます。
  9. カーネルイメージがRAMの下の位置にロードされたら、より高い位置に移動します。
  10. A20ピンを設定します(古代8088マイクロプロセッサの互換性を修正)。
  11. 一時割り込み記述子テーブル(IDT)と一時グローバル記述子テーブル(GDT)を設定します。
  12. 浮動小数点単位(FPU)をリセットします。
  13. プログラム可能な割り込みコントローラ(PIC)を再プログラムしてください。
  14. リアルモードから保護モードに切り替えます。

startup_32():

  1. 分割レジスタと一時スタックを初期化します。
  2. eflagsレジスタのすべてのビットをクリアします。
  3. 初期化されていないデータ領域をゼロで埋めます。
  4. decompress_kernel()カーネルイメージを解凍するために呼び出されます。

startup_32()(同じ名前、異なる機能):

  1. 最終分割レジスタを初期化します。
  2. bssセグメントをゼロで埋めます。
  3. 一時カーネルページテーブルを初期化します。
  4. ページングを有効にします。
  5. プロセス0のカーネルモードスタックを設定します。
  6. eflagsレジスタのすべてのビットを再びクリアします。
  7. IDTを空の割り込みハンドラで埋めます。
  8. システムパラメータを使用して最初のページフレームを初期化します。
  9. プロセッサモデルを決定します。
  10. GDTとIDTのアドレスを使用してレジスタを初期化します。

start_kernel():ほとんどすべてのカーネルコンポーネントはこの関数によって初期化されています。これはほんのわずかです。

  • スケジューラ
  • メモリ領域
  • 友達システムアロケータ
  • イオン交換技術
  • ソフトIRQ
  • 日時
  • スラブディスペンサー
  • プロセス1の作成(/sbin/init

完全な「リスト」は以下で確認できます。Linux/init/main.c

内部に

Init は、システムを必要な状態にするために必要なすべてのユーザー・プロセスを開始します。このルーチンは、呼び出される実行レベルと割り当てに大きく依存します。

runlevelコンソールに何かを入力すると、システムの現在のランレベルが表示されます。

ビュー/etc/rcX.d/(または/etc/rc.d/rcX.d/)でXをランレベルに置き換えます。
実行優先順位に従ってソートされたシンボリックリンク。S01....つまり、スクリプトは起動プロセスの初期に開始され、S99....起動プロセスの最後に実行されます。シンボリックKXX....リンクは同じことを行いますが、終了シーケンスに対するものです。

通常、これらのスクリプトは、ディスク、ネットワーク、ロギング、デバイス制御、特殊ドライバ、環境、およびその他のいくつかの必須シーケンスを処理します。

おすすめ記事