AUTOSAR（Adaptive 18.10）を読んでいく（5）

5章。今までに何回か単語が出ていたExecution Managementについて。

# Overview

Execution Managementはシステムの実行管理をするものであり、Applicationのランタイムスケジューリングを実現するために、OSと一緒に動作する。Execution Managementは以下の責務を持つ。

- プラットフォームの初期化
- アプリケーションの開始
- アプリケーションの終了

# System Sartup
システム開始時は以下の順序で動作する。

1. マシンの動作開始
2. OSの初期化
3. OS内部のプロセスとしてExecution Managementを立ち上げる
4. Execution ManagementがAdaptive Platform Foundationの上で動作するプラットフォームレベルの機能を立ち上げる
5. （4の機能が動作を開始したら、）Execution ManagementがAdaptive Applicationを立ち上げる

PlatformレベルのApplicationと、Adaptive Applicationの立ち上げ順序はExecution Managementで定義される（Machine ManifestとExecution Manifestの情報を基にする）

![image.L5ESSZ.png](https://qiita-image-store.s3.amazonaws.com/0/311680/2319e863-564e-47ed-36bd-e680987c0ed3.png)

# Execution Management Responsibilities

Execution Managementは、PlatformとApplicationの実行管理を責務とする（具体的には以下をする）。

- Platformのライフライクル管理
  1. Adaptive Platformのスタートアップ時に立ち上がる
  2. Adaptive Platformの初期化をする
  3. Applicationを起動できるようにする

- Applicationのライフサイクル管理

  1. 起動できるようになったApplicationのスタートアップとシャットダウンをする
  2. 起動できるようになったApplication間の依存関係に従って、Applicationの開始および終了をする（Machine ManifestとExecution Manifestの情報を基にする）

起動できるようになったApplicationはAdaptive Platformのスタートアップ以降のタイミングで開始される（マシンの状態とFunction Group Stateに依存）。ただし、すぐに動作が有効になるわけではない（多くの場合、特定のApplicationは他のApplicationが提供する何らかの機能必要とするので、準備ができるまで多少の待ちが必要となることが多いため）

Applicationのランタイムスケジューリングは、OSの責務とするためExecution Managementの責務外であるが、Execution ManagementはOSの初期化および設定に関して責務を負う。
（Machine ManifestやExecution ManifestからExecution Managementによって抽出された情報を基にして、OSがランタイムスケジューリングをするため）

# Deterministic Execution

Execution Managerは決定的な動作をする。つまり、固定された時間（多分、何らかの固定された周期時間と言いたい）にて、与えられたデータセットを使って計算した結果を出力する仕組みを提供する。同じ入力データかつ、同じ内部状態からは同じ出力が生成される。

Execution Managementが提供する仕組みはデータに関する決定的な動作にフォーカスしている。（時間に関する決定的な動作は十分なリソースによって提供されていると仮定する）
Execution Managementは、プロセスの内部サイクルを制御するために、DeterministicClient APIを提供する。

![hoge.png](https://qiita-image-store.s3.amazonaws.com/0/311680/3caa5eb5-68cd-82e5-7cb8-6d0e8be3d67f.png)

# Resource Limitation

Adaptive Platformは、同一マシン上で動作する複数のAdaptive Applicationへ実行環境を提供するとともに、Adaptive Applicationをシステムの障害から切り離す役割を持つ。したがって、他のAdaptive Applicationへ影響を及ぼすような不適切な振る舞い（例えば、想定以上のCPU時間の浪費）は、制限されるべきである。

Execution Managementは、アプリケーションのプロセッサが割り当てられている、1つ以上のResourceGroupのconfigurationを通して、インターフェースの制約から開放する。それぞれのResourceGroupはCPU時間やメモリなどの、アプリケーションが利用可能なりソースについて制限をかける。

# State Management

State Managementは、Adaptive Platformのオペレーション状態を定義する仕組みを提供する。State Managementは、実行される一連のApplicationに渡ってフルコントロールできる。また、必要なタイミングでプロセスに対してリソースが割り当てられ、実行されることを保証する。（ここの2文で言いたいことがよくわからない。。。）
Machine StateとFunction Group Stateは現在動作している一連のプロセスを定義する。それぞれのプロセスはmanifestにて、どのStateがActiveになるのかを定義する。

## Machine State

主に以下を制御するのに使われる。
1. マシンのライフサイクル（スタートアップ、シャットダウン、リスタート）
2. プラットフォームレベルのプロセス
3. その他のインフラ

これらには、それぞれのマシンごとに定義された、複数のMachine Stateに関する複数の命令がある。追加のマシン仕様であるMachine StateはMachine Manifestで定義されるはずである。

## Function Group State

User LevelのApplication Processグループの開始または終了に使われる。Machine Manifestにて設定可能である。

- Process State
    - Application Lifecycle Managementに使われる
    - Execution Management内部の状態機械によって実装される

- Execution State
    - ApplicationのExecutable（例えば、Process）のインスタンス内部のライフサイクル
    - 各プロセスは、実行状態の変化をExecution Managementに報告する必要がある。

![hoge.png](https://qiita-image-store.s3.amazonaws.com/0/311680/d776500c-ea81-1dc7-98fd-d151c6852aca.png)

# Application Recovery

Execution Managementは、プロセスの開始/終了の状態に依存した管理を行うことを責務とするため、Executiuon Managementは、プロセスの開始/終了に関する特別な権限を必要とする。PlatformのHealth ManagementはProcessを監視し、プロセスが仕様担い振る舞いをした場合に、リカバリアクションをトリガすることがある。リカバリアクションは、ソフトウエアアーキテクチャが必要とするに基づく積分器によって定義され、Platform Health ManagementやExecution Manifestによって設定される。


---
単調な英訳をしたいわけではないが、英語力に乏しいため仕方ないんやと割りきっている自分が悲しいが、今回はここまで。