Open2

Screeps OS構想

みつよしみつよし

経緯

前バージョンのOSはProcess管理と標準入出力が主な機能で、構造面がふんわりしていたり実質的なDriverである機能の仕様がなかったりOSが担うべきCPU時間管理が行われていなかったりした


今バージョンの目的

  • 階層ごとの機能と責任範囲の明確化
  • botの実装しやすさ
  • 今後のバージョンアップのしやすさ
みつよしみつよし

構造

プラットフォームの上にOSが載ってその上にbotが載っている
botはDriver群とその上に乗るProcessから成る

OS

OSはプラットフォーム(Screeps)アーキテクチャから独立して稼働するのが理想だが、OSの役割にScreepsアーキテクチャの管理が入っているため完全には独立していない
固有の構造である同期実行・離散時間、CPU時間管理、Memory使用量管理がOSに組み込まれている

またTypeScriptによる実装上の制約がある

SystemCall

OS機能をProcess, Driver, 他のSystemCallから利用するための関数
Botから独立して動作する

DriverFamily

実オブジェクトの仮想化とBotの認知を司る
Botの仕組みに依存して必要な仮想化手法が変わるため、DriverFamilyという単位でまとめて管理する

Process

処理をまとめた単位
階層構造をもつ
大抵は特定のDriverFamilyの存在を前提にする

Process間通信

  • 親子間
    • 共有メモリ
      • 同じ木のProcessの間でインスタンスを共有する
    • メソッド呼び出し
      • 親Processが子Processのメソッドを呼び出す
    • 引数
      • 親Processが子Processの実行時に引数を渡す
  • 任意の対象
    • メッセージング
      • Process IDを使用し、OSを介して文字列のメッセージを渡す

Processの種類

  • Application Process
    • 最上位Process
    • 他のProcessと機能上の差異はない
  • 一般的なProcess

Discussion

  • CPU時間やMemoryなどはOSが管理する、ということは複数のOSを同時に起動することはできない
    • →実世界のマイグレーションなどでは旧OSのブリッジをするなどの対応が必要