Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxカーネル学習の敷居を下げたいという思いを実現した本、「Linuxのしくみ」

 Linuxカーネル学習の敷居を下げたいという思いを実現した本、「Linuxのしくみ」

以下イベントの発表資料です。
https://forkwell.connpass.com/event/273179/

Satoru Takeuchi
PRO

February 18, 2023
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 実行ファイルの構造
    17












    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. 仮想マシン
    22

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide