$30 off During Our Annual Pro Sale. View Details »

『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
  2. おしながき • 自己紹介 • 本書の概要 • 一問一答 • 会場のみなさまとのコミュニケーション 2

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

  4. 著者: 武内 覚 • 会社員として ◦ むかし: 富士通でLinuxカーネルの開発、サポートに従事 ◦ いま:

    サイボウズでcybozu.comの新インフラのストレージ開発に従事 • 個人として ◦ 2018年2月: 「Linuxのしくみ 第一版」執筆 ◦ その他いろいろ情報発信 ▪ 雑誌やWeb媒体に様々な記事を寄稿 ▪ IT技術系同人誌の販売 ▪ youtube動画作成 4
  5. モデレータ: @nekomatu • OSSが好きな組込み系Linuxエンジニア ◦ 好きなライセンスはGPLv2 ◦ キャリアは10年程。一時、クラウドベンダーでテクニカルサ ポートに従事してたことも。 •

    プライベート ◦ RISC-V勉強会やKernel/VM onlineなどの コミュニティ技術イベントの主催運営 ◦ VR系Vtuber活動 @nekoi7yu ◦ Ethereumを中心にクリプトエコノミーなども関心あり 5
  6. おしながき • 自己紹介 • 本書の概要 • 一問一答 • 会場のみなさまとのコミュニケーション 6

  7. 本書の概要 • Linuxカーネルを浅く広く学ぶ • 章立て 1. Linuxの概要 2. プロセス管理(基礎編) 3.

    プロセススケジューラ 4. メモリ管理システム 5. プロセス管理(応用編) 6. デバイスアクセス 7. ファイルシステム 8. 記憶階層 9. ブロック層 10. 仮想化機能 11. コンテナ 12. cgroup 7
  8. 本書を執筆しようとした動機 • あらゆるソフトウェア技術者にはOSカーネルの知識が役立つと思っていた ◦ 奥深くまで知る必要はなくて、浅く広くでいい • OSカーネルの本は浅く広く学ぶには不向き ◦ 教科書的なコンセプトの説明 ◦

    詳細なソースコードの解説 • 無いから自分で書くことにした • 筆者はLinuxが得意なのでLinuxをテーマにした 8
  9. 本書が解決したい問題 9

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

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

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

    ◦ なるほどわからん 12
  13. 1. 図解による概要の理解 13

  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を消費し続ける プロセスを作る
  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
  16. 4. 可視化されたデータに基づく深い理解 16 補足: sched.pyがグラフの生成もする

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

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

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

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

  21. 章が増えた 1. Linuxの概要 2. プロセス管理(基礎編) 3. プロセススケジューラ 4. メモリ管理システム 5.

    プロセス管理(応用編) 6. デバイスアクセス 7. ファイルシステム 8. 記憶階層 9. ブロック層 10. 仮想化機能 11. コンテナ 12. cgroup 21
  22. 全体的に見やすくなった • 第一版 ◦ モノクロだったので、複雑な図 (線の数が多いグラフなど )の理解が難しかった ◦ わたしの書いた破滅的なイラストがほぼそのまま使われていた •

    増補改訂版 ◦ フルカラー化 ◦ デザイナーさんがかっこいい画を書いてくれた 22
  23. before(第一版, モノクロ) 23

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

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

  26. 既存の章もパワーアップ • プロセス管理 ◦ スレッド、プロセス間通信、ジョブ管理、排他制御 • 豆知識や発展的な内容を扱うコラムも追加 ◦ メモリ管理システム ▪

    Meltdown脆弱性 ◦ ブロック層 ▪ 推測するな、測定せよ ▪ 何のための性能測定 26
  27. 実験プログラムのGo,Python化 • 第一版 ◦ ほとんどC言語で書かれている ◦ カーネルレイヤの挙動を知るためには Cがほとんど唯一の選択肢だと思い込んでいた • 増補改訂版

    ◦ ユーザが多そう&これからも増えそうな Go,Pythonでほとんど書き直した ◦ Cじゃないとダメ」なケースはほぼなかった。思い込み厳禁 27
  28. タイトルや表紙で工夫したことは? 28

  29. 「玄人用の本」という威圧感を出さないようにした 超絶Linuxカーネル 実験と図解で学ぶOS、仮想マシン、 コンテナの基礎知識 … void module_init() { printk(“Happy Hacking!”);

    } … Satoru Takeuchi 29 御託はいいから全部読め エクストリーム出版社
  30. ゆるふわ化に成功 第一版 増補改訂版 30 こわくないよ たいへん読みやすいです

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

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

    「推測するな、計測せよ」コラムがブーメランになった 32
  33. 改訂にあたって一番気を付けたところは? 33

  34. 誤字脱字などの不備を可能な限り減らす • 背景 ◦ 第一版には大小あわせて100個以上の誤りが存在していた(今は修正済) ◦ コンテンツ以外のところでの評価を大きく下げた • 対策 ◦

    様々なバックグラウンドを持つ25人の技術者にレビューを依頼 ▪ Linuxカーネルのベテラン開発者 ▪ Linuxじゃないカーネルのベテラン開発者 ▪ カーネル以外のベテラン技術者 ▪ 対象読者に近い人 ◦ 本書のことを全く知らないかたに外部校正を依頼 34
  35. 第一版への反応で驚いたものは? 35

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

    生理的に無理
  37. 今後どんなものを書く予定か? 37

  38. 今後書こうかなと思っている本(変わるかもしれません) • ソースコードの読み方 ◦ 読む目的と対象OSSを決めて図解しながらノウハウを紹介 ◦ 進行中 • 初心者がプログラマになるためのすべてを一冊で解説 ◦

    開発環境 ◦ プログラミング言語 ◦ ソースコード管理システム ◦ などなど • スーパーマニアックなカーネルの本 ◦ たまにはこういうのも書きたい ◦ まったく売れなさそうなので同人誌にするか ? 38
  39. おしながき • 自己紹介 • 本書の概要 • 一問一答 • 会場のみなさまとのコミュニケーション 39

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

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