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

『Linuxのしくみ』増補改訂版発売記念イベント ~ Linuxのしくみのしくみ ~

『Linuxのしくみ』増補改訂版発売記念イベント ~ Linuxのしくみのしくみ ~

以下イベントの発表スライドです

https://connpass.com/event/261999/

Satoru Takeuchi
PRO

October 14, 2022
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. 『Linuxのしくみ 増補改訂版』
    発売記念イベント
    〜 Linuxのしくみのしくみ ~
    Oct. 13rd, 2022
    武内覚
    twitter: satoru_takeuchi
    1

    View Slide

  2. おしながき
    ● 自己紹介
    ● 本書の概要
    ● 一問一答
    ● 会場のみなさまとのコミュニケーション
    2

    View Slide

  3. おしながき
    ● 自己紹介
    ● 本書の概要
    ● 一問一答
    ● 会場のみなさまとのコミュニケーション
    3

    View Slide

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

    View Slide

  5. モデレータ: @nekomatu
    ● OSSが好きな組込み系Linuxエンジニア
    ○ 好きなライセンスはGPLv2
    ○ キャリアは10年程。一時、クラウドベンダーでテクニカルサ
    ポートに従事してたことも。
    ● プライベート
    ○ RISC-V勉強会やKernel/VM onlineなどの
    コミュニティ技術イベントの主催運営
    ○ VR系Vtuber活動 @nekoi7yu
    ○ Ethereumを中心にクリプトエコノミーなども関心あり
    5

    View Slide

  6. おしながき
    ● 自己紹介
    ● 本書の概要
    ● 一問一答
    ● 会場のみなさまとのコミュニケーション
    6

    View Slide

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

    View Slide

  8. 本書を執筆しようとした動機
    ● あらゆるソフトウェア技術者にはOSカーネルの知識が役立つと思っていた
    ○ 奥深くまで知る必要はなくて、浅く広くでいい
    ● OSカーネルの本は浅く広く学ぶには不向き
    ○ 教科書的なコンセプトの説明
    ○ 詳細なソースコードの解説
    ● 無いから自分で書くことにした
    ● 筆者はLinuxが得意なのでLinuxをテーマにした
    8

    View Slide

  9. 本書が解決したい問題
    9

    View Slide

  10. 本書を読んだ後になってほしい状態
    10

    View Slide

  11. 本書の基本的な流れ
    11

    View Slide

  12. 具体例: プロセススケジューラ
    ● 教科書的な説明
    ○ あるCPUコア上に実行可能なプロセスが複数あるとする
    ○ それぞれのプロセスは短い期間ごとに順番に動く
    ● 読者の理解
    ○ なるほどわからん
    12

    View Slide

  13. 1. 図解による概要の理解
    13

    View Slide

  14. 2. 実験(Pythonで書かれた実験プログラム)
    $ cat sched.py

    def child_fn(n): # CP
    progress = 100*[None]
    for i in range(100):
    for j in range(nloop_per_msec):
    pass
    progress[i] = time.perf_counter()
    f = open("{}.data".format(n),"w")
    for i in range(100):
    f.write("{}\t{}\n".format((progress[
    i]-start)*1000,i))
    f.close()
    exit(0)


    for i in
    range(concurrency):
    pid = os.fork()
    if (pid < 0):
    exit(1)
    elif pid == 0:
    child_fn(i)

    14
    一定時間CPUを消費し続けて
    進捗をファイルに保存
    CPUを消費し続ける
    プロセスを作る

    View Slide

  15. 3. データ採取
    $ ./sched.py 2
    $ ls
    0.data 1.data …
    $ cat 0.data
    16.48986899817828 0
    17.484944997704588 1
    18.473731994163245 2
    19.432729997788556 3
    20.371213991893455 4
    21.83759000035934 5
    22.914084998774342 6
    23.85638099804055 7
    24.812530988128856 8

    15

    View Slide

  16. 4. 可視化されたデータに基づく深い理解
    16
    補足:
    sched.pyがグラフの生成もする

    View Slide

  17. おしながき
    ● 自己紹介
    ● 本書について
    ● 一問一答
    ● 会場のみなさまとのコミュニケーション
    17

    View Slide

  18. 具体的に何を学べる本なのか?
    18

    View Slide

  19. 本書で学べることの全体像
    19

    View Slide

  20. 第一版との違いは?
    20

    View Slide

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

    View Slide

  22. 全体的に見やすくなった
    ● 第一版
    ○ モノクロだったので、複雑な図 (線の数が多いグラフなど )の理解が難しかった
    ○ わたしの書いた破滅的なイラストがほぼそのまま使われていた
    ● 増補改訂版
    ○ フルカラー化
    ○ デザイナーさんがかっこいい画を書いてくれた
    22

    View Slide

  23. before(第一版, モノクロ)
    23

    View Slide

  24. after(増補改訂版, カラー)
    24

    View Slide

  25. 冒頭に出した画は
    25
    before(原稿) after(デザイナーさん作)

    View Slide

  26. 既存の章もパワーアップ
    ● プロセス管理
    ○ スレッド、プロセス間通信、ジョブ管理、排他制御
    ● 豆知識や発展的な内容を扱うコラムも追加
    ○ メモリ管理システム
    ■ Meltdown脆弱性
    ○ ブロック層
    ■ 推測するな、測定せよ
    ■ 何のための性能測定
    26

    View Slide

  27. 実験プログラムのGo,Python化
    ● 第一版
    ○ ほとんどC言語で書かれている
    ○ カーネルレイヤの挙動を知るためには Cがほとんど唯一の選択肢だと思い込んでいた
    ● 増補改訂版
    ○ ユーザが多そう&これからも増えそうな Go,Pythonでほとんど書き直した
    ○ Cじゃないとダメ」なケースはほぼなかった。思い込み厳禁
    27

    View Slide

  28. タイトルや表紙で工夫したことは?
    28

    View Slide

  29. 「玄人用の本」という威圧感を出さないようにした
    超絶Linuxカーネル
    実験と図解で学ぶOS、仮想マシン、
    コンテナの基礎知識

    void module_init() {
    printk(“Happy Hacking!”);
    }

    Satoru Takeuchi
    29
    御託はいいから全部読め
    エクストリーム出版社

    View Slide

  30. ゆるふわ化に成功
    第一版 増補改訂版
    30
    こわくないよ たいへん読みやすいです

    View Slide

  31. 実験プログラム作りで苦労した点は?
    31

    View Slide

  32. 期待通りのデータがとれる実験プログラムを作るのが大変
    ● ほんの少し条件が違うと思った結果にならない
    ● そもそも自分がLinuxカーネルのつくりを誤解していたこともある
    ● 学んだこと
    ○ 読者はカーネルソースを読まなくていいが、筆者は読まなければならない
    ○ 「推測するな、計測せよ」コラムがブーメランになった
    32

    View Slide

  33. 改訂にあたって一番気を付けたところは?
    33

    View Slide

  34. 誤字脱字などの不備を可能な限り減らす
    ● 背景
    ○ 第一版には大小あわせて100個以上の誤りが存在していた(今は修正済)
    ○ コンテンツ以外のところでの評価を大きく下げた
    ● 対策
    ○ 様々なバックグラウンドを持つ25人の技術者にレビューを依頼
    ■ Linuxカーネルのベテラン開発者
    ■ Linuxじゃないカーネルのベテラン開発者
    ■ カーネル以外のベテラン技術者
    ■ 対象読者に近い人
    ○ 本書のことを全く知らないかたに外部校正を依頼
    34

    View Slide

  35. 第一版への反応で驚いたものは?
    35

    View Slide

  36. C言語への拒否反応のすごさ
    ● 「C言語がとにかく嫌い」
    ● 「C言語だとソースを見る気がしない」
    ● 「ポインタに嫌な思い出がある」
    ● 「とにかくC言語が嫌い」
    36
    生理的に無理

    View Slide

  37. 今後どんなものを書く予定か?
    37

    View Slide

  38. 今後書こうかなと思っている本(変わるかもしれません)
    ● ソースコードの読み方
    ○ 読む目的と対象OSSを決めて図解しながらノウハウを紹介
    ○ 進行中
    ● 初心者がプログラマになるためのすべてを一冊で解説
    ○ 開発環境
    ○ プログラミング言語
    ○ ソースコード管理システム
    ○ などなど
    ● スーパーマニアックなカーネルの本
    ○ たまにはこういうのも書きたい
    ○ まったく売れなさそうなので同人誌にするか
    ?
    38

    View Slide

  39. おしながき
    ● 自己紹介
    ● 本書の概要
    ● 一問一答
    ● 会場のみなさまとのコミュニケーション
    39

    View Slide

  40. 会場のみなさまとのコミュニケーション
    ● 事前に寄せられた質問への回答
    ● イベント会場で出てきた質問(あれば)への回答
    ● その他本書に関係する雑談とかいろいろ(あれば)
    40

    View Slide

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

    View Slide