だから、システムアーキテクチャの私の現在のビジョン。
1.モジュールとフローの2つの主要なエンティティがあります。
2.モジュールには、変更されていないコードと変更可能なデータが含まれています。
3.モジュールは永続的です。
最後の段落は、モジュールが常に存在することを示しています。 実際には、これは仮想メモリを介して実装する必要があります。 すなわち 現在使用されているモジュールのページはRAMにロードされ、未使用のページはディスクにダウンロードされます。 永続的なサポートはシステムレベルで行う必要があります。 アプリケーションプログラマに対して完全に透過的です。 これは、論理的に結論付けられたスワップと見なすことができます。モジュールをRAMにロードする必要がなくなると、「永遠の」スワップになり、要求に応じて自動的にロードされます。 つまり、ファイルシステムは不要になりました。
4.モジュールには、外部呼び出しに使用できる多くの外部プロシージャがあります。 モジュールデータは、外部プロシージャを介して間接的にのみ利用できます。
5.モジュールには、インスタンスUUID(ID)とタイプUUID(TID)があります。
6.モジュールをコピーすると、コピー用に新しいIDが生成されますが、古いTIDは保存されます。
7.モジュールは、グローバルネットワークのID、またはローカルホストのTIDで見つけることができます。
同じTIDのモジュールが複数ある場合でも、ローカルホスト上の各TIDに対応するモジュールは1つだけです。
8.スレッドは、モジュールIDと数値識別子によって外部プロシージャを呼び出すことができます。
9.スレッドは、同じホストにあるそのモジュールのTIDとその数値識別子によって外部プロシージャを呼び出すことができます。
大まかに言うと、モジュールを動的にロードされるライブラリとして使用するには、TIDが必要です。 実際、ホストには多くの同じコード(システムソフトウェア、コーデックなど)があり、それらへのアクセスは非常に効果的であり、リモートで使用する意味がありません。
マルチスレッド同期モデルになりました。
1.外部プロシージャへの呼び出しが同期されます。
2.外部プロシージャは、関数(fプロシージャ)、リーダー(rプロシージャ)、またはライター(wプロシージャ)です。 Fプロシージャはモジュールの変更可能なデータを使用せず、rプロシージャは変更可能なデータを読み取り、wプロシージャはそれらを変更します。
3.モジュールf-procedureの呼び出しは、ブロックせずに呼び出されます。
4.他のr-procedureがこのモジュールで既に呼び出されている場合、r-procedure呼び出しはブロックされません。
5.このモジュールでw-procedureがすでに呼び出されている場合、r-procedureおよびw-procedureの呼び出しはブロックされます。
6. r手続きとw手続きがブロックされている場合、最初の手続きがロック解除されると、w手続きが実行されます。
すなわち 作家のいない多くの読者がいることもあれば、作家が1人だけいることもあります。 ライターはリーダーよりも優先順位が高くなります。
上記の論文では、多くが欠落しています。 特に、セキュリティアーキテクチャは完全に存在しません。 残念ながら、まだ定式化できません。
以降の投稿では、仮想マシンの一般的なアーキテクチャと、プロジェクトの現在の状態までの実装の詳細について説明します。 ところで、現在の実装では、階乗およびクイックソートプログラムを実行できます。 時期尚早な好奇心のために、リポジトリへのリンクを提供します: github.com/ababo/AntOS-VM-Prototype