More Related Content
Similar to レガシーフリーOSに必要な要素技術 legacy free os (20)
レガシーフリーOSに必要な要素技術 legacy free os
- 2. 自己紹介
• 内田公太 @uchan_nos
• サイボウズ株式会社 SREチーム
• 東京工業大学 特任助教
• 自作OSもくもく会コアメンバー
• 『30日でできる! OS自作入門』
の校正を担当
• 『自作エミュレータで学ぶ
x86アーキテクチャ』の著者
305 でブース展示中
- 14. はりぼてOSの構成要素
機能名 規格
BIOS レガシー
記憶装置 フロッピーディスク
CPUアーキテクチャ x86 (32 ビットモード)
割り込み PIC (Intel 8259A)
キーボード・マウス KBC (Intel 8042)
メモリ管理 セグメンテーション
タイマー PIT (Intel 8254)
システムコール INT命令
- 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
- 18. osdev-jp の紹介
• http://osdev.jp/
• 自作OS,低レイヤ技術のコミュ
• 強力な人々が在籍
• x86-64の仕様に詳しい人
• USB(xHCI)の仕様に詳しい人
• マルチコアを制御して遊んでる人
• RustでOS書いてる人
• x86-64,USB(xHCI)の詳しさに関
しては日本一なのではないか?
- 22. MikanOSの構成要素
機能名 旧規格 レガシーフリー規格
BIOS レガシ UEFI
記憶装置 FD USBメモリ
CPUアーキテクチャ x86 x86-64 (64 ビットモード)
割り込み PIC APIC, MSI
キーボード・マウス KBC USB HID
メモリ管理 segment 4階層ページング
タイマー PIT Local APICタイマー
システムコール INT命令 未定(多分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/1ssu7KQEt1SMqizLlf-
iP6URZWMw1HTHtmHIhHRyW06w/edit?usp=sharing
• gnu-efiでUEFI遊びをはじめよう
• https://qiita.com/tnishinaga/items/40755f414557faf45dcb
- 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ドライバの作り方を解説
• xHCI for Universal Serial Bus: Specification
• https://www.intel.co.jp/content/www/jp/ja/products/docs/io/universal-
serial-bus/extensible-host-controler-interface-usb-xhci.html
• xHCIドライバを書くなら必携の書
ホストコントローラ層
USB層
クラスドライバ層
- 31. APIC
Advanced Programmable Interrupt Controller
• PITはマザボで1つ
• APIC = IO APIC + Local APIC
• IO APICはマザボで1つ
• Local APICは各CPUコアに内蔵
• Intel SDMに説明がある
• APICなら各コアに割り込みを分配できる
http://editmax.eu/jak-se-
vyrabi-procesory-cpu/
- 32. MSI: Message Signaled Interrupt
• CPUに割り込みを通知する方法の一種
• PCIバスの標準機能
• 従来:INTxピンの信号変化で割り込み
• IO APICを経由しLocal APICに通知
• MSI:メモリ書き込みサイクルで割り込み
• Local APICに直接通知
• IO APICを知らなくて良い。楽。
- 33. MSI: Message Signaled Interrupt
ハードウェア
CPU
IO APIC
Local APIC
バス
MSI割り込み
メモリ書き込み
サイクルにより
割り込む
#INTxの信号変化
により割り込む
#INTx割り込み
- 35. PCIバスの参考資料
• PCI Memo - osdev.jp
• https://github.com/osdev-jp/osdev-
jp.github.io/wiki/PCI-Memo
• PCIコンフィグレーション空間
• PCIデバイスの列挙方法
• PCIバス&PCI-Xバスの徹底研究
• CQ出版 Interface編集部