LoginSignup
0
1

LinuxPCの電源を入れ、Apacheが起動するまでの流れ

Posted at

Xで以下のような投稿を見つけ、技術面接だと思い取り組んでみました。

すると「Linux起動の流れ」について正確な知識が身についていないことがわかりました。なので、X上に自分用メモツリーを作り調べました。すると思った以上にが多くの方に閲覧されていたためQiitaでも記事にすることにしました。

この記事でわかること

  • Linux起動の流れ  
    電源投入時のCPUの処理
    BIOSの役割
    MBRとブートローダー
    カーネルと初期RAMディスク
    systemdとプロセスの起動

Linux起動の流れ全体図

電源投入時のCPUの処理

特に明記がなければ、メモリ=RAM、ROM=ROMで読んでいただければと思います。
また、レガシーBIOSを説明に用います。UEFIを想定していません。

パソコンの電源を投入するとBIOSがまず読みだされることを知っている人は多いはずです。CPUはBIOSを読みだしメモリに展開したいと思うはずです。CPUはプログラムをメモリに展開して実行するからです。しかしメモリの内容は電源を切れば消えているはずですよね。電源をつけたばかりのCPUはどのようにしてBIOSをメモリに展開するのでしょうか。

答えを言うとBIOSはマザーボードのROMにあります。電源投入直後のCPUの命令をROMに向けるようにしておきます。そうすることで、CPUは他のプログラムの力を借りずにBIOSを読みだすことができます。

BIOSの役割

初めにBIOSはPOST(Power On Self Test)と呼ばれる最低限のハードウェアチェックを行い、メモリやグラフィックボードに異常があれピープ音で知らせます。

ハードウェアチェックが正常に終了した場合、外部記憶装置(HDDやSSD)の先頭512バイトをメモリに読みだします。それが決められた2バイトのパターンで終わっていたら、残りの510バイトを起動用プログラムと認識して実行を開始します。

この先頭の512バイトのことをMBRといいます。

MBRとブートローダー

MBR内のGRUB(ブートローダー)が起動し、Linuxカーネルをメモリ上に読み出します。
GRUBはLinuxで一般的に使用されるブートローダーで、Linuxカーネルをストレージから読み出します。

カーネルと初期RAMディスク

Linuxカーネルはメモリに常駐し、ハードウェアの管理やプロセススケジューリングなどを行う役割があります。

Linuxカーネルは初期RAMディスクという一時的なルートディレクトリのマウント後、本来のルートディレクトリのマウントを行います。HDDやSSDへのアクセスにドライバが必要な場合があります。そのために一時的なルートディレクトリにあるドライバを読み出し、最終的にルートディレクトリになるHDDやSSDをマウントするというわけです。

systemdとプロセスの起動

Linuxカーネルは最初のプロセスとしてsytemdを起動します。systemdはその後default.targetを実行し、様々な準備(ディストリビューションによって異なると思われます)を行います。

bash等が立ち上がり、ユーザからのコマンドを受け付ける状態になったさい、systemctl start httpdでApacheを起動させることができます。

自動起動設定(chkconfig)がされていたら起動に伴い自動起動しているはずです。

参考文献

ただしこの記事の内容の誤りがあったとすればこの記事の著者によるものです。

ソフトウェアデザイン2022年6月号
https://amzn.to/3vh8Txm

試して理解Linuxのしくみ
https://amzn.to/41ypHMw

LinuCレベル2
https://amzn.to/47eRClM

作って理解するOS x86系コンピュータを動かす理論と実装
https://amzn.to/3NFCC9Q

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1