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
42
23k
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
APIとABIの違い
sat
PRO
5
54
ファイルシステムへのアクセス方法
sat
PRO
0
24
ファイルシステム
sat
PRO
1
23
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
6.1k
ポーリングと割り込み
sat
PRO
1
78
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
140
会社員しながら本を書いてきた知見の共有
sat
PRO
3
880
デバイスにアクセスするデバイスファイル
sat
PRO
1
60
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
48
Other Decks in Technology
See All in Technology
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
160
[RSJ25] Feasible RAG: Hierarchical Multimodal Retrieval with Feasibility-Aware Embodied Memory for Mobile Manipulation
keio_smilab
PRO
0
120
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
120
研究開発と製品開発、両利きのロボティクス
youtalk
1
500
BPaaSにおける人と協働する前提のAIエージェント-AWS登壇資料
kentarofujii
0
120
Language Update: Java
skrb
2
280
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
1
170
Codeful Serverless / 一人運用でもやり抜く力
_kensh
7
350
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
1
230
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
120
AI時代に非連続な成長を実現するエンジニアリング戦略
sansantech
PRO
3
1.1k
Grafana Meetup Japan Vol. 6
kaedemalu
1
350
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Rails Girls Zürich Keynote
gr2m
95
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
We Have a Design System, Now What?
morganepeng
53
7.8k
Balancing Empowerment & Direction
lara
3
610
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 ありがとうございました