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カーネル学習の敷居を下げたいという思いを実現した本、「Linuxのしくみ」
Search
Satoru Takeuchi
PRO
February 18, 2023
Technology
41
22k
Linuxカーネル学習の敷居を下げたいという思いを実現した本、「Linuxのしくみ」
以下イベントの発表資料です。
https://forkwell.connpass.com/event/273179/
Satoru Takeuchi
PRO
February 18, 2023
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
73
シェルのセッション
sat
PRO
2
28
RubyでKubernetesプログラミング
sat
PRO
4
180
プロセスの生成 exec編
sat
PRO
1
38
プロセスの生成 fork&exec編
sat
PRO
0
33
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
32
プロセスの生成 fork編
sat
PRO
0
36
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
56
ハイテク休憩
sat
PRO
2
210
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
140
クラウドサービス事業者におけるOSS
tagomoris
1
680
『衛星データ利用の方々にとって近いようで触れる機会のなさそうな小話 ~ 衛星搭載ソフトウェアと衛星運用ソフトウェア (実物) を動かしながらわいわいする編 ~』 @日本衛星データコミニティ勉強会
meltingrabbit
0
140
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
15
3.3k
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
960
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
地方拠点で エンジニアリングマネージャーってできるの? 〜地方という制約を楽しむオーナーシップとコミュニティ作り〜
1coin
1
230
現場で役立つAPIデザイン
nagix
33
12k
ビジネスモデリング道場 目的と背景
masuda220
PRO
9
520
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Scaling GitHub
holman
459
140k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Transcript
Linuxカーネル学習の敷居を下げたいという 思いを実現した本 「Linuxのしくみ」 Feb. 18rd, 2023 武内覚
[email protected]
twitter: satoru_takeuchi
1
自己紹介: 武内 覚 • 会社員として ◦ むかし: 富士通でLinuxカーネルの開発、サポートに従事 ◦ いま:
サイボウズで新インフラのストレージ開発に従事 • 個人として ◦ 2018年2月: 「Linuxのしくみ 第一版」執筆 ◦ 2022年10月: 「Linuxのしくみ」増補改訂版 執筆 ◦ その他いろいろ情報発信 ▪ 雑誌やWeb媒体に様々な記事を寄稿 ▪ IT技術系同人誌の販売 ▪ youtube動画作成 2
今日紹介する本 • 章立て 1. Linuxの概要 2. プロセス管理(基礎編) 3. プロセススケジューラ 4.
メモリ管理システム 5. プロセス管理(応用編) 6. デバイスアクセス 7. ファイルシステム 8. 記憶階層 9. ブロック層 10. 仮想化機能 11. コンテナ 12. cgroup 3
おしながき • 本書を書くに至った経緯 • 本書の特徴 • 反響 • おすすめ書籍 •
まとめ 4
おしながき • 本書を書くに至った経緯 • 本書の特徴 • 反響 • おすすめ書籍 •
まとめ 5
Linuxカーネル開発者だったころに思ったこと • OS屋さん以外の多くの人がOSが具体的にどう動いているか理解していない • 大学などでOSを学んで概念を知っていても現実のシステムとのリンクが弱い • OSに詳しくなればもっと強くなれる人がたくさんいるのに… ◦ みんな詳しくなればこの業界はもっとよくなる ◦
話が通じる人がいると (自分が)うれしい 6
専門家以外がOSを知っていて嬉しい場面はあるのか • あると確信している • ソフトウェアシステムは抽象化されているが完璧ではない • 抽象化されきっていない部分の課題はいくらでもある ◦ そういう境界が一番難しい 7
理想 現実
具体的にOSに詳しくなると何がうれしいのか • それまで謎だったシステムの挙動を理解して対処できるようになる ◦ データ量が増えたら性能がいきなり劣化した ◦ 仮想化環境で物理マシンと全然違うよくわからない挙動をする • 監視システムが生やしているメトリクスの意味が理解しやすくなる ◦
システム全体についてのメトリクスの意味は OSわかってる人でないとピンと来にくい • OSの特性を踏まえた上でプログラムやシステム全体の開発、運用ができる 8
OSを理解している人が少ない理由(推測) • ユーザプログラムとOS(とくにカーネル)は全く性質が違う ◦ CPUがユーザプログラムとカーネルでは違うモードで動いている • 直接触る、作る機会が少なくて深い知識を得にくい ◦ 📝 現場でひどい目に遭った人はよく理解していたりする
• いまいち正体がわからなくて食指が動きにくい • OSの参考書は「作り方」か「一般的な概念」の難しい本がほとんど ◦ しかもやたら分厚くて高い 9
要するにいいかんじの学習手段が無い 10 このジャンプ用の本はあるが 読むのが大変 このステップ用の本が無かった OS理解してる OS知らない or 座学で聞いたことがある OS作れる
ここまでやらなくていい ここまで来れるとうれしい
自分で本を書けばいいのでは!? • 自分はLinuxカーネル開発者 • 専門外の人に説明するのに慣れているし好き ◦ SEさんに何度も説明したし、新人向け OS教育を何度もやってきた • 幸いにも暇はある
◦ 第一版を書いたときは無職だった 11 💡 これはいいアイデアですね ピコーン!!!
おしながき • 本書を書くに至った経緯 • 本書の特徴 • 反響 • おすすめ書籍 •
まとめ 12
基本コンセプト • ひたすら図のループの繰り返し 13
その他ポリシー • OS開発者ではなくユーザプログラム開発者、システム管理者向け ◦ 広く浅く&カーネルのコードは一切読まない • 網羅性は目指さず、対象読者にとって重要と思ったものを重点的に説明 14 カーネルやハードウェアの深淵 氷山の地上部分がターゲット
ここには踏み込まない
本書で学べることの全体像からいくつかピックアップ 15
システムコールの実行 16 ユーザプログラムが 動いている時間 カーネルが動いている時間
実行ファイルの構造 17 ② ⑤ ③ ⑥ ① ④ ① ②
③ ④ ⑤ ⑥
プロセスのディスパッチ • あるCPUコア上に実行可能なプロセスが複数あるとする • それぞれのプロセスは短い期間ごとに順番に動く 18 3つの負荷処理が順番に均等に動く
メモリ使用状況を知るためのfreeコマンドの出力の意味 19
キャッシュメモリによるメモリアクセスの高速化 20 L1キャッシュ L2キャッシュ L3キャッシュ メモリ
ディスクI/Oの性能測定 21 青はI/Oスケジューラあり 赤はI/Oスケジューラなし
仮想マシン 22
おしながき • 本書を書くに至った経緯 • 本書の特徴 • 反響 • おすすめ書籍 •
まとめ 23
ポジティブなもの • 「聞いたことがある」ものが「理解している」になった • OSの単位がとれた • 高専や大学、企業の副読本にしている • 輪読会を開いている •
OS屋さんと意思疎通できるようになった 24
ネガティブなもの • 難しすぎる ◦ → 本プレゼン資料に事前に読んでおくといい本を書きました 25
ネガティブなもの • 難しすぎる ◦ → 本プレゼン資料に事前に読んでおくといい本を書きました • 簡単すぎる ◦ →
いかんともしがたい 26
ネガティブなもの • 難しすぎる ◦ → 本プレゼン資料に事前に読んでおくといい本を書きました • 簡単すぎる ◦ →
いかんともしがたい • なるべく物理マシン上でサンプルコードを実行してほしいと書いてあるが、そんなも のは無い ◦ → 一周目は実行結果を見るだけにして、仮想マシンの章を読み終えた後に自分の環境で実行す るといいかも 27
おしながき • 本書を書くに至った経緯 • 本書の特徴 • 反響 • おすすめ書籍 •
まとめ 28
本書を読む前に • 新しいLinuxの教科書 ◦ https://amzn.to/3S8ZtLM ◦ Linuxを一切触ったことない人向け • 本気で学ぶ Linux実践入門
◦ https://amzn.to/3k9LUPC ◦ ひととおりLinuxを触れるようになった人がシステム管理を覚えるのによい 29
本書を読んだ後に • スーパーユーザーなら知っておくべきLinuxシステムの仕組み ◦ https://amzn.to/412RW5f ◦ 本書より少し難しいことを扱っている • 詳解システムパフォーマンス 第二版
◦ https://amzn.to/3I2F7PO ◦ 性能について実践的な深い知見を得られる • 📝 筆者が運営するYouTubeチャンネル(satlinuxtube) ◦ https://www.youtube.com/channel/UCgrUyRFiHhV607Orhriau6w ◦ 本書とかなり似たトピックを扱っている ◦ 短いので豆知識を得る感覚で見られる 30
本書を読んだ後に(開発者向け) • ふつうのLinuxプログラミング 第二版 ◦ https://amzn.to/3SaCwI3 ◦ どんなシステムコールがあってどう使うかなどがわかる。 Cで書かれている •
Goならわかるシステムプログラミング 第二版 ◦ https://amzn.to/3Z24dFe ◦ 同上。Goで書かれている • Linuxプログラミングインタフェース ◦ https://amzn.to/3k57G7l ◦ Linuxのマニアックなシステムコールについて学べる ◦ デカい ◦ 通読するのではなく辞書的に読むとよい 31
本書を読んだ後に(カーネル開発者になりたい人向け) • はじめて読む486 ◦ https://amzn.to/3Kgrkrs ◦ 古いが今でも役立つ CPUの機能についての本 • Linux
Kernel Development ◦ https://amzn.to/3S7GNMo ◦ ユーザプログラムとカーネルの作り方の違いや各サブシステムのコードをやさしく解説 • Linux Kernel Programming ◦ https://amzn.to/3k4S3ww ◦ 現状たぶん一番新しい Linux Kernelの開発用の本 • 📝 Linux Kernel Newbies ◦ https://kernelnewbies.org/ ◦ Linuxにコントリトリビュートしたくなったら 32
おしながき • 本書を書くに至った経緯 • 本書の特徴 • 反響 • おすすめ書籍 •
まとめ 33
まとめ • 「Linuxのしくみ」は実験と図解でLinuxの基礎を比較的容易に学べる本 ◦ ターゲットはOS開発者ではなくユーザプログラム開発者やシステム管理者 ◦ 本書読破後の人ほど Linuxを理解している人は世の中にはまだ少ない • OSについて「いまさら聞けない」「聞く人がいない」ときはぜひ本書を
◦ 📝聞ける人がいると聞くともっといいよ ! • 本書の内容を理解して、楽しいコンピュータ技術者ライフを! 34
おわり 35 ありがとうございました