レガシーフリーOSに必要な要素技術 legacy free os

1K Views

November 24, 19

スライド概要

UEFI BIOSやACPI,APIC,USBなどのレガシーフリーデバイスに対応したレガシーフリーOSを作成するのに必要な要素技術を解説。OpenSource Conference 2019 tokyo fall

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

レガシーフリーOS に必要な要素技術 「はりぼてOS」との違い 2019/11/23 OSC Tokyo/Fall @uchan_nos

2.

自己紹介 • 内田公太 @uchan_nos • サイボウズ株式会社 SREチーム • 東京工業大学 特任助教 • 自作OSもくもく会コアメンバー • 『30日でできる! OS自作入門』 の校正を担当 • 『自作エミュレータで学ぶ x86アーキテクチャ』の著者 305 でブース展示中

3.

MikanOS • 2017年から作っているレガシーフリーOS • 教育用OS • 大学などの講義で採用たらいいなあ • レガシーフリー • UEFI,64bit,USBマウス,Local APICタイマー • https://github.com/uchan-nos/mikanos

4.

MikanOSデモ

5.

xHCIに苦戦 https://twitter.com/uchan_nos/status/895420177776467968?s=20 2017年夏 ~ 2018年夏 https://twitter.com/uchan_nos/status/1143512289741398019?s=20

6.

レイヤー の導入 https://twitter.com/uchan_nos/status/1153654947671494656?s=20

7.

ウィンドウ とタイマー https://twitter.com/uchan_nos/status/1166562041945120768?s=20

8.

アクティブ ウィンドウ https://twitter.com/uchan_nos/status/1174314614202363905?s=20

9.

cat & ls https://twitter.com/uchan_nos/status/1183936387277410306?s=20

10.

Paging & Application https://twitter.com/uchan_nos/status/1192614799370153984

11.

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

12.

有名な 自作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

13.

自作OSはほぼすべてレガシー • 2000年代に作られた自作OS群はほとんどレガ シーなハードウェア前提 • MITのxv6も例外ではない • 今「OS自作」を始める人も大体レガシーOSか ら始める • 有名な教科書「30日でできる!OS自作入門」が解 説するのがレガシーOSだから

14.

はりぼてOSの構成要素 機能名 BIOS 記憶装置 CPUアーキテクチャ 割り込み キーボード・マウス メモリ管理 タイマー システムコール 規格 レガシー フロッピーディスク x86 (32 ビットモード) PIC (Intel 8259A) KBC (Intel 8042) セグメンテーション PIT (Intel 8254) INT命令

15.

レガシーOSが動かなくなる • 2020年、ついにIntelのx86でDOSが動作しなくなる ~UEFIからレガシーBIOS互換を削除 • https://pc.watch.impress.co.jp/docs/news/1092273.html • 現代のパソコンのBIOS:UEFI BIOS • UEFIのCSM (Compatibility Support Module)により, レガシーBIOS互換環境が提供されていた • 2020年以降,CSMが消え去る

16.

レガシーOSが動かなくなる • 現代における自作OSの難しさ 〜自作OSのいまと昔 • https://knowledge.sakura.ad.jp/22963/ • 自作OS環境を取り巻く変化を紹介 • BIOS: レガシー → UEFI • CPU: シングルコア → マルチコア • 命令セット: x86 → x86-64 • 入力: PS/2 → USB HID • タイマー: PIT → Local APICタイマー,HPET

17.

有名な 自作OSたち OSASK 実機で はりぼてOS 起動しなくなる! 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

18.

osdev-jp の紹介 • http://osdev.jp/ • 自作OS,低レイヤ技術のコミュ • 強力な人々が在籍 • • • • x86-64の仕様に詳しい人 USB(xHCI)の仕様に詳しい人 マルチコアを制御して遊んでる人 RustでOS書いてる人 • x86-64,USB(xHCI)の詳しさに関 しては日本一なのではないか?

19.

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

20.

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

21.

レガシーフリー • 機能の動的な検出(PnP)ができる • レガシーデバイスは検出不能なものもある • 0x3F8にCOMポートがある「はず」 • 省電力モードをサポートする • 現行バス規格に準拠 • Intel 8042(PS/2接続KBC)はISA • xHCI(USBホスト)はPCI

22.

MikanOSの構成要素 機能名 BIOS 記憶装置 CPUアーキテクチャ 割り込み キーボード・マウス メモリ管理 タイマー システムコール 旧規格 レガシ FD x86 PIC KBC segment PIT INT命令 レガシーフリー規格 UEFI USBメモリ x86-64 (64 ビットモード) APIC, MSI USB HID 4階層ページング Local APICタイマー 未定(多分syscall)

23.

UEFI BIOS • UEFI仕様を満たしたBIOS • BIOSの世界に仕様がある… 幸せ! • UEFIアプリ=PEバイナリ • アプリにサイズ制限はない • レガシーBIOSでは最大512バイト • アプリをC言語で作れる • 始めから64ビットモードで起動する • ビット遷移処理を書かなくて済む

24.

UEFIアプリの作り方 • EDK II で UEFI アプリケーションを作る • https://osdev-jp.readthedocs.io/ja/latest/2017/create-uefi-app-with-edk2.html • clang + lld でお手軽!UEFIアプリ開発 • https://docs.google.com/presentation/d/1ssu7KQEt1SMqizLlfiP6URZWMw1HTHtmHIhHRyW06w/edit?usp=sharing • gnu-efiでUEFI遊びをはじめよう • https://qiita.com/tnishinaga/items/40755f414557faf45dcb

25.

x86-64 64ビットモード • 64ビット化だけなら難しいことはあまり無い • コンパイラが適切な機械語を出してくれる • 64ビットモードでは4階層ページング必須 • セグメンテーションがほぼ廃止 • タスク切り替えに伴うレジスタ保存・復帰は自 動化されなくなった

26.

x86-64の参考資料 • Intel® 64 and IA-32 Architectures Software Developer’s Manual • https://software.intel.com/en-us/articles/intel-sdm • いわゆる”Intel SDM” • x86-64向けのOSを書くなら必携資料

27.

ACPI Advanced Configuration and Power Interface • 各種デバイスの設定,電源制御の規格 • デバイスの種類,レジスタのアドレス • ACPI PMタイマーやHPETの存在確認,レジスタ位置 の取得など • 電源断,スリープモードへの移行 • レガシーフリーを謳うならACPI対応は必須

28.

ACPIの参考資料 • ACPI Specification • https://uefi.org/specifications • ACPI規格書とっかかり教室 • https://booth.pm/ja/items/1577122 • ACPI規格の初心者向け解説本 • Local APICタイマー入門 • https://uchan.booth.pm/items/1319521 • ACPI PMタイマーの使い方

29.

USB: Universal Serial Bus • パソコンがUSBホスト • デバイスがUSBターゲット • USBはターゲット側が楽なように作られてる • ホスト側がめっちゃ大変 • マウスとキーボードだけのしょぼい実装で3300行 • OHCI/UHCI,EHCI,xHCI • xHCIはUSB1.1,2.0,3.xに対応。

30.

xHCIの参考資料 • USB 3.0 ホストドライバ自作入門 • https://uchan.booth.pm/items/1056355 • xHCIドライバの作り方を解説 クラスドライバ層 USB層 ホストコントローラ層 • xHCI for Universal Serial Bus: Specification • https://www.intel.co.jp/content/www/jp/ja/products/docs/io/universalserial-bus/extensible-host-controler-interface-usb-xhci.html • xHCIドライバを書くなら必携の書

31.

APIC Advanced Programmable Interrupt Controller • PITはマザボで1つ • APIC = IO APIC + Local APIC • IO APICはマザボで1つ • Local APICは各CPUコアに内蔵 • Intel SDMに説明がある http://editmax.eu/jak-sevyrabi-procesory-cpu/ • APICなら各コアに割り込みを分配できる

32.

MSI: Message Signaled Interrupt • CPUに割り込みを通知する方法の一種 • PCIバスの標準機能 • 従来:INTxピンの信号変化で割り込み • IO APICを経由しLocal APICに通知 • MSI:メモリ書き込みサイクルで割り込み • Local APICに直接通知 • IO APICを知らなくて良い。楽。

33.

MSI: Message Signaled Interrupt #INTx割り込み #INTxの信号変化 により割り込む MSI割り込み CPU Local APIC メモリ書き込み サイクルにより 割り込む バス IO APIC ハードウェア

34.

PCIバス • 現代のパソコンの中核を担うバス規格 • PCI: パラレルバス規格 • PCIe: シリアルバス規格 • 現代の主流。PCIとソフトウェア互換。 • xHCIはPCIで接続する前提の規格

35.

PCIバスの参考資料 • PCI Memo - osdev.jp • https://github.com/osdev-jp/osdevjp.github.io/wiki/PCI-Memo • PCIコンフィグレーション空間 • PCIデバイスの列挙方法 • PCIバス&PCI-Xバスの徹底研究 • CQ出版 Interface編集部