1.Linuxカーネルの構成
関連する概念:
Linuxシステムのコンポーネント:カーネル+ルートファイルシステム
カーネル:プロセス管理、メモリ管理、ネットワークプロトコルスタック、ファイルシステム、ドライバー。
IPC(プロセス間通信):複数のプロセス間で通信し、情報を交換する方法を指します。 Linux IPCは、基本的にUnixプラットフォームから継承されます。主に、元のUnix IPC、System V IPC、およびソケットベースのIPCが含まれます。さらに、LinuxはPOSIXIPCもサポートしています。
実行中のシステム環境は、カーネルスペースとユーザースペースの2つのレイヤーに分けることができます。
カーネルスペース:カーネルコード(システム呼び出し)
ユーザースペース:アプリケーション(プロセスまたはスレッド)
カーネル設計のジャンル:
シングルカーネル設計:すべての機能を同じプログラムに統合します;(Linux)
マイクロカーネルの設計:各機能は個別のサブシステムによって実装されます;(Windowsソーラー)
Linuxカーネルの機能:
(1)モジュール化のサポート:.KO(カーネルオブジェクト)
(2)モジュールが動いているときの動的なロードまたはアンロードをサポートします
成分:
コアファイル:/ boot / Vmliuz-VERSION-release
ramdirk:
CentOS5:/boot/initrd-VERSION-release.img
CentOS6,7:/boot/initramfs-VERSION-release.img
2、CentOSシステムの起動プロセス
全体的な起動シーケンス:
POST(およびセルフチェック)->ブートシーケンス(BIOS:基本入力出力システム)->ブートローダー(MBR:マスターブートレコード)->カーネル(ramdisk)-> rootfs(ルートファイルシステム)-> switchchroot-> / sbin / init /(/ etc / inittab / etc / init / *。conf)->実行レベルの設定->システム初期化スクリプト->対応するサービスを閉じて開始->端末を起動
一般的なフローチャート:
各プロセスの詳細な説明:
1、 POSTパワーオンセルフテスト
主にハードウェアデバイスが正常に動作するかどうかを検出することですが、セルフチェック機能の実現は主にマザーボードチップ(CMOS)に組み込まれたBIOS(基本入出力システム)プログラムによって行われ、検出がOKになるとハードウェアデバイスが初期化されます。
2、 ブートシーケンス:MBRをロードするブートシーケンスを選択します
ブートシーケンスは、特定のハードディスクハードウェア、正確には最初のハードディスクセクターのMBRに依存して、各ブートデバイスを順番に検索するプログラムです。
3、 MBRブート、ブートローダーブートローダー、スタートアッププログラム
MBR(マスターブートレコード):このレコードはトラック0および1セクターにあり、合計512バイト、最初の446バイトはブートローダー、最後の64バイトはパーティションテーブル情報、メインパーティションと拡張パーティションは4つを超えることはできず、最後は2バイトはチェック情報で55AAです。ユーザーが起動するシステムまたは別のカーネルバージョンを選択できるメニューを提供します。ユーザーが選択したカーネルをRAMの特定のスペースにロードし、解凍して展開してから、システム制御をカーネルに転送します。
4、 カーネルカーネルの実装
カーネル自体が初期化され、機能が実現され、ramdiskを使用して識別可能なプログラムが検出され、ルートファイルシステムが自己読み取りモードでマウントされ、アプリケーションが実行されます。/sbin / init
5、 / sbin / init /ユーザースペースサービスプロセスの管理
実行レベルを設定し、初期化スクリプトを実行し、対応するプログラムを閉じるか開始して、ターミナルを起動します。
デモ:
GRUB(GRand Unified Bootloader)は、MBRの最初の446バイトであるカーネルをロードします。これはBooTLoaderの一種であり、開始するカーネルを選択する機能があります。
GRUB関連の手順:
これは主に、device.map、menulst、stage1、stage2、および一連のstage1_5で構成されています。
device.map:カーネルファイルのルートパーティションを格納します
menu.lis:は、stage2に保存されている選択可能なメニューリストであるメニューリストです。
ステージ:grubブートプログラムが大きすぎるため、2つのセクションに分割されます。最初のセクションはMBRに保存され、2番目のセクションはカーネルファイルシステムに保存されます。最初のセクションがブートされた後、2番目のセクションが見つかります。ただし、2番目のセクションはカーネルファイルシステムに保存されます。現時点では、ファイルシステムはフォーマットされていません。2番目のセクションのmenu.lstにアクセスするには、stage1セクションを支援できる中間層stage1_5の助けが必要です。 stage2にアクセスします。 Stage1_5は通常、stage1フィールドの63セクター後に配置されます。 stage2は使用可能なファイルシステムをメモリに無期限に保存するため、複数のstage1_5が存在するのはこのためです。
グラブレガシー:3段階
ステージ1:MBRに保存
stage1_5:MBRの後のセクターに格納されるため、stage1のブートローダーはstage2が配置されているパーティション上のファイルシステムを認識できます。
stage2:ディスクパーティション(/ boot / grub /)
ブートローダーは、最初にMBRのgurbの最初のステージを読み取ります。MBRは非常に小さく512バイトしかないため、プログラムはgrubを使用して起動され、セクターのstage1.5ステージを読み取ります。ステージ1.5を読み取った後、次のようになります。 2番目のステージのstage2が配置されているディスクパーティションを駆動します。Stage2はディスクパーティションに格納され、このパーティションに格納されているカーネルファイルやramdiskなども含まれます。これが、ブートローダーのgrubを介してカーネルファイルをロードできる理由です。
注:現在のハードウェアプラットフォームの場合、マザーボードBIOSがハードディスクを認識できる必要があります。そうすると、BIOSはブートローダーをハードディスクにロードできます。ディスク自体のブートローダーがロードされると、現在のホスト上のハードディスクデバイスを認識できます。
ただし、ファイルシステムはソフトウェアによって編成されたファイル構造の追加レイヤーであるため、ハードディスクデバイスの認識は、ハードディスク上のファイルシステムを認識できることを意味しません。ファイルシステムとインターフェイスできるようにするには、ファイルシステムドライバーを使用する必要があります。アプリケーションプログラムは、そのようなファイルシステムを認識して理解できる必要があります。このプログラムはファイルシステムドライバーと呼ばれます。grubの1.5ステージは、対応する第2ステージとカーネルにアクセスできるように、gurbのファイルシステムドライバーを提供します。それが配置されているパーティション。通常は基本ディスクパーティションです。したがって、grubの第2ステージ、カーネルファイルおよびramdiskファイルは通常基本ディスクパーティションに配置されます。grubは論理ボリュームの高度なインターフェイスを駆動できないためです。
Stage2は通常/ boot / grub /ディレクトリにマウントされます。grubには独自の構成ファイル/boot/grub/grub.confもあり、通常はシンボリックリンクファイル/etc/grub.confがあります。
stage2の機能:
(1)メニューまたはインタラクティブインターフェイスを提供します。
(2)ユーザーが選択したカーネルまたはオペレーティングシステムをロードできます。
(3)メニューの保護メカニズムが渡されました。
/boot/grub/grub.conf構成ファイルの詳細な説明:
シングルユーザーモードに入る:
1 )grubメニューを編集し、編集するタイトルを選択してから、eコマンドを使用します
2 )選択したカーネルの後に1、s、またはsingleを追加します
3 )カーネルが配置されている行に、bキーを入力します
デモ:
起動時にeキーを押します。
カーネルを上下に選択し、eを押して編集し、1またはs、S、singleと入力し、もう一度bを押して再起動します
6、 ルートスイッチ
ルートファイルシステムをマウントする場合、カーネルのバグや操作プロセスのバグによるルートファイルシステムの損傷を防ぐために、最初にルートファイルシステムを読み取り専用でマウントし、ロードが完了した後にマウントの読み取りと書き込みを行い、ルートファイルのマウント全体を完了します。システムの後で、/ sbin / initプログラムに直接移動します。つまり、ユーザースペースで最初のプログラムの実行を開始します。
ユーザースペースの起動プロセス
7、 / sbin / initプログラム
initプログラムは、主に構成ファイル/ etc / inittabに依存します。これは、大まかに次のように分けられます。デフォルトの起動レベルの設定->システム初期化スクリプトの設定->対応するレベルのサービスの開始->各端末のログインインターフェイスの印刷(レベルが3処理は、テキストログインインターフェイスを提供します。レベルが5の場合、グラフィカルログインインターフェイスも提供します)
8、 デフォルトの実行レベルを設定
(1)操作レベル:システムの操作または保守のために設定されたメカニズム。
0- 6 :合計7つのレベル。
0 :シャットダウン、シャットダウン
1 :シングルユーザーモード(シングルユーザー)、ルートユーザー、認証不要、メンテナンスモード。
2 :マルチユーザーモード(マルチユーザー)、ネットワーク機能を開始しますが、NFS、メンテナンスモードは開始しません。
3 :マルチユーザーモード(マルチユーザー)、完全機能モード、テキストインターフェイス。
4 :予約レベル:現時点では特別な使用目的はありませんが、同じ3レベルの機能を使用するために使用されます。
5 :マルチユーザーモード(マルチユーザー)、完全機能モード、グラフィカルインターフェイス。
6 :再起動、再起動
アイコン:
構成ファイルの読み取り:/ etc / inittab
(2)構成ファイル:/ etc / inittabは多くの関数を定義し、各行はアクション(アクション)と対応するプロセス(CentOS 5のみ)を定義し、1行はinitによって実行されるタスクを定義します。一連のタスク、各行の構文形式は次のとおりです。
id:runlevels:action:process
idはタスクの識別子です。
runlevels:このタスクを開始する実行レベル。例:3、2345、すべてのレベルを示すために空にすることもできます。
アクション:どのような条件下でこのタスクを開始しますか。
待機:このタスクのレベルに切り替わるのを待っている間に1回実行します(切り替えたばかりの場合)。
respawn:タスクが終了すると、自動的に再起動します(例:ターミナルにログインしてログアウトを実行すると、ログアウトが再開されます)
initdefault:デフォルトの許容レベルを設定します。この時点では、プロセスは省略され、空です。
sysinit:システムの初期化方法を設定します。ここでは一般に/etc/rc.d/rc.sysinitスクリプトと呼ばれます(CentOS 5,6はこのスクリプトを使用し、CentOS 7はsystemdによって実行されます)。CentOS6のみこの構成ファイルで設定された実行レベルを開始する機能を保持します。
プロセス:特定のタスク。通常、カスタマイズに応じて、アプリケーション、スクリプト、またはバイナリプログラム。
デモ:
9、 システム初期化スクリプト
システム初期化スクリプト:/etc/rc.d/rc.sysinit
(1)ホスト名を設定します。
(2)ウェルカムメッセージを設定します。
(3)udevとselinuxをアクティブ化します。
(4)/ etc / fstabファイルで定義されているすべてのファイルシステムをマウントします。
(5)ルートファイルシステムを検出し、ルートファイルシステムを読み取り/書き込みモードで再マウントします(再マウントとは、ルートファイルが検出された後を指します)。
(6)システムクロックを設定します。
(7)/etc/sysctl.confファイルに従ってカーネルパラメータを設定します。
(8)ソフトレイド機器であるlvmをアクティブにします。
(9)スワップデバイスをアクティブにします。
(10)追加のデバイスドライバーをロードします;(カーネルロードドライバーはルートファイルシステムのみをロードします)
(11)クリーニング操作。
注:init構成ファイル/ etc / inittabには、/ etc / rc.d / rc.sysinitを定義する行があります。このスクリプトファイルは、システムの初期化を完了するためのスクリプトファイルです。
10、 対応するレベルでサービスをシャットダウン/開始します
スクリプトファイル/etc/rc.d/rcは、レベルが切り替えられたときにサービスを開始または停止するために使用されます。このスクリプトは、スクリプト内の$ runlevel変数に渡されたパラメーターを受け入れ、/ etc / rc $ runlevel.d / K *を読み取ります。 /etc/rc$runlevel.d/S *すべてのファイル、これらのファイルは、一部のサービスが起動後に自動的に開始され、一部のサービスが開始されない理由です。
K *:停止するサービス、K ## *、優先度。数値が小さいほど、シャットダウンの優先度が高くなります。依存サービスが最初にシャットダウンされ、次に依存サービスがシャットダウンされます。
S *:開始するサービス、S ## *、優先度。数値が小さいほど、開始する優先度が高くなります。依存サービスが最初に開始され、依存サービスが後で開始されます。
/etc/rc.d/init.dディレクトリには/etc/init.dディレクトリへのリンクディレクトリもあり、これら2つのディレクトリのファイルは同じです。
たとえば、アピール定義は、次の3つのレベルでSから始まるプロセスを開始します。
アイコン:
11、 ターミナル(グラフィックターミナル)を起動します
オペレーティングシステムの起動が完了しました
3.システム起動プロセスの概要
カーネルレベル:
POSTは起動時にハードウェア検出機能として使用されます
BootSequence(BIOS)は、メインブートパーティションのMBRでブートローダープログラムBootLoaderのロードを開始します
LInuxの現在のBootLoaderは、3段階のGRUBプログラムです(446バイトの制限を超えています)。
最初の段落はBootLoaderで書かれています
1.5項では、次のセクターがファイルシステムの起動に使用されます
2番目の段落は、内部インターフェイスを提供し、boot / grubでシステムカーネルカーネルを呼び出します
ここでは特に注意が必要です。複数のハードウェアインターフェイスドライバー呼び出しに適応するために、システムパブリッシャーは、システムが初めてインストールされたときにハードウェアインターフェイスを自動的に識別し、一意のドライバーを呼び出して、メモリをディスクとして仮想ルートとして使用してramdiskファイルを生成します。ドライバインターフェイスの後、実際のルートファイルシステムに切り替わります
CentOS 5シリーズはinitrdであり、ディスクイメージファイルによってセカンダリキャッシュバッファが発生します
CentOS 6/7シリーズはinitramfsに改善されました。これは、ファイルシステムの形式でキャッシュとバッファーを2回占有することはできません。
ユーザースペースレベル
/ sbin / initが引き継ぎ、構成ファイルで初期化します
/ sbin / initの構成に従って、デフォルトの実行レベルが設定され、一部のブートサービスは/etc/init.d/に設定されます。
/etc/rc.d/rc.sysinitシステム初期化スクリプトを実行して、システム初期化を完了します
対応するレベルで停止する必要があるサービスを閉じ、対応するレベルでオンにする必要があるサービスを開始します
ログイン端末を設定する
著者:小さな耳
記事のソース:http://purify.blog.51cto.com/10572011/1843124
Recommended Posts