Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Linuxのブートプロセス
Search
Satoru Takeuchi
PRO
March 02, 2025
Technology
5
39
Linuxのブートプロセス
以下動画のテキストです
https://youtu.be/aqiENZbyC8Q
Satoru Takeuchi
PRO
March 02, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
シェルのジョブ
sat
PRO
1
20
常駐サービスを実現するデーモンプロセス
sat
PRO
0
24
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
80
シェルのセッション
sat
PRO
2
31
RubyでKubernetesプログラミング
sat
PRO
4
180
プロセスの生成 exec編
sat
PRO
1
40
プロセスの生成 fork&exec編
sat
PRO
0
36
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
35
プロセスの生成 fork編
sat
PRO
0
38
Other Decks in Technology
See All in Technology
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
2
1.5k
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
2
260
ABWG2024採択者が語るエンジニアとしての自分自身の見つけ方〜発信して、つながって、世界を広げていく〜
maimyyym
1
110
分解して理解する Aspire
nenonaninu
2
1k
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
260
プロダクトエンジニア構想を立ち上げ、プロダクト志向な組織への成長を続けている話 / grow into a product-oriented organization
hiro_torii
1
350
IAMポリシーのAllow/Denyについて、改めて理解する
smt7174
2
200
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
190
OCI Success Journey OCIの何が評価されてる?疑問に答える事例セミナー(2025年2月実施)
oracle4engineer
PRO
2
120
ディスプレイ広告(Yahoo!広告・LINE広告)におけるバックエンド開発
lycorptech_jp
PRO
0
300
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
160
Apache Iceberg Case Study in LY Corporation
lycorptech_jp
PRO
0
300
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Bash Introduction
62gerente
611
210k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
BBQ
matthewcrist
87
9.5k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Fireside Chat
paigeccino
34
3.2k
The Cult of Friendly URLs
andyhume
78
6.2k
Transcript
Linuxのブートプロセス Mar. 2nd, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はなすこと • マシンの電源を入れてからLinuxのinitプロセスが起動するまでの流れ ◦ initプロセスは最近のLinuxディストリビューションの場合は大体 systemd • 前提 ◦ アーキテクチャはx86_64
◦ ファームウェアはUEFI BIOS ◦ ブートローダはGRUB ◦ 1台のディスクを搭載した物理マシン上に GRUBとLinuxをインストールしている • 以下は省略。別動画で説明するかも ◦ Secure Boot ◦ initramfs 2
大まかな流れ 1. 人間がマシンの電源を入れる 2. マシン上のUEFI BIOSが起動 3. UEFI BIOSがハードウェアを初期化 4.
UEFI BIOSがGRUBをロードして実行 5. GRUBがvmlinuzファイルをロード 6. GRUBがカーネル展開コードを実行 7. 展開コードがカーネルをロードして実行 8. カーネルがシステムを初期化してinitプロセスを実行 3
マシン上のUEFI BIOSが起動 • マシンは電源を入れると特定アドレス(0xFFFFFFF0)上に存在するUEFI BIOSプロ グラムを動かすようになっている • UEFI BIOSはマシンの不揮発性メモリ上に存在しており、システム起動時に物理ア ドレス空間の上述のアドレスにマップされている
◦ 📝 つまり物理アドレスが物理メモリ以外のデータを指すことがある ◦ 📝 UEFI BIOS以外にも物理アドレス空間にマップされるデータは他にもあるが、本動画では以下 のようなイメージを持っていればいい 4 物理アドレス空間 0 0xFFFFFFF0 不揮発性メモリ上の UEFI BIOS 物理メモリ 物理メモリ
UEFI BIOSがハードウェアを初期化 • CPUの動作確認、初期化 ◦ ブート直後は機能制限されていて、 UEFI BIOSが制限を外すというイメージ • メモリの動作確認、初期化
◦ これをする前は物理メモリにアクセスできない! • ディスクなどのその他ハードウェアを初期化 • どこの領域にどんなデータがマップされているかを記録 ◦ 📝 後でカーネルが使う 5
UEFI BIOSがGRUBをロードして実行 1. GPT形式のパーティションテーブルでフォーマットされたディスクを探す 2. BSP(Boot Strap Partition)というGUIDを持つパーティションを見つける a. 📝
このパーティションは FAT32ファイルシステムでフォーマットされている 3. BSPから「UEFIアプリケーション」と呼ばれる実行ファイルを見つける a. 📝 UEFIアプリケーションを実行するのは LinuxではなくUEFI BIOS 4. UEFI BIOSはUEFIアプリケーションとして存在しているGRUBを実行 a. 通常はGRUBがデフォルトで動作するように設定されている 6 UEFI BIOS 物理アドレス空間 disk (1) GRUBを読み出し GRUB (2) GRUBをロード&実行
GRUBがvmlinuzファイルをロード(前提知識) • BSPはLinux動作時に通常(“/boot/efi/”)にマウントされている ◦ GRUB EFIアプリケーションのファイル名は通常 ”/boot/efi/EFI/BOOT/BOOTX86.EFI” • vmlinuzファイルは通常ブートパーティション(“/boot/”)に存在する ◦
名前は”vmlinuz-<カーネバージョン>” ◦ 📝 GRUBはLinuxの一部のファイルシステム (e.g. ext4, XFS)を読み出せる ▪ “/boot”はGRUBが読み出せるファイルシステムでなければならない • カーネル圧縮イメージのフォーマット(bzImage形式と呼ばれる): 7 setup header カーネル展開コード カーネル圧縮イメージ カーネル展開コードやカーネルの ロード先メモリアドレス、エントリポイ ントを保持
GRUBがvmlinuzファイルをロード 1. 設定に基づき、システムに存在するカーネルの一覧を取得し、ユーザにどのカーネ ルをどんなブートパラメタで起動するかを選択させる a. この動画で重要なのはルートファイルシステムを指定する ”root”パラメタ 2. vmlinuzファイルをメモリ上にロード 8
物理アドレス空間 カーネル展開 コード カーネル圧縮 イメージ disk GRUB (1) vmlinuzファイルを読み出し (2) ロード * スペースの都合でsetup headerは省略
GRUBがカーネルの展開コードを実行 • カーネル展開コードのエントリポイントにジャンプして実行開始 9 物理アドレス空間 カーネル展開 コード カーネル圧縮 イメージ disk
GRUB ジャンプ
展開コードがカーネルをメモリマップして実行 1. カーネル展開コードがカーネル圧縮イメージを展開してメモリ上にマップ 2. カーネルのエントリポイントにジャンプ 10 物理アドレス空間 カーネル展開 コード カーネル圧縮
イメージ disk カーネル (1) 読み出し (2) 展開&コピー&エントリポイントにジャンプ
カーネルがシステムを初期化してinitプロセスを実行 1. ハードウェアやカーネルそのものの初期設定 a. 📝 UEFI BIOSはマシンの起動に必要な最低限の初期化しかしないが、カーネルによるハードウェ アの初期設定はシステムが稼働し続けるために必要な設定をするという違いがある 2. “root”ブートパラメタで指定した場所にあるrootファイルシステムをディスクから読み
出してmount 3. ルートファイルシステム上のinitプログラムをメモリマップして実行 11 物理アドレス空間 disk カーネル (1) rootファイルシステムを読 み出してmount (2) initプログラムをメモリマップ &実行 init
おわりに • マシンの電源を入れた後は様々なコンポーネントが取り決めに基づいて段階的に システムが起動していく • ものすごく長大だが、これでもかなり省略している。本物はもっと複雑 • 理解するのは大変だし知っていてもそれほど得はしないが、かっこいい 12