30分で分かる!
OSの作り方 ver.2
2019/05/07
内田 公太 @uchan_nos
自己紹介 1/2
• 内田公太 @uchan_nos
• サイボウズ株式会社 SREチーム
• 1000台規模の物理サーバの管理ツール群
• 顧客データのリアルタイムバックアップ
• 障害監視、ログ収集
• 東京工業大学 特任助教
• 情報理工学院 情報工学系 権藤研究室
• W8 E棟 8階
• 火曜日・金曜日
自己紹介 2/2
• 自作OSもくもく会コアメンバー
• 『30日でできる! OS自作入門』
の校正を担当
• 『自作エミュレータで学ぶ
x86アーキテクチャ』の著者
OSとは
• Operating System
Microsoft Windows 10 のスクリーンショット
OSとは
• 定義はいろいろ
• 「OSとは、ソフトウェアの
種類の一つで、機器の基本
的な管理や制御のための機
能や、多くのソフトウェア
が共通して利用する基本的
な機能などを実装した、シ
ステム全体を管理するソフ
トウェア。」
http://e-words.jp/w/OS.html
https://en.wikipedia.org/wiki/Operating_
system#/media/File:Kernel_Layout.svg
OSとは
• 『30日でできる! OS自作入門』の定義
結局のところ、それぞれの作者が
「これはOSなんだ」と言い張って、
周囲の人も「まあそうかな」と思
えばどんなソフトでもOSなんです。
OS自作とは
• ほかのOSの力を借りずに起動するソフトウェ
ア(なんでもいい)を作ること
• ハードウェアに近い世界
• → パソコンを支配する感覚
• → エキサイティング!
Linuxと平成
• 1991(平成3)年8月25日
リーナス・トーバルズがLinuxの初版を公開
• 1993(平成5)年
Linuxカーネルに関わる開発者が100人を越えた
• …
• 2014(平成26)年
Ubuntuのユーザ数が2,200万と公表された
• 2019(平成31)年3月5日
Linux 5.0正式リリース
日本の元号なんてリーナスには関係ないけど(笑)
OS自作も一歩から
自作OSにおける “Hello World”
有名な
自作OSたち
http://z-slash.net/os/osask/osask.png
OSASK
Mona OS
https://a.fsdn.com/con/app/proj/monaos/screenshots/90657.jpg
はりぼてOS
http://hrb.osask.jp/figures.html
OS自作の方向性
• システムプログラミングを楽しむ
• OS理論を学ぶ
• 実用的なOSを作る
• 既存OSを改良する
システムプログラミング
を楽しむ
• 『 30日でできる!OS自作入門』の方向性
• 単純にOS作成を楽しむ=娯楽
• コンピュータのハードウェアを支配してる感じ
で楽しい
• CPUと戯れる
• デバイスと戯れる
• 低レイヤに詳しくなれる!
http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinie/20090409/20090409144532.jpg
OS理論を学ぶ
• 『オペレーティングシステム 第3版
設計と実装』などを読んだりする
• メモリ管理、プロセス管理、ファイルシステム、
デバイスドライバの仕組みなどを学ぶ
Intel 64 and IA-32 Architectures Software Developer’s Manual より引用
ページングによる
メモリ管理の仕組み
実用的なOSを作る
• 既存OSが移植されてないハードウェアのOS
• 特定の処理のオーバーヘッドが小さいOS
• 例:liva氏作の、Intel e1000ギガビットイーサに
対応したOS。Linuxより低遅延に通信できる。
• 一人で汎用かつ実用的なOSを作ることは現代
ではほぼ無理
• 汎用性を捨てれば活路がある
→後で詳述
既存OSを改良する
• LinuxやFreeBSDなどを改造する
• 現代において汎用かつ実用的なOSを目指すな
らこの路線
• この発表でいう「OS自作」ではない
OSを自作する方法
• 入門書を手に入れる
• 取りあえずその通り作ってみる
• 後は自由に改造したり知識を深めたり
OSを自作する方法
• 入門書を手に入れる
• 取りあえずその通り作ってみる
• 後は自由に改造したり知識を深めたり
たったの3ステップ!
入門書を手に入れる
『30日でできる! OS自作入門』
から始めるのがおすすめ
30日後
OS自作入門:一日目
• P.14「とにかくやるのだぁ」
• バイナリエディタだけで
1.4MBのFDイメージを作成
OS自作入門:二日目
• p.29「まずはテキストエディタの紹介」
• テキストエディタがバイナリエディタの後
にくる書籍なんて聞いたことない!
OS自作入門:四日目
• p.69「C言語と画面表示の練習」
• p.95でなんとなく「OS」らしき画面が!
http://hrb.osask.jp/figures.html
OS自作入門:八日目
• マウスが動くようになる
• メモリ管理ができるようになる
http://hrb.osask.jp/figures.html
OS自作入門:三十日目
• 32ビット、マルチタスク、
ウィンドウシステム、JPGデコーダ
http://hrb.osask.jp/figures.html
その後の進路はいろいろ1
• OSの機能を拡張していく
• 高機能なシェル
• タスク間通信
• UEFI起動に対応
• OSの理論を勉強する
• ページング、仮想記憶
• mutex、共有メモリ
• ファイルシステム
ウィンドウサイズが
変えられなくて辛い
その後の進路はいろいろ2
• いろんな言語で再実装する
• C/C++/D/Rust/C#など
• 他のアーキテクチャへの移植
• 2006年当時、いち早くC++化に成功したブログ記事
• 自作OSもくもく会では
Rustでの再実装を試みる人がいたり。
「はりぼてOSでC++言語を使いたい」
http://d.hatena.ne.jp/Bayside/20060518/p1
その後の進路はいろいろ3
• デバイスドライバを充実させる
• ディスク読み書き
• ネットワークドライバ
• USB機器の制御
• グラフィックボード
• 既存OSのドライバの移植 http://yourdriversdownload.blogspot.jp/2011/12/
realtek-rtl8139-family-pci-fast.html
OS本体の製作の参考書
• 『30日でできる! OS自作入門』川合 秀実
• 『12ステップで作る組込みOS自作入門』坂井 弘亮
• 『オペレーティングシステム 第3版 設計と実
装』Andrew S. Tanenbaum
• 『はじめて読む486』蒲地輝尚
• 『Intel 64 and IA-32 Architectures Software
Developer’s Manual』Intel Corporation
• 『Microsoft Extensible Firmware Initiative FAT32 File
System Specification』Microsoft Corporation
• 『詳解 Linuxカーネル 第3版』Daniel P. Bovet, Marco
Cesati
• 『リンカ・ローダ実践開発テクニック』坂井 弘亮
ドライバ製作の参考書
• 『パソコンのレガシィI/O活用大全』桑野 雅彦
• Web 版 http://www.cqpub.co.jp/column/books/2001a/34331PC_Legacy/
• 『組み込み機器へのUSBホスト実装技法』イン
ターフェース編集部
• 『PCIバス&PCI‐Xバスの徹底研究』インターフェー
ス編集部
• 『Ethernetのしくみとハードウェア設計技法』イン
ターフェース編集部
• 『Serial ATA AHCI: Specification, Rev. 1.3.1』Intel
Corporation
• 『PCI Specification, Revision 3.0』PCI-SIG
クラウド時代のOS 1/4
• クラウド環境が流行ってきた
• →仮想マシン,コンテナが多用される
• →これらを効率よく動かしたい!
Linux
OS1 OS2
アプリ1 アプリ2
スケジューリング
スケジューリング
ハードウェア
QEMU QEMU
無駄
LinuxのKVM機能を使って複数のゲストOSを動かす例
…
クラウド時代のOS 2/4
• アプリ1つにつき,OSを1つ
• OSを「ライブラリ」として考える
• OSv
Linux
OSv OSv
アプリ1 アプリ2
スケジューリング
ハードウェア
QEMU QEMU
LinuxのKVM機能を使って複数のゲストOSを動かす例
OSv
アプリ3
QEMU
スケジューリング
効率的
クラウド時代のOS 3/4
• 必ずVMM(ハイパーバイザ)上で動かす
• →ネットワーク,ディスク等があれば十分
• →ほとんどのドライバが不要!
• USB機器
• ディスプレイ
• その他さまざまなドライバ
• クラウド専用OSは求められる機能が少ない
= 作るのが(比較的)楽
クラウド時代のOS 4/4
• 1台のマシンのI/Oには上限がある
• クラウドにはたくさんのマシンがある
• →複数台のマシンのI/Oが透過的に使えたら
柔軟なリソース活用が可能
• LegoOS
https://www.usenix.org/sites/default/files/conference/
protected-files/osdi18_slides_shan.pdf
現代のOSの研究
• 2000年代は「サーバOS=Linux」
• クラウド全盛になり,Linux一強でもなくなっ
てきた
• http://raphine.hatenablog.com/entry/2018/11/02/195815
• livaさん(東大のOS系の研究室の博士学生)
による興味深い論文のまとめ
• OS系の論文探しの取っ掛かりとして有用
Appendix
日本のOS自作の歴史
日本のOS自作の歴史
1992 - 1994
第1期自作OSブーム
BTRON系がメイン
BTRON386
B-Free OS
主にここから引用
http://osask.net/w/197.html
2000 -
第2期自作OSブーム
OSASKが初リリース
1994年3月14日
Linux 1.0.0
OSASK
• 川合さんが主担当
• 100KB以下の極小
OSイメージ
• ウィンドウシステム
• プリエンプティブ・
マルチタスク
2002/06/18 2chに伝説のスレが立つ
Mona OSが初リリース2002
NWSOS, MEG-OSリリース2002
@uchan_nos
OSASKを知る
2002?
2003
第2期ブーム最盛期
osdev-jというWikiが発足
→のちのdev-j
派生してOS-Wikiが発足
OS-Wiki http://community.osdev.info/ より
2005
第2期ブーム終焉
dev-j界が徐々に停滞
OSASKリリース停滞
NWSOS開発終了
MEG-OS中断
→おれんじぺこになるも、
それも開発終了
2005
第2期ブーム終焉
dev-j界が徐々に停滞
OSASKリリース停滞
NWSOS開発終了
MEG-OS中断
→おれんじぺこになるも、
それも開発終了
2006
第3期自作OSブーム
『 30日でできる!
OS自作入門』出版
はりぼて友の会結成
2007 はりぼて友の会
@IT に取材される
http://jibun.atmarkit.co.jp/lcom01/rensai/comtan02/comtan01.html
2008
第4期自作OSブーム
OSASK-HB内部リリース
おれんじぺこリリース再開
NWSOS開発再開(宣言)
2007 Mona OS開発停滞
→2002年までに誕生した
古参のOSプロジェクト
は壊滅状態に。
2007 はりぼて友の会活動停滞
2009 OSASK一般公開停止
2016 osdev-jp結成
自作OSもくもく会が始動
第5期自作OSブームへ
2013 KたんがOSASKコミュニティ
へ復帰
2012 OSECPU-VM開発開始
OS自作関係の3人が
偶然出会ってしまった
セキュリティ・キャンプ
全国大会2019
セキュリティキャンプ
• 第一線で活躍する講師が
• 全国から集まった学生に
• セキュリティとプログラミングを教育する
• 公式サイト
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_index.html
• セキュリティキャンプ全国大会
• 8/13(火)~8/17 (土)
セキュリティキャンプ
• 第一線で活躍する講師が
• 全国から集まった学生に
• セキュリティとプログラミングを教育する
• 公式サイト
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_index.html
• セキュリティキャンプ全国大会
• 8/13(火)~8/17 (土)
・宿泊費
・交通費
・食費
すべて支給!
システムプログラミング
トラック
• セキュリティキャンプ全国大会
• 選択コース
• 集中開発コース
• システム プログラミング トラック
• OS開発ゼミ
• Cコンパイラを自作してみよう!ゼミ
OS開発ゼミ
• フルスクラッチOSを書こう!
• 最先端OS談義
• Linux開発者を目指そう!
• Raspberry Pi向け組み込みOSを作ろう!
x86やRaspberry向けの
OSを開発します
定員8人
是非応募してね!
• 応募締め切り:5/27(月)16:00
• 「僕なんて無理だよ…」と遠慮せずに!
• 熱意が伝わる応募書類ならチャンスあります
• (応募しないと絶対に受かりませんし)

30分で分かる!OSの作り方 ver.2