$30 off During Our Annual Pro Sale. View Details »
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
21k
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
利きプロセススケジューラ
sat
PRO
5
3.1k
俺とVSCode Python Debugger Extension
sat
PRO
1
190
コード再利用のしくみ ライブラリ
sat
PRO
3
55
AWKへの愛を語る
sat
PRO
3
530
syncコマンドのデータ同期 完了待ちやエラー検出
sat
PRO
0
85
動作中のLinux環境の全メモリを見る
sat
PRO
1
110
Linuxの時間を10秒止める
sat
PRO
2
210
プロセスへのメモリ割り当て4 - 実際に使うときにメモリを獲得するデマンドページング(実践編)
sat
PRO
1
140
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
sat
PRO
1
79
Other Decks in Technology
See All in Technology
【ASW21-01】STAMPSTPAで導き出した課題に対する対策立案手法の提案
hianraku9498
0
540
12/4(水)のBedrockアプデ速報(re:Invent 2024 Daily re:Cap #3 with AWS Heroes)
minorun365
PRO
2
390
Kubernetesを知る
logica0419
17
4.7k
まだチケットを手動で書いてるの?!GitHub Actionsと生成AIでチケットの作成を自動化してみた話 / 20241207 Yoshinori Katayama
shift_evolve
1
660
2024/11/29_失敗談から学ぶ! エンジニア向けre:Invent攻略アンチパターン集
hiashisan
0
430
開志専門職大学特別講義 2024 デモパート
1ftseabass
PRO
0
210
総会員数1,500万人のレストランWeb予約サービスにおけるRustの活用
kymmt90
3
2.8k
【AWS re:Invent 2024】Amazon Bedrock アップデート総まとめ
minorun365
PRO
6
290
ミスが許されない領域にAIを溶け込ませる プロダクトマネジメントの裏側
t01062sy
8
7.7k
ONNX推論クレートの比較と実装奮闘記
emergent
0
290
店舗向けSaaSにおける 顧客要望活用の実践アプローチ(20241205_pmconf)
yujirooo
0
2.8k
2000年てづくりキーボードの旅
tagomoris
1
160
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Building Your Own Lightsaber
phodgson
103
6.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
410
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Making Projects Easy
brettharned
116
5.9k
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 ありがとうございました