Slide 1

Slide 1 text

Linuxカーネル学習の敷居を下げたいという 思いを実現した本 「Linuxのしくみ」 Feb. 18rd, 2023 武内覚 [email protected] twitter: satoru_takeuchi 1

Slide 2

Slide 2 text

自己紹介: 武内 覚 ● 会社員として ○ むかし: 富士通でLinuxカーネルの開発、サポートに従事 ○ いま: サイボウズで新インフラのストレージ開発に従事 ● 個人として ○ 2018年2月: 「Linuxのしくみ 第一版」執筆 ○ 2022年10月: 「Linuxのしくみ」増補改訂版 執筆 ○ その他いろいろ情報発信 ■ 雑誌やWeb媒体に様々な記事を寄稿 ■ IT技術系同人誌の販売 ■ youtube動画作成 2

Slide 3

Slide 3 text

今日紹介する本 ● 章立て 1. Linuxの概要 2. プロセス管理(基礎編) 3. プロセススケジューラ 4. メモリ管理システム 5. プロセス管理(応用編) 6. デバイスアクセス 7. ファイルシステム 8. 記憶階層 9. ブロック層 10. 仮想化機能 11. コンテナ 12. cgroup 3

Slide 4

Slide 4 text

おしながき ● 本書を書くに至った経緯 ● 本書の特徴 ● 反響 ● おすすめ書籍 ● まとめ 4

Slide 5

Slide 5 text

おしながき ● 本書を書くに至った経緯 ● 本書の特徴 ● 反響 ● おすすめ書籍 ● まとめ 5

Slide 6

Slide 6 text

Linuxカーネル開発者だったころに思ったこと ● OS屋さん以外の多くの人がOSが具体的にどう動いているか理解していない ● 大学などでOSを学んで概念を知っていても現実のシステムとのリンクが弱い ● OSに詳しくなればもっと強くなれる人がたくさんいるのに… ○ みんな詳しくなればこの業界はもっとよくなる ○ 話が通じる人がいると (自分が)うれしい 6

Slide 7

Slide 7 text

専門家以外がOSを知っていて嬉しい場面はあるのか ● あると確信している ● ソフトウェアシステムは抽象化されているが完璧ではない ● 抽象化されきっていない部分の課題はいくらでもある ○ そういう境界が一番難しい 7 理想 現実

Slide 8

Slide 8 text

具体的にOSに詳しくなると何がうれしいのか ● それまで謎だったシステムの挙動を理解して対処できるようになる ○ データ量が増えたら性能がいきなり劣化した ○ 仮想化環境で物理マシンと全然違うよくわからない挙動をする ● 監視システムが生やしているメトリクスの意味が理解しやすくなる ○ システム全体についてのメトリクスの意味は OSわかってる人でないとピンと来にくい ● OSの特性を踏まえた上でプログラムやシステム全体の開発、運用ができる 8

Slide 9

Slide 9 text

OSを理解している人が少ない理由(推測) ● ユーザプログラムとOS(とくにカーネル)は全く性質が違う ○ CPUがユーザプログラムとカーネルでは違うモードで動いている ● 直接触る、作る機会が少なくて深い知識を得にくい ○ 📝 現場でひどい目に遭った人はよく理解していたりする ● いまいち正体がわからなくて食指が動きにくい ● OSの参考書は「作り方」か「一般的な概念」の難しい本がほとんど ○ しかもやたら分厚くて高い 9

Slide 10

Slide 10 text

要するにいいかんじの学習手段が無い 10 このジャンプ用の本はあるが 読むのが大変 このステップ用の本が無かった OS理解してる OS知らない or 座学で聞いたことがある OS作れる ここまでやらなくていい ここまで来れるとうれしい

Slide 11

Slide 11 text

自分で本を書けばいいのでは!? ● 自分はLinuxカーネル開発者 ● 専門外の人に説明するのに慣れているし好き ○ SEさんに何度も説明したし、新人向け OS教育を何度もやってきた ● 幸いにも暇はある ○ 第一版を書いたときは無職だった 11 💡 これはいいアイデアですね ピコーン!!!

Slide 12

Slide 12 text

おしながき ● 本書を書くに至った経緯 ● 本書の特徴 ● 反響 ● おすすめ書籍 ● まとめ 12

Slide 13

Slide 13 text

基本コンセプト ● ひたすら図のループの繰り返し 13

Slide 14

Slide 14 text

その他ポリシー ● OS開発者ではなくユーザプログラム開発者、システム管理者向け ○ 広く浅く&カーネルのコードは一切読まない ● 網羅性は目指さず、対象読者にとって重要と思ったものを重点的に説明 14 カーネルやハードウェアの深淵 氷山の地上部分がターゲット ここには踏み込まない

Slide 15

Slide 15 text

本書で学べることの全体像からいくつかピックアップ 15

Slide 16

Slide 16 text

システムコールの実行 16 ユーザプログラムが 動いている時間 カーネルが動いている時間

Slide 17

Slide 17 text

実行ファイルの構造 17 ② ⑤ ③ ⑥ ① ④ ① ② ③ ④ ⑤ ⑥

Slide 18

Slide 18 text

プロセスのディスパッチ ● あるCPUコア上に実行可能なプロセスが複数あるとする ● それぞれのプロセスは短い期間ごとに順番に動く 18 3つの負荷処理が順番に均等に動く

Slide 19

Slide 19 text

メモリ使用状況を知るためのfreeコマンドの出力の意味 19

Slide 20

Slide 20 text

キャッシュメモリによるメモリアクセスの高速化 20 L1キャッシュ L2キャッシュ L3キャッシュ メモリ

Slide 21

Slide 21 text

ディスクI/Oの性能測定 21 青はI/Oスケジューラあり 赤はI/Oスケジューラなし

Slide 22

Slide 22 text

仮想マシン 22

Slide 23

Slide 23 text

おしながき ● 本書を書くに至った経緯 ● 本書の特徴 ● 反響 ● おすすめ書籍 ● まとめ 23

Slide 24

Slide 24 text

ポジティブなもの ● 「聞いたことがある」ものが「理解している」になった ● OSの単位がとれた ● 高専や大学、企業の副読本にしている ● 輪読会を開いている ● OS屋さんと意思疎通できるようになった 24

Slide 25

Slide 25 text

ネガティブなもの ● 難しすぎる ○ → 本プレゼン資料に事前に読んでおくといい本を書きました 25

Slide 26

Slide 26 text

ネガティブなもの ● 難しすぎる ○ → 本プレゼン資料に事前に読んでおくといい本を書きました ● 簡単すぎる ○ → いかんともしがたい 26

Slide 27

Slide 27 text

ネガティブなもの ● 難しすぎる ○ → 本プレゼン資料に事前に読んでおくといい本を書きました ● 簡単すぎる ○ → いかんともしがたい ● なるべく物理マシン上でサンプルコードを実行してほしいと書いてあるが、そんなも のは無い ○ → 一周目は実行結果を見るだけにして、仮想マシンの章を読み終えた後に自分の環境で実行す るといいかも 27

Slide 28

Slide 28 text

おしながき ● 本書を書くに至った経緯 ● 本書の特徴 ● 反響 ● おすすめ書籍 ● まとめ 28

Slide 29

Slide 29 text

本書を読む前に ● 新しいLinuxの教科書 ○ https://amzn.to/3S8ZtLM ○ Linuxを一切触ったことない人向け ● 本気で学ぶ Linux実践入門 ○ https://amzn.to/3k9LUPC ○ ひととおりLinuxを触れるようになった人がシステム管理を覚えるのによい 29

Slide 30

Slide 30 text

本書を読んだ後に ● スーパーユーザーなら知っておくべきLinuxシステムの仕組み ○ https://amzn.to/412RW5f ○ 本書より少し難しいことを扱っている ● 詳解システムパフォーマンス 第二版 ○ https://amzn.to/3I2F7PO ○ 性能について実践的な深い知見を得られる ● 📝 筆者が運営するYouTubeチャンネル(satlinuxtube) ○ https://www.youtube.com/channel/UCgrUyRFiHhV607Orhriau6w ○ 本書とかなり似たトピックを扱っている ○ 短いので豆知識を得る感覚で見られる 30

Slide 31

Slide 31 text

本書を読んだ後に(開発者向け) ● ふつうのLinuxプログラミング 第二版 ○ https://amzn.to/3SaCwI3 ○ どんなシステムコールがあってどう使うかなどがわかる。 Cで書かれている ● Goならわかるシステムプログラミング 第二版 ○ https://amzn.to/3Z24dFe ○ 同上。Goで書かれている ● Linuxプログラミングインタフェース ○ https://amzn.to/3k57G7l ○ Linuxのマニアックなシステムコールについて学べる ○ デカい ○ 通読するのではなく辞書的に読むとよい 31

Slide 32

Slide 32 text

本書を読んだ後に(カーネル開発者になりたい人向け) ● はじめて読む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

Slide 33

Slide 33 text

おしながき ● 本書を書くに至った経緯 ● 本書の特徴 ● 反響 ● おすすめ書籍 ● まとめ 33

Slide 34

Slide 34 text

まとめ ● 「Linuxのしくみ」は実験と図解でLinuxの基礎を比較的容易に学べる本 ○ ターゲットはOS開発者ではなくユーザプログラム開発者やシステム管理者 ○ 本書読破後の人ほど Linuxを理解している人は世の中にはまだ少ない ● OSについて「いまさら聞けない」「聞く人がいない」ときはぜひ本書を ○ 📝聞ける人がいると聞くともっといいよ ! ● 本書の内容を理解して、楽しいコンピュータ技術者ライフを! 34

Slide 35

Slide 35 text

おわり 35 ありがとうございました