Successfully reported this slideshow.

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

550 views

Published on

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

Published in: Software
  • Be the first to comment

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

  1. 1. レガシーフリーOS に必要な要素技術 「はりぼてOS」との違い 2019/11/23 OSC Tokyo/Fall @uchan_nos
  2. 2. 自己紹介 • 内田公太 @uchan_nos • サイボウズ株式会社 SREチーム • 東京工業大学 特任助教 • 自作OSもくもく会コアメンバー • 『30日でできる! OS自作入門』 の校正を担当 • 『自作エミュレータで学ぶ x86アーキテクチャ』の著者 305 でブース展示中
  3. 3. MikanOS • 2017年から作っているレガシーフリーOS • 教育用OS • 大学などの講義で採用たらいいなあ • レガシーフリー • UEFI,64bit,USBマウス,Local APICタイマー • https://github.com/uchan-nos/mikanos
  4. 4. MikanOSデモ
  5. 5. xHCIに苦戦 2017年夏 ~ 2018年夏 https://twitter.com/uchan_nos/status/1143512289741398019?s=20 https://twitter.com/uchan_nos/status/895420177776467968?s=20
  6. 6. レイヤー の導入 https://twitter.com/uchan_nos/status/1153654947671494656?s=20
  7. 7. ウィンドウ とタイマー https://twitter.com/uchan_nos/status/1166562041945120768?s=20
  8. 8. アクティブ ウィンドウ https://twitter.com/uchan_nos/status/1174314614202363905?s=20
  9. 9. cat & ls https://twitter.com/uchan_nos/status/1183936387277410306?s=20
  10. 10. Paging & Application https://twitter.com/uchan_nos/status/1192614799370153984
  11. 11. OSとは • Operating System Microsoft Windows 10 のスクリーンショット
  12. 12. 有名な 自作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
  13. 13. 自作OSはほぼすべてレガシー • 2000年代に作られた自作OS群はほとんどレガ シーなハードウェア前提 • MITのxv6も例外ではない • 今「OS自作」を始める人も大体レガシーOSか ら始める • 有名な教科書「30日でできる!OS自作入門」が解 説するのがレガシーOSだから
  14. 14. はりぼてOSの構成要素 機能名 規格 BIOS レガシー 記憶装置 フロッピーディスク CPUアーキテクチャ x86 (32 ビットモード) 割り込み PIC (Intel 8259A) キーボード・マウス KBC (Intel 8042) メモリ管理 セグメンテーション タイマー PIT (Intel 8254) システムコール INT命令
  15. 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. 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. 17. 有名な 自作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実機で 起動しなくなる!
  18. 18. osdev-jp の紹介 • http://osdev.jp/ • 自作OS,低レイヤ技術のコミュ • 強力な人々が在籍 • x86-64の仕様に詳しい人 • USB(xHCI)の仕様に詳しい人 • マルチコアを制御して遊んでる人 • RustでOS書いてる人 • x86-64,USB(xHCI)の詳しさに関 しては日本一なのではないか?
  19. 19. セキュリティキャンプの紹介 • 第一線で活躍する講師が • 全国から集まった学生に • セキュリティとプログラミングを教育する • 宿泊費&交通費&食費 すべて支給のイベント • 全国大会2019の公式サイト https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_index.html
  20. 20. OS開発ゼミ • フルスクラッチOSを書こう! • 最先端OS談義 • Linux開発者を目指そう! • Raspberry Pi向け組み込みOSを作ろう! x86-64やRaspberry向け のOSを開発します 定員8人程度
  21. 21. レガシーフリー • 機能の動的な検出(PnP)ができる • レガシーデバイスは検出不能なものもある • 0x3F8にCOMポートがある「はず」 • 省電力モードをサポートする • 現行バス規格に準拠 • Intel 8042(PS/2接続KBC)はISA • xHCI(USBホスト)はPCI
  22. 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. 23. UEFI BIOS • UEFI仕様を満たしたBIOS • BIOSの世界に仕様がある… 幸せ! • UEFIアプリ=PEバイナリ • アプリにサイズ制限はない • レガシーBIOSでは最大512バイト • アプリをC言語で作れる • 始めから64ビットモードで起動する • ビット遷移処理を書かなくて済む
  24. 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
  25. 25. x86-64 64ビットモード • 64ビット化だけなら難しいことはあまり無い • コンパイラが適切な機械語を出してくれる • 64ビットモードでは4階層ページング必須 • セグメンテーションがほぼ廃止 • タスク切り替えに伴うレジスタ保存・復帰は自 動化されなくなった
  26. 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. 27. ACPI Advanced Configuration and Power Interface • 各種デバイスの設定,電源制御の規格 • デバイスの種類,レジスタのアドレス • ACPI PMタイマーやHPETの存在確認,レジスタ位置 の取得など • 電源断,スリープモードへの移行 • レガシーフリーを謳うならACPI対応は必須
  28. 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. 29. USB: Universal Serial Bus • パソコンがUSBホスト • デバイスがUSBターゲット • USBはターゲット側が楽なように作られてる • ホスト側がめっちゃ大変 • マウスとキーボードだけのしょぼい実装で3300行 • OHCI/UHCI,EHCI,xHCI • xHCIはUSB1.1,2.0,3.xに対応。
  30. 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. 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. 32. MSI: Message Signaled Interrupt • CPUに割り込みを通知する方法の一種 • PCIバスの標準機能 • 従来:INTxピンの信号変化で割り込み • IO APICを経由しLocal APICに通知 • MSI:メモリ書き込みサイクルで割り込み • Local APICに直接通知 • IO APICを知らなくて良い。楽。
  33. 33. MSI: Message Signaled Interrupt ハードウェア CPU IO APIC Local APIC バス MSI割り込み メモリ書き込み サイクルにより 割り込む #INTxの信号変化 により割り込む #INTx割り込み
  34. 34. PCIバス • 現代のパソコンの中核を担うバス規格 • PCI: パラレルバス規格 • PCIe: シリアルバス規格 • 現代の主流。PCIとソフトウェア互換。 • xHCIはPCIで接続する前提の規格
  35. 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編集部

×
Save this presentation