Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> LinuxシステムFAQ >> Linux-0.11スタートアッププロセス分析

Linux-0.11スタートアッププロセス分析

  
        

PCの電源を入れると、80x86アーキテクチャのCPUは自動的にリアルモードに入ります(アドレス指定は8086と同じ16ビットセグメントとオフセットを使用し、最大アドレス空間は1MB、最大セグメントは64KBです。32ビットを使用できます)。命令32ビットx86 CPUが高速8086として使用され、コードはアドレス0xF000:0xFFF0から自動的に実行されます(このアドレスは通常BIOS ROM内のアドレスです)このコードはfar jump命令です:jmp far 0xF000:0xE05B 。このとき、BIOSはシステムの検出と設定(POST電源投入時自己診断、割り込みルーチン、セットアップユーティリティなど)の実行を開始し、物理アドレス0の割り込みベクトルの初期化を開始します。その後、最初にデバイスを起動します。セクタ(ディスクブートセクタ、512バイト)は31KBのメモリ絶対アドレス0x0000:0x7C00に読み込まれ、実行を開始するためにこの場所にジャンプします読み込み中のファイルは8086アセンブリ(boot /bootsect)で書き込まれます。 .s)。

bootsect.sはデバイスをメモリ0x90000の絶対アドレス(576KB)に移動し、デバイスをメモリ0x90200で起動した後に2KBバイトコード(boot /setup.s)を読み取ります。カーネルの他の部分(systenモジュール)はメモリアドレス0x10000(64KB)に読み込まれます。

setup.sプログラムはシステムモジュールを物理メモリの開始位置に移動します。 BIOSでシステムデータを取得し、システムメモリの適切な場所にデータを配置してから、割り込みディスクリプタテーブルレジスタ(idtr)とグローバルディスクリプタテーブルレジスタ(gdtr)をロードし、A20アドレスラインを開き、2つの割り込み制御をリセットします。チップ8259Aは、ハードウェアになりますブレーク番号は0x20〜0x2fにリセットされ、最後にCPUの制御レジスタCR0(マシンステータスワード)がセットされ、32ビットプロテクトモードに入り、システムモジュール前面のhead.sプログラムにジャンプして実行を継続します。

head.sプログラムの完了、メモリページディレクトリとページテーブルの設定を正式に完了し、実際に使用されていたカーネルをリセットし、割り込み記述テーブルidtとグローバルディスクリプタテーブルgdtをフロッピーディスクドライバ用にオープン1 KBバイトバッファ。

Copyright © Windowsの知識 All Rights Reserved