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

419 Views

May 06, 19

スライド概要

OS自作とは何なのか,どうやったら最初の一歩を踏み出せるのか,最新のOSの研究事情,自作OS界隈の歴史などを紹介します.

profile-image

サイボウズ・ラボ株式会社で教育向けのOSやCPU、コンパイラなどの研究開発をしています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

30分で分かる! OSの作り方 ver.2 2019/05/07 内田 公太 @uchan_nos

2.

自己紹介 1/2 • 内田公太 @uchan_nos • サイボウズ株式会社 SREチーム • 1000台規模の物理サーバの管理ツール群 • 顧客データのリアルタイムバックアップ • 障害監視、ログ収集 • 東京工業大学 特任助教 • 情報理工学院 情報工学系 • W8 E棟 8階 • 火曜日・金曜日 権藤研究室

3.

自己紹介 2/2 • 自作OSもくもく会コアメンバー • 『30日でできる! OS自作入門』 の校正を担当 • 『自作エミュレータで学ぶ x86アーキテクチャ』の著者

4.

OSとは • Operating System Microsoft Windows 10 のスクリーンショット

5.

OSとは • 定義はいろいろ • 「OSとは、ソフトウェアの 種類の一つで、機器の基本 的な管理や制御のための機 能や、多くのソフトウェア が共通して利用する基本的 な機能などを実装した、シ ステム全体を管理するソフ トウェア。」 http://e-words.jp/w/OS.html https://en.wikipedia.org/wiki/Operating_ system#/media/File:Kernel_Layout.svg

6.

OSとは • 『30日でできる! OS自作入門』の定義 結局のところ、それぞれの作者が 「これはOSなんだ」と言い張って、 周囲の人も「まあそうかな」と思 えばどんなソフトでもOSなんです。

7.

OS自作とは • ほかのOSの力を借りずに起動するソフトウェ ア(なんでもいい)を作ること • ハードウェアに近い世界 • → パソコンを支配する感覚 • → エキサイティング!

8.

Linuxと平成 • 1991(平成3)年8月25日 リーナス・トーバルズがLinuxの初版を公開 • 1993(平成5)年 Linuxカーネルに関わる開発者が100人を越えた •… • 2014(平成26)年 Ubuntuのユーザ数が2,200万と公表された • 2019(平成31)年3月5日 Linux 5.0正式リリース 日本の元号なんてリーナスには関係ないけど(笑)

9.

OS自作も一歩から 自作OSにおける “Hello World”

10.

有名な 自作OSたち はりぼてOS OSASK http://hrb.osask.jp/figures.html http://z-slash.net/os/osask/osask.png Mona OS https://a.fsdn.com/con/app/proj/monaos/screenshots/90657.jpg

11.

OS自作の方向性 • システムプログラミングを楽しむ • OS理論を学ぶ • 実用的なOSを作る • 既存OSを改良する

12.

システムプログラミング を楽しむ • 『 30日でできる!OS自作入門』の方向性 • 単純にOS作成を楽しむ=娯楽 • コンピュータのハードウェアを支配してる感じ で楽しい • CPUと戯れる • デバイスと戯れる • 低レイヤに詳しくなれる! http://cdn-ak.f.st-hatena.com/images/fotolife/r/rinie/20090409/20090409144532.jpg

13.

OS理論を学ぶ • 『オペレーティングシステム 第3版 設計と実装』などを読んだりする • メモリ管理、プロセス管理、ファイルシステム、 デバイスドライバの仕組みなどを学ぶ ページングによる メモリ管理の仕組み Intel 64 and IA-32 Architectures Software Developer’s Manual より引用

14.

実用的なOSを作る • 既存OSが移植されてないハードウェアのOS • 特定の処理のオーバーヘッドが小さいOS • 例:liva氏作の、Intel e1000ギガビットイーサに 対応したOS。Linuxより低遅延に通信できる。 • 一人で汎用かつ実用的なOSを作ることは現代 ではほぼ無理 • 汎用性を捨てれば活路がある →後で詳述

15.

既存OSを改良する • LinuxやFreeBSDなどを改造する • 現代において汎用かつ実用的なOSを目指すな らこの路線 • この発表でいう「OS自作」ではない

16.

OSを自作する方法 • 入門書を手に入れる • 取りあえずその通り作ってみる • 後は自由に改造したり知識を深めたり

17.

OSを自作する方法 • 入門書を手に入れる • 取りあえずその通り作ってみる • 後は自由に改造したり知識を深めたり たったの3ステップ!

18.

入門書を手に入れる 『30日でできる! OS自作入門』 から始めるのがおすすめ 30日後

19.

OS自作入門:一日目 • P.14「とにかくやるのだぁ」 • バイナリエディタだけで 1.4MBのFDイメージを作成

20.

OS自作入門:二日目 • p.29「まずはテキストエディタの紹介」 • テキストエディタがバイナリエディタの後 にくる書籍なんて聞いたことない!

21.

OS自作入門:四日目 • p.69「C言語と画面表示の練習」 • p.95でなんとなく「OS」らしき画面が! http://hrb.osask.jp/figures.html

22.

OS自作入門:八日目 • マウスが動くようになる • メモリ管理ができるようになる http://hrb.osask.jp/figures.html

23.

OS自作入門:三十日目 • 32ビット、マルチタスク、 ウィンドウシステム、JPGデコーダ http://hrb.osask.jp/figures.html

24.

その後の進路はいろいろ1 • OSの機能を拡張していく • 高機能なシェル • タスク間通信 • UEFI起動に対応 • OSの理論を勉強する • ページング、仮想記憶 • mutex、共有メモリ • ファイルシステム ウィンドウサイズが 変えられなくて辛い

25.

その後の進路はいろいろ2 • いろんな言語で再実装する • C/C++/D/Rust/C#など • 他のアーキテクチャへの移植 • 2006年当時、いち早くC++化に成功したブログ記事 「はりぼてOSでC++言語を使いたい」 http://d.hatena.ne.jp/Bayside/20060518/p1 • 自作OSもくもく会では Rustでの再実装を試みる人がいたり。

26.

その後の進路はいろいろ3 • デバイスドライバを充実させる • • • • • ディスク読み書き ネットワークドライバ USB機器の制御 グラフィックボード 既存OSのドライバの移植 http://yourdriversdownload.blogspot.jp/2011/12/ realtek-rtl8139-family-pci-fast.html

27.

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 • 『リンカ・ローダ実践開発テクニック』坂井 弘亮

28.

ドライバ製作の参考書 • 『パソコンのレガシィ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

29.

クラウド時代のOS 1/4 • クラウド環境が流行ってきた • →仮想マシン,コンテナが多用される • →これらを効率よく動かしたい! スケジューリング 無駄 スケジューリング アプリ1 アプリ2 … OS1 OS2 QEMU QEMU Linux ハードウェア LinuxのKVM機能を使って複数のゲストOSを動かす例

30.

クラウド時代のOS 2/4 • アプリ1つにつき,OSを1つ • OSを「ライブラリ」として考える • OSv スケジューリング 効率的 スケジューリング アプリ1 アプリ2 アプリ3 OSv OSv OSv QEMU QEMU QEMU Linux ハードウェア LinuxのKVM機能を使って複数のゲストOSを動かす例

31.

クラウド時代のOS 3/4 • 必ずVMM(ハイパーバイザ)上で動かす • →ネットワーク,ディスク等があれば十分 • →ほとんどのドライバが不要! • USB機器 • ディスプレイ • その他さまざまなドライバ • クラウド専用OSは求められる機能が少ない = 作るのが(比較的)楽

32.

クラウド時代のOS 4/4 • 1台のマシンのI/Oには上限がある • クラウドにはたくさんのマシンがある • →複数台のマシンのI/Oが透過的に使えたら 柔軟なリソース活用が可能 • LegoOS https://www.usenix.org/sites/default/files/conference/ protected-files/osdi18_slides_shan.pdf

33.

現代のOSの研究 • 2000年代は「サーバOS=Linux」 • クラウド全盛になり,Linux一強でもなくなっ てきた • http://raphine.hatenablog.com/entry/2018/11/02/195815 • livaさん(東大のOS系の研究室の博士学生) による興味深い論文のまとめ • OS系の論文探しの取っ掛かりとして有用

34.

Appendix 日本のOS自作の歴史

35.

日本のOS自作の歴史 1992 - 1994 第1期自作OSブーム 主にここから引用 http://osask.net/w/197.html BTRON系がメイン BTRON386 B-Free OS 1994年3月14日 Linux 1.0.0 2000 第2期自作OSブーム OSASKが初リリース

36.

OSASK • 川合さんが主担当 • 100KB以下の極小 OSイメージ • ウィンドウシステム • プリエンプティブ・ マルチタスク

37.

2002/06/18 2chに伝説のスレが立つ 2002 Mona OSが初リリース

38.

2002 NWSOS, MEG-OSリリース 2002? @uchan_nos OSASKを知る

39.

2003 第2期ブーム最盛期 osdev-jというWikiが発足 →のちのdev-j 派生してOS-Wikiが発足 OS-Wiki http://community.osdev.info/ より

40.

2005 第2期ブーム終焉 dev-j界が徐々に停滞 OSASKリリース停滞 NWSOS開発終了 MEG-OS中断 →おれんじぺこになるも、 それも開発終了

41.

2005 第2期ブーム終焉 dev-j界が徐々に停滞 OSASKリリース停滞 NWSOS開発終了 MEG-OS中断 →おれんじぺこになるも、 それも開発終了

42.

2006 第3期自作OSブーム 『 30日でできる! OS自作入門』出版 はりぼて友の会結成 2007 はりぼて友の会 @IT に取材される http://jibun.atmarkit.co.jp/lcom01/rensai/comtan02/comtan01.html

43.

2007 はりぼて友の会活動停滞 2007 Mona OS開発停滞 →2002年までに誕生した 古参のOSプロジェクト は壊滅状態に。 2008 第4期自作OSブーム OSASK-HB内部リリース おれんじぺこリリース再開 NWSOS開発再開(宣言) 2009 OSASK一般公開停止

44.

2012 OSECPU-VM開発開始 2013 KたんがOSASKコミュニティ へ復帰 OS自作関係の3人が 偶然出会ってしまった 2016 osdev-jp結成 自作OSもくもく会が始動 第5期自作OSブームへ

45.

セキュリティ・キャンプ 全国大会2019

46.

セキュリティキャンプ • 第一線で活躍する講師が • 全国から集まった学生に • セキュリティとプログラミングを教育する • 公式サイト https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_index.html • セキュリティキャンプ全国大会 • 8/13(火)~8/17 (土)

47.

セキュリティキャンプ • 第一線で活躍する講師が • 全国から集まった学生に • セキュリティとプログラミングを教育する • 公式サイト https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_index.html • セキュリティキャンプ全国大会 • 8/13(火)~8/17 (土) ・宿泊費 ・交通費 ・食費 すべて支給!

48.

システムプログラミング トラック • セキュリティキャンプ全国大会 • 選択コース • 集中開発コース • システム プログラミング トラック • OS開発ゼミ • Cコンパイラを自作してみよう!ゼミ

49.

OS開発ゼミ x86やRaspberry向けの OSを開発します 定員8人 • フルスクラッチOSを書こう! • 最先端OS談義 • Linux開発者を目指そう! • Raspberry Pi向け組み込みOSを作ろう!

50.

是非応募してね! • 応募締め切り:5/27(月)16:00 • 「僕なんて無理だよ…」と遠慮せずに! • 熱意が伝わる応募書類ならチャンスあります • (応募しないと絶対に受かりませんし)