システム起動の全体的なプロセス:
システム起動の最初のステップは、電源を入れることです。つまり、電源を押すと、コンピュータハードウェアがBIOSをアクティブに読み取ってハードウェアデバイス情報とハードウェアデバイスのセルフテストをロードし、システムが最初の起動をアクティブに読み取ります。プログラムのデバイスであるブートプログラムは、起動に使用するカーネルを指定し、実行するメモリにロードすることができます。同時に、カーネルは他のハードウェアデバイスと対応するドライバーをロードして、ホストコンポーネント、およびすべてのハードウェアデバイスの実行を開始します。ロードが完了すると、システムが実際に起動し、システムがいくつかの外部プログラムを操作して、ソフトウェアの実行環境を準備します。次に、システム操作に必要ないくつかのソフトウェアプログラムをロードします。最後のステップは、ユーザーがログインするのを待つことです。
最初のステップを開始します-パワーオンセルフテスト
コンピューターの電源を入れると、コンピューターは最初にBIOS情報をロードします。BIOS情報は非常に重要であるため、コンピューターは最初にそれを見つける必要があります。これは、BIOSにCPU関連の情報、デバイスの起動シーケンス情報、ハードディスク情報、メモリ情報、クロック情報などが含まれているためです。この後、コンピューターは頭の中にスペクトルを持ち、どのハードウェアデバイスを読み取るかを認識します。 BIOSがシステムの制御をハードディスクの最初のセクターに移した後、Linuxはシステムの制御を開始します。
2番目のステップを開始します-起動シーケンスを選択し、MBRをロードします
BIOSは、どのデバイスが最初のブートアイテムであるかを判別します(デフォルトはハードディスクです)。ハードディスクのMBRの最初の446バイトはブートローダーと呼ばれます。ブートローダーの主な機能は、オペレーティングシステムにロードされたコアファイルを識別し、それをメモリに送信して実行することです。次に、オペレーティングシステムを起動します。オペレーティングシステムをインストールすると、MBRの最初の446バイトにブートローダーがインストールされ、対応するパーティションのブートセクターにブートローダーのコピーもインストールされます。ブートローダーのもう1つの主な機能は、メニューを提供し、そのブート管理機能を他のローダーに転送することです。
MBRがハードディスクによって開始されると、BIOSは通常、最初のハードディスクの最初のセクター、つまりMBRにシフトします。 2番目のブートローダーGRUBをロードすることだけが実行され、その役割は実際には、ユーザーが特定のオペレーティングシステムをロードできるようにするためのより高度な機能を導入することです。
BIOSセルフチェック後、MBRがメモリにロードされます。これは、ブートプログラムがアクティブ化され、パーティションテーブル情報がメモリにロードされたことを意味します。また、システムの制御がBIOSからGRUBに移行されたことを意味します。GRUBはGRand UnifiedBootloaderの略語です。マルチオペレーティングシステムのブートマネージャーです。さまざまなシステムを起動するために使用されます。 GRUBはシステムブートプログラムであり、次の3つの段階に分かれています。
stage1ステージは、最も基本的なブート機能を完了し、パーティションがどのファイルシステムであるかを決定します。
ステージ1.5は、このファイルシステムをロードすることです。さまざまなファイルシステムに応じて、ステージは多くのステージ1.5に分割されます。つまり、ステージ1.5の目的はファイルドライバーをロードすることです。
ステージ2では、ブートディレクトリに対応するパーティションにアクセスできるため、ブート時にgrub.confというファイルにアクセスできます。
grub.confファイルの詳細な説明
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6(2.6.32-696.el6.x86_64)root(hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=d98fccb0-b74e-4de3-9953-27b74542267a rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
~
grub.confファイルには、ハードウェア割り込みを介してアクセスします。現時点では、grub.confファイルにマウント動作はありません。対応するファイルにアクセスできるのは、ハードウェア割り込みを介して、上記(hd0、 0)ファイルパスを介さずにアクセスする
.**vim /boot/grub/grub.conf **** root(hd0,0)**このステップでは、ファイルのルートを指定します。このルートは、オペレーティングシステムの将来のルートではありません(オペレーティングシステムの完全なルートはsda2です)。 )は一時的なルートですが、以下では、カーネルとinitrdがこのルートの下にあるため、この(hd0,0)はカーネルとイメージファイルを格納するため、ハードウェア割り込みの代わりにパスを使用できます。
**kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root = UUID = 234f756b-b613-425b-af46-269c7cafd100 rhgb **(グラフィカルインターフェイスの進行状況バー。これがないと、文字インターフェイスが起動します)静かな (これがないと、カーネルによってロードされるモジュールと情報が一緒にロードされ、それとともに、これらはシールドされます)
**initrd /initramfs-2.6.32-696.el6.x86_64.img **(より多くのドライバー、グラフィックカード、サウンドカードなどをロードする必要があるため、仮想ディスクイメージファイル)
ブートカーネル
stage2が実行のためにメモリにロードされると、最初にgrub構成ファイル/boot/grub/grub.confを解析し、次にカーネルイメージをメモリにロードして、制御をカーネルに転送します。カーネルは、システム内の各デバイスをすぐに初期化し、CPU、I / O、ストレージデバイスなどの関連する構成作業を実行します。
Linuxデバイスドライバーのロードに関しては、ドライバーの一部がカーネルイメージに直接コンパイルされ、ドライバーの残りの部分がモジュールの形式でinitrd(ramdisk)に配置されます。
Linuxカーネルは、さまざまな異なるハードウェアアーキテクチャに適応する必要がありますが、すべてのハードウェアドライバーをカーネルに組み込むことは現実的ではなく、新しいハードウェア構造が作成されるたびに、カーネルがハードウェアのデバイスドライバーをカーネルに書き込むことは不可能です。実際、Linuxカーネルイメージには基本的なハードウェアドライバーのみが含まれています。システムのインストール中に、システムハードウェア情報が検出され、インストール情報とシステムハードウェア情報に従ってデバイスドライバーの一部がinitrdに書き込まれます。このように、後でシステムを起動すると、デバイスドライバの一部がinitrdにロードされます。ここでは、initrdについて詳しく紹介する必要があります。
initrdの英語の意味は、ブートローダーによって初期化されたRAMディスクです。これは、ブートローダーによって初期化されたメモリディスクです。カーネルが起動する前に、ブートローダーはストレージメディア内のinitrdファイルをメモリにロードします。カーネルが起動すると、実際のルートファイルシステムにアクセスする前に、メモリ内のinitrdファイルシステムにアクセスします。ブートローダーがinitrdで構成されている場合、カーネルの起動は2つの段階に分けられます。最初の段階はinitrdファイルシステムでinitを実行し、ドライバーモジュールのロードなどのタスクを完了し、2番目の段階は実際のルートファイルシステムを実行します。 / Sbin / initプロセス。
別の概念:initramfs
initramfsは、カーネル2.5で導入されたテクノロジです。実際、その意味は、cpioパッケージをカーネルイメージにアタッチすることです。このcpioパッケージには、小さなファイルシステムが含まれています。カーネルが起動すると、カーネルはcpioパッケージを解きます。 、それに含まれるファイルシステムをrootfsに解放すると、カーネルの初期化コードの一部がこのファイルシステムに配置され、ユーザーレベルのプロセスとして実行されます。これによってもたらされる明らかな利点は、カーネルの初期化コードが単純化され、カーネルの初期化プロセスがより簡単にカスタマイズできることです。
上記の分析と検証を通じて、次の結論に達しました。
grubのstage2は、initrdをメモリにロードし、コンテンツをコンテンツに解放します。次に、カーネルはinitrdでinitスクリプトを実行します。このとき、カーネルは制御をinitファイルに移します。 initスクリプトの内容を簡単に参照したところ、主にさまざまなストレージメディアに関連するデバイスドライバーも読み込まれることがわかりました。必要なドライバがロードされると、ルートデバイスが作成され、ルートファイルシステムrootfsが読み取り専用でマウントされます。この手順が終了したら、未使用のメモリを解放し、実際のルートファイルシステムに切り替え、/ sbin / initプログラムを同時に実行して、システムのNo.1プロセスを実行します。その後、システムの制御は/ sbin / initプロセスに渡されます。
**4番目のステップを開始します-ユーザースペース/ sbin / init **で最初の実行可能プログラムを開始します
1)、 システム初期化スクリプト(/etc/rc.d/rc.sysinit)を実行し、システムの基本構成を実行し、ルートファイルシステムおよびその他のファイルシステムを読み取り/書き込みモードでマウントします。システムは基本的に稼働しています。動作レベルの決定と対応するサービスの開始
/etc/rc.d/rc.sysinitを実行すると、システムはスムーズに動作しますが、ホストが関連するネットワークおよびホスト機能を提供できるように、システムに必要なさまざまなサービスを開始して実行する必要があります。以下のスクリプト。
2)、 /etc/rc.d/rcスクリプトを実行します。このファイルは、サービスの起動順序が最初にK、次にSであり、各実行レベルの特定のサービスステータスが/etc/rc.d/rc*.d(* = 0〜6)ディレクトリに配置されることを定義します。ファイルはすべて、/ etc /init.dの下の対応するファイルを指すシンボリックリンクです。 rc.sysinitは、/ etc / inittabファイルを分析してシステムの起動レベルを判別し、/ etc / rc.d / rc * .dの下のファイルを実行します。
/etc/init.d-> /etc/rc.d/init.d
/etc/rc ->/etc/rc.d/rc
/etc/rc*.d ->/etc/rc.d/rc*.d
/etc/rc.local-> /etc/rc.d/rc.local
/etc/rc.sysinit-> /etc/rc.d/rc.sysinit
つまり、/ etcディレクトリ内のinit.d、rc、rc * .d、rc.local、およびrc.sysinitはすべて、/ etc /rc.dディレクトリ内の対応するファイルとフォルダを指すシンボリックリンクです。簡単に説明する例として、スタートアップレベル3を取り上げましょう。
/etc/rc.d/rc3.dディレクトリ、このディレクトリの内容はすべてSまたはKで始まるリンクされたファイルであり、これらはすべて「/etc/rc.d/init.d」ディレクトリ内のさまざまなシェルにリンクされています。脚本。 Sは起動時に開始する必要のあるサービスコンテンツを表し、Kはシャットダウン時に閉じる必要のあるサービスコンテンツを表します。 /etc/rc.d/rc*.d内のシステムサービスは、システムのバックグラウンドで開始されます。特定の実行レベルでサービスをより具体的にカスタマイズする場合は、chkconfigコマンドを使用して操作するか、セットアップ、ntsys、システムを使用します。 -config-カスタマイズするサービス。スタートアップコンテンツを自分で増やす必要がある場合は、関連するシェルスクリプトをinit.dディレクトリに追加してから、rc * .dディレクトリにシェルスクリプトを指すリンクファイルを作成できます。これらのシェルスクリプトの開始シーケンスまたは終了シーケンスは、文字SまたはKの後の番号によって決定されます。番号が小さいほど、スクリプトが最初に実行されます。たとえば、/ etc / rc.d / rc3.d / S01sysstatは、/ etc / rc.d / rc3.d / S99localの前に実行されます。
3)、 ユーザー定義のブートプログラム/etc/rc.d/rc.localを実行します。実際、/ etc / rc.d / rc3.d / S99localを実行すると、/ etc / rc.d /rc.localが実行されます。 S99localは、rc.localへのシンボリックリンクです。一般的に、カスタムプログラムは、上記のようにシェルを確立してリンクファイルを追加するという面倒な手順を実行する必要はなく、コマンドをrc.localに配置するだけです。このシェルスクリプトは、ユーザーが起動をカスタマイズするために予約されています。内容。
4)、 システムのすべての起動タスクが完了すると、linuxはターミナルまたはX-Windowを起動して、ユーザーがログインするのを待ちます。 tty1、tty2、tty3 ...これは、レベル1、2、3、および4の実行時に「/ sbin / mingetty」が実行され、そのうちの6つが実行されることを意味します。したがって、linuxには6つのプレーンテキスト端末があり、mingettyはターミナルコマンドを開始します。
この時点で、システムが起動しました。
Recommended Posts