Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

おわり ● happy hacking!