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

OSカーネルに興味がある人におすすめの参考資料

 OSカーネルに興味がある人におすすめの参考資料

以下動画のテキストです
https://youtu.be/XXtZy6OhjUI

# 訂正

「12ステップで作る組込みOS自作入門」のCPUアーキテクチャをARMと言っていましたが正しくはH8です。

# 紹介した書籍一覧

コンピュータの構成と設計 MIPS Edition 第6版
https://amzn.to/3oXiUgA

はじめて読む486
https://amzn.to/42AT287

Linuxのしくみ
https://amzn.to/3qDtCcD

オペレーティングシステム 設計と実装 第3版
https://amzn.to/3N33kYz

Operating Systems Design and Implementation, 3rd edition
https://www.pearson.com/en-us/subject-catalog/p/operating-systems-design-and-implementation/P200000003167/9780133002058

30日でできる! OS自作入門
https://amzn.to/3qEGCyD

ゼロからのOS自作入門
https://amzn.to/43KIHYg

12ステップで作る組込みOS自作入門
https://amzn.to/3CkX3Ti

動かしながらゼロから学ぶ Linuxカーネルの教科書
https://amzn.to/45YoIHd

Linux Kernel Development 3rd edition
https://amzn.to/3S7GNMo

Linux Kernel Programming
https://amzn.to/3k4S3ww

Linux Kernel Programming part2
https://amzn.to/45ZD366

Linux Kernel Programming 2nd edition
https://amzn.to/43PMTWv

# 紹介したWebサイト一覧

osdev wiki
https://wiki.osdev.org/Expanded_Main_Page

osdev-jp
https://osdev.jp/

osdev-jp wiki
https://github.com/osdev-jp/osdev-jp.github.io/wiki

multibootの仕様
https://www.gnu.org/software/grub/manual/multiboot/multiboot.html

xv6
https://pdos.csail.mit.edu/6.828/2022/xv6.html

linux insides
https://0xax.gitbooks.io/linux-insides/content/

Linux Kernel Newbies
https://kernelnewbies.org/

Satoru Takeuchi
PRO

June 11, 2023
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. OSカーネルに興味がある人
    におすすめの参考資料
    Jun. 11th, 2023
    Satoru Takeuchi
    twitter: satoru_takeuchi

    View Slide

  2. はじめに
    ● OSカーネルに興味がある人におすすめの参考資料を紹介
    ○ 書籍
    ○ Webサイト
    ● 前提
    ○ PC(x86_64)上で動作させるものを想定
    ■ 一か所例外的にARMのものが出てくる
    ○ Linux上で基本的なコマンド操作や Cライク言語を使ったプログラミングできる人向け
    ○ 仮想化技術やコンテナ技術など高度な機能は対象外

    View Slide

  3. OSカーネルへの興味といっても色々ある
    ● 考えられるもの
    ○ 自作OSを作りたい!
    ○ 既存のOSカーネルを改造してみたい !
    ○ 既存OSカーネルの開発に参加したい !
    ○ 上記のものには興味がないが知識として知っておきたい !
    ○ その他
    ● 本書が対象とするもの
    ○ 自作OSの作成
    ○ Linuxの改造
    ○ Linux開発への参加(ちょっとだけ)

    View Slide

  4. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  5. 興味を持続させるコツ
    ● 必ずしも全部理解しなければいけないというわけではない
    ● 作りたいものによってはさほど知識が必要ないものもある
    ○ 難しいことしなければカーネルのほとんどには機能ハードウェアの知識は ”それほど”必要ない
    ■ 難しいことの例: 性能向上
    ● オープンソースを活用して既存実装を参考にしまくろう
    ○ 興味ないところはライセンスが許す範囲でコピペでもいい

    View Slide

  6. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  7. コンピュータの構成と設計 MIPS Edition 第6版
    ● https://amzn.to/3X2P475
    ● 網羅的だが高度で分厚い
    ● アーキテクチャが馴染みのないMIPS
    ● 全部読み通すのはかなりつらい
    ● 紹介しておいてなんだが、まずは流し読みでいい
    ● 後続の本で不明点あれば辞書的に
    画像はリンク先より引用

    View Slide

  8. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  9. はじめて読む486
    ● https://amzn.to/42AT287
    ● 実は32bit アーキテクチャ(x86)の本
    ● x86_64でも基本は変わっていないので役立つ
    ● いきなりIntelのマニュアルを読むよりおすすめ
    画像はリンク先より引用

    View Slide

  10. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  11. いい本を知らないです(ごめんなさい)
    ● 既存OSのデバイスドライバを読んで真似するのが手っ取り早い
    ○ できればシンプルな自作 OSのもの
    ● ハードウェアの仕様書だけ見ててもいきなり実装というのはキツい
    ● 既存OSでドライバを書く本といえば「Linuxデバイスドライバ」があるが、古くて今の
    Linuxだと動かない
    ○ https://amzn.to/43xiJYt

    View Slide

  12. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  13. Linuxのしくみ
    ● https://amzn.to/3qDtCcD
    ● Linuxを題材にOSカーネルが動作するしくみを説明
    ● 実験と図解で学ぶ
    ● ソースコードは読まない
    ● カーネル機能についてのフワっとした理解ができる
    ● これ読んでカーネルが書けるわけではない
    13
    画像はリンク先より引用

    View Slide

  14. オペレーティングシステム
    ● https://amzn.to/3N33kYz
    ● OSカーネルについての基礎知識が得られる
    ● 個々の機能が生まれた歴史的経緯なども紹介
    ● MINIXというOSの実装
    ● 絶版っぽい?
    ● 英語版ならまだ買えるようだ
    14
    写真はリンク先より引用

    View Slide

  15. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  16. 30日でできる! OS自作入門
    ● https://amzn.to/3qEGCyD
    ● 数々の自作OS開発者を生み出してきた本
    ● さっさとGUIやアプリを作って視覚的に楽しめる
    ○ 細かいところは他の本で補足しましょう
    ● 説明が懇切丁寧
    ○ 中高生でも作れた人もいるらしい
    ● x86(32bit)用
    16
    画像はリンク先より引用

    View Slide

  17. ゼロからのOS自作入門
    ● https://amzn.to/43KIHYg
    ● 30日本の後継を目指した本
    ● 後述のようにUEFIからのブートに対応
    ● 説明が丁寧なところは30日本と同様
    ● C++で書かれているのでちょっと難しめか
    ● x86_64用
    17
    画像はリンク先より引用

    View Slide

  18. 12ステップで作る組込みOS自作入門
    ● https://amzn.to/3CkX3Ti
    ● 他の自作OS本よりさらに割り切ったシンプルな作り
    ● ARMの特定のボードが必要
    ○ 今まだ手に入るかは知らないです
    18
    画像はリンク先より引用

    View Slide

  19. ブート処理について
    ● 「コンピュータはどうやって動き出すのか」を突き詰めると出てくるテーマ
    ● 多くの人が興味を持ちがち
    ● 実装は茨の道
    ○ やたらと長ったらしいコードを書かなければいけない
    ○ みために訴えてこないので退屈
    ○ うまく動かなくてもデバッグがしにくい
    ● よほど興味がなければスキップするのをおすすめ
    ● ブートローダからブートする前提のものを作ってもいい

    View Slide

  20. PCの場合
    ● 電源を入れたらBIOSかUEFI BIOSが起動してその後にOSかブートローダ(典型的
    にはGRUB)が起動するというイメージ
    BIOS(古いマシンで使われる ) UEFI BIOS(新しいマシンで使われる )
    GRUB GRUB
    OS
    OS OS
    OS

    View Slide

  21. PCの場合
    ● 電源を入れたらBIOSかUEFI BIOSが起動してその後にOSかブートローダ(典型的
    にはGRUB)が起動するというイメージ
    BIOS(古いマシンで使われる ) UEFI BIOS(新しいマシンで使われる )
    GRUB GRUB
    OS
    OS OS
    OS
    30日本を見れば
    わかる
    multibootの仕様(後述)を見る必要がある
    30日本を見れば
    わかる
    「ゼロから学ぶ…」を見れ
    ばわかる

    View Slide

  22. その他参考資料
    ● osdev wiki
    ○ OS作成についての膨大な知見が集まっている
    ● osdev-jp
    ○ 仲間を探せる
    ○ いろいろなイベントがあったり知見を持ち寄ったりしている
    ○ https://github.com/osdev-jp/osdev-jp.github.io/wiki
    ● opv86
    ○ x86_64命令セットの情報をIntelのマニュアルから抜き出して見やすく整形している
    ● multibootの仕様
    ● xv6
    ○ 教育用のUnix

    View Slide

  23. 全体像
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  24. 動かしながらゼロから学ぶ Linuxカーネルの教科書
    ● https://amzn.to/45YoIHd
    ● 簡単にカーネルモジュールが作れる
    ● 説明がかなり丁寧
    ● とりあえずはこれから始めるとよい
    24
    画像はリンク先より引用

    View Slide

  25. Linux Kernel Development 3rd edition
    ● https://amzn.to/3S7GNMo
    ● ユーザプログラムとカーネルの作り方の違いを説明
    ● 各サブシステムのコードをやさしく解説
    ● 📝 わたしはこれの1版でカーネル開発に入門した
    25
    画像はリンク先より引用

    View Slide

  26. Linux Kernel Programming
    ● https://amzn.to/3k4S3ww
    ○ part2もある
    ● 現状たぶん一番新しいLinux Kernelの開発用の本
    ● 2023年10月に2版が出るらしい
    26
    画像はリンク先より引用

    View Slide

  27. その他
    ● linux-insides
    ○ Linuxのソースを説明している

    View Slide

  28. スキルマップ
    コンピュータアーキテクチャの基礎知識
    CPUアーキテクチャ
    カーネル基礎知識
    ソフトウェアの知識
    ハードウェアの知識 周辺機器
    x86_64 ARM RISC-V
    デバイスドライバ
    メモリ管理、スケジューラ、ファイルシステム …
    キーボード ディスク NIC
    … …
    やりたいこと
    独自OSを作る Linuxを改造する
    Linux開発に参加する

    View Slide

  29. その他
    ● Linux Kernel Newbies
    ○ とにかくまずはここから
    画像はリンク先より引用

    View Slide

  30. おわり
    ● happy hacking!

    View Slide