2

私はみどりを読んでいて、これが可能かどうかちょっと疑問に思い始めました。

マネージドOSでは、「マネージコード」はネイティブになり、「ネイティブコード」は...エイリアンになりますか?少なくとも理論的には、今日のネイティブコードをマネージドOSで実行することは可能ですか?

4

4 に答える 4

3

まず、「マネージド」と「ネイティブ」を定義することから始めます。Midori のような「マネージド」OS では、カーネルは IL から jit コンパイルされるのではなく、まだ ngen 化されています (マシンコードにプリコンパイルされています)。したがって、「マネージド」と「ネイティブ」の違いとしてそれを除外します。

「マネージド」コードと「ネイティブ」コードの間には、他に 2 つの違いがあります。それは、コードの検証可能性とリソース管理です。

ほとんどの「ネイティブ」コードは検証できないため、「マネージド」OS ローダーは「ネイティブ」イメージのロードさえ拒否する場合があります。もちろん、検証可能な「ネイティブ」コードを生成することは可能ですが、それには多くの制限があり、本質的には「マネージド」コードと変わりません。

「マネージド」OS のリソースは、アプリではなく OS によって管理されます。「ネイティブ」コードは通常、そのリソースを割り当ててクリーンアップします。OS API によって割り当てられ、「ネイティブ」コードに与えられたリソースはどうなりますか? それともその逆?リソースの管理とクリーンアップをいつ誰が行うかについて、明確なルールが必要です。セキュリティ上の理由から、OS がプロセスの仮想メモリ以外のリソースに対して「ネイティブ」コードを直接制御することは想像できません。したがって、「ネイティブ」にする唯一の理由は、独自のメモリ管理を実装することです。

今日の「ネイティブ」コードは、上記のルールのいずれによっても再生されません。したがって、「管理された」OS は、それを直接実行することを拒否する必要があります。ただし、「マネージド」OS は、Hyper-V のような仮想化レイヤーを提供し、仮想マシンで「ネイティブ」コードをホストする場合があります。

于 2009-02-12T07:59:09.123 に答える
1

マネージとは、型の安全性、安全なメモリアクセスなどについてコードをチェックする環境でコードが実行されることを意味すると思います。ネイティブは、まあ、その逆です。この実行環境は、ネイティブ コードを検証せずに実行できるかどうかを決定します。このように見てください: OS と最上位のアプリケーションは両方とも、実行するために実行環境を必要とします。それらの唯一の関係は、最上位のアプリケーションが下位レベルのタスクのために基盤となる OS を呼び出しているが、OS を呼び出す際に実際に実行されていることです。実行環境 (たとえば、コードのコンパイルで渡されるオプションに応じて、コード検証をサポートする場合とサポートしない場合があります) と、制御が OS に転送されると、実行環境は再び OS コードの実行を担当します (この環境は、一緒に別の環境)、その場合、

したがって、理論的には、ネイティブ コードはマネージド OS で実行される場合と実行されない場合があります。それはすべて、実行中の実行環境の動作に依存します。OSが管理されているかどうかは、その上で動作するかどうかに影響しません.トップアプリケーションとOSの両方が同じ実行env(管理されている)の場合、ネイティブコードはOS上で動作しません.

于 2009-02-12T08:46:01.430 に答える
0

技術的には、ネイティブコードエミュレーターはマネージコードで記述できますが、ベアハードウェアでは実行されません。

共有リソース(Singularityなど)へのアクセスを分離するためにソフトウェア検証に依存するマネージドOSは、ソフトウェアによって提供されるすべての保護をバイパスできる可能性があるため、アンマネージドコードを直接実行できるとは思えません(通常のOSとは異なり、一部のマネージドOSはそうではありません)。ハードウェアによって提供される保護技術に依存します)。

于 2009-02-12T07:35:19.757 に答える
0

MS Research の論文Singularity: Rethinking the Software Stack (p9) から:

原則として、保護ドメインは、C++ などの安全でない言語で書かれた検証不可能なコードを含む単一のプロセスをホストできます。レガシ コードの実行には非常に便利ですが、この可能性についてはまだ調査していません。現在、保護ドメイン内のすべてのコードは SIP 内にも含まれており、分離と障害封じ込めの境界を提供し続けています。

そのため、現時点では調査されていませんが、明確な可能性があるようです。アンマネージ コードは、ハードウェアで保護されたドメインで実行できます。仮想メモリや TLB などを処理する必要があるため、パフォーマンスが低下しますが、システム全体としては、アンマネージ コードの実行中に不変条件を安全に維持できます。

于 2009-05-06T18:54:25.663 に答える