Architecture Overview of Fuchsia OS

Architecture Overview of Fuchsia OS

2ddbd112dbc8c6572fe79821584c1465?s=128

Kurun

June 06, 2020
Tweet

Transcript

  1. Architecture Overview of Fuchsia OS Kernel/VM探検隊online part1 2020/06/06 @kurun_pan

  2. @kurun_pan Software Engineer @Sony ♪ This LT and contents are

    a personal activity (a hobby) ! ♪ Kurun / くるん About me
  3. Agenda n 本日、Fuchsiaを話すことにした背景 n Fuchsiaとは n Fuchsiaアーキテクチャ概要 n Kernel (Zircon)

    概要 n 時間が余れば (多分余らない) 、その他 'VDITJBʹ͍ͭͯ͸ɺ͋͘·Ͱ΋ૉਓͰ͢ɻ ͦͷͨΊɺؒҧͬͨ಺༰ؚ͕·Ε͍ͯΔ͔΋͠Ε·ͤΜɻ
  4. 「FuchsiaでFlutterアプリを動かす︕」 ※GW休み中の⾃由研究 (趣味) Background / Everything started from here Fuchsia

    on Intel® NUC mini PC (ຊ౰͸ARM64؀ڥͰ΍Γ͔ͨͬͨ…)
  5. Flutter?

  6. About Flutter n UI Framework (Google OSS) n クロスプラットフォーム n

    UIやアニメーションなど簡単に作成可能 n 開発言語はDart (宣言型プログラミング) n ホットリロード機能 n 独自レンダラ&GPUで高速描画 ü 非常にブラウザのレンダリングフローに似ている など
  7. Fuchsia?

  8. n Google OSS for IoT ? ü Pink + Purple

    = Fuchsia (a new Operating System) n Supported Hardware ü Modern or High-Performance SoC ü ARM 64bit ü Intel 64bit n Kernel ü Zircon (MicroKernel based on Little Kernel) n Graphics (If needed) ü Flutter ü Scenic (Graphics Engine) n Programming Languages ü Kernel: C/C++ ü System/Framework: C++, Rust, Dart ü App: C/C++, Rust, Dart, Go, etc. About Fuchsia Zircon targets modern phones and modern personal computers with fast processors, non-trivial amounts of ram with arbitrary peripherals doing open ended computation. Google Nest Hub Google Nest Wifi ← Fuchsia?
  9. Screenshot of Fuchsia Bootloader (EFI) Shell Scenic sample app Flutter

    sample app CPPU
  10. Fuchsia Architecture

  11. 'SBNFXPSL (BSOFU Fuchsia Architecture ;JSDPO )BSEXBSF ,FSOFM DPNQPOFOU@NBOBHFS (JHBCPPU Y

    6#PPU BBSDI #PPUMPBEFS TFTTJPO@NBOBHFS CBTFNHS GTIPTU ESJWFS@NBOBHFS EFWGT 5PQB[ 6TFS"QQT WDPNQPOFOU *ODMVEFEJOCPPUGT BQQNHS TZTNHS WDPNQPOFOU QPXFS@NBOBHFS UFSNJOBM UJNF[POF XBZMBOE TTIE VOBNF IUUQ EIDQE WJN TDFOJD ʜ EBSU qVUUFS 4ZTUFN /FUXPSL (SBQIJDT .FEJBFUD 'MVUUFS%BSUSVOUJNF 4ZTUFN
  12. Fuchsia Package System n パッケージフォーマット ü far (Fuchsia ARchive) Ø

    Androidのapkとは異なり、zip互換ではなさそう… n アプリケーション ü コンポーネントと呼ばれる単位 (プロセス) で管理 ü 各アプリはURLを持つ Ø 例. fuchsia-pkg://fuchsia.com/flutter_helloworld#meta/flutter_helloworld.cmx ü AndroidアプリのようなMeta (Manifest) ファイル Ø Component manifests file (.cmx)
  13. Sandboxing n 各アプリ (コンポーネント) は、サンドボックス (コンテナ) 化 n アプリ毎にnamespaceを定義し、他から隔離される ü

    そういう意味でグローバルなrootはない n 必要なCapability等は、Manifestに記載 n 他アプリとの通信やシステムサービスの利用には、FIDL (後述) を利用
  14. FIDL (Fuchsia Interface Definition Language) n Fuchsia Frameworkが提供する、IPC用途のIDL (インタフェース定義言語) ü

    gRPCの様なイメージ n 基本、Fuchsia OS上で動作するアプリのインターフェース標準 ü プロセス間通信, システム系サービス, ファイルアクセスなどに必須
  15. Zircon (Kernel)

  16. Zircon ≠ Linux, MicroKernel https://fuchsia.dev/fuchsia-src/concepts#fuchsia_is_not_based_on_linux

  17. n POSIX 非互換 ü 完全独自APIのため、fork/exec/open/write/read/ioctl等なし ü ただし、libcは提供されている Ø ファイル操作系はlibfdioのリンクが必要 Ø

    forkなし, pthreadは一部機能が未サポートなど、出来る範囲の対応の様子 Ø https://fuchsia.dev/fuchsia-src/concepts/system/libc n Kernel objects ü Zirconは以下のようなカーネルオブジェクトを管理 Ø IPC p Channel, Socket, FIFO Ø Signal p Event, Event Pair, Futex Ø Task p Process, Thread, Job, Task など ü Userlandのプログラムは、システムコールを経由してカーネルオブジェクトのHandleを取 得し、カーネル機能を利用 Zircon / System call
  18. n IoT等の機器で最近必要とされることがあるHypervisor機能を搭載済み ü ソースコード Ø https://fuchsia.googlesource.com/fuchsia/+/master/zircon/kernel/hypervisor/ ü LinuxのKVMに近い雰囲気 Ø 以下のAPIを利用し、シンプルなベアメタルコードなら簡単に動かせそう

    ü 既にLinux Runnerあり n Hypervisor-related APIs ü Hypervisor guests ü Virtual CPUs ü Virtual Memory Objects Zircon / Hypervisor (VFTU 7$16 7.0
  19. Others (If we have any time left)

  20. n Kernelは、ファイル システムを持たない n 代わりに、Userland側に存在 n アプリケーション毎に独自のファイルシステム (Root) を持つ ü

    サンドボックス化されるため ü クライアントは、FIDLを利用してファイルサーバーにリクエストを投げること で、ファイルを操作 Zircon / File System
  21. n Source code ü https://fuchsia.googlesource.com/fuchsia/+/master/zircon n Little Kernelとの違い ü ソースコードを見ると、Little

    Kernelの面影は全く無い Ø Little Kernel: 組み込みむけの小規模 p https://github.com/littlekernel/lk ü CPUは64bit のみサポート (LKは32bitのみ) ü MMU必須 ü プロセスの概念 ü 多くのシステムコール etc Zircon vs Little Kernel
  22. Graphics n Scenic (シーニック) ü Graphics Engine ü Webブラウザのレンダリングエンジン の様に、ツリー構造で管理

    n Escher (エッシャー) ü Renderer Ø Skiaじゃないんだ… ü Vulkanのみサポート
  23. Build & Develop System n Build Tool ü GN +

    ninja n インテグレーションツール ü Jiri Ø ソースコード取得, git repoとのsyncなど n SDK (Tool) ü fxコマンド ü ビルドやターゲットデバイスのshellへ のアクセスなど各種操作が可能 n Emulator ü 以下のエミュレータをSDKに同梱 Ø QEMU Ø FEMU (実態はAndroidエミュレータ) 'VDITJBPO2&.6
  24. Booting n ZBI (Zircon Boot Image) ü Bootladerが扱う、Kernelとデータのイ メージフォーマット n

    カーネルは、userbootを実行 n userbootがbootfsを解凍し、ファイル システムからbootsvcを見つけ、実行 ü bootfsはLZ4形式 n bootsvcは、Userlandの最初のプログラ ムを実行 ü デフォルトはcomponent_manager (JHBCPPU 6#PPU ;FECPPU ;#* VTFSCPPU CPPUTWD CPPUGT CPPU DPNQPOFOU@NBOBHFS
  25. Thank you!☺