エミュレーションを使用すると、Arm で Windows アプリの豊富なエコシステムを利用できるため、アプリに変更を加えることなく、関心のあるアプリを実行できます。 エミュレーションは透過的であり、Windows の一部です。追加のコンポーネントをインストールする必要はありません。
Arm 上の Windows 11 では、x86 アプリと x64 アプリの両方のエミュレーションがサポートされています。 Windows 11 24H2 に新しいエミュレーター Prism が導入され、パフォーマンスが向上します。 Arm 上の Windows 10 ではエミュレーションもサポートされていますが、x86 アプリの場合のみサポートされます。
Prism
Prism は、Windows 11 24H2 に含まれる新しいエミュレーターです。 Windows に含まれていた以前のエミュレーション テクノロジと比較して、パフォーマンスを向上させ、エミュレーション下のアプリの CPU 使用率を低くする大幅な最適化が含まれています。
Prism は、Qualcomm Snapdragon プロセッサ専用に最適化およびチューニングされています。 Prism 内の一部のパフォーマンス機能では、Snapdragon X シリーズでのみ使用できるハードウェア機能が必要ですが、Prism は、Windows 11 24H2 を搭載した Arm デバイスでサポートされているすべての Windows 11 で使用できます。
エミュレーションのしくみ
エミュレーションはソフトウェア シミュレーターとして機能し、x86 命令のブロックを Arm64 命令にジャストインタイムコンパイルし、出力される Arm64 コードのパフォーマンスを向上させるための最適化を行います。
これらの変換されたコード ブロックをキャッシュして、コードが再度実行されたときに命令変換のオーバーヘッドを削減し最適化できるようにするサービスがあります。 キャッシュはモジュールごとに生成されるため、他のアプリで最初の起動時から使用できます。
x86 アプリの場合、Windows の WOW64 レイヤーでは、x86 コードを Windows の x64 バージョンで実行できるようにするのと同様に、x86 コードを Windows の Arm64 バージョンで実行できます。 つまり、Arm 上の x86 アプリは、ファイルシステムとレジストリのリダイレクトで保護されます。
x64 アプリの場合、WOW64 レイヤーはなく、Windows システム バイナリの個別のレジストリまたはフォルダーもありません。 代わりに、システム バイナリは Arm64X PE ファイルとしてコンパイルされます ファイルシステムのリダイレクトを必要とせずに、同じ場所から x64 と Arm64 の両方のプロセスに読み込むことができます。 つまり、x64 アプリケーションは、特別なコードを必要とせずに、ファイルシステムとレジストリの両方で OS 全体にアクセスできます。
エミュレーションではユーザー モード コードのみがサポートされ、ドライバーはサポートされません。 カーネル モード コンポーネントは、Arm64 としてコンパイルする必要があります。
エミュレーションの検出
x86 または x64 アプリは、Arm PC 上の Windows 上で実行されていることを認識しません。ただし、 IsWoW64Process2 などの Arm64 ホストの知識を伝えるために設計された特定の API を呼び出す場合を除きます。 エミュレーションの下で、メタデータや機能などのプロセッサの詳細を照会するアプリは、エミュレートされた仮想プロセッサに対応する詳細を受け取ります。 互換性上の理由から、API GetNativeSystemInfo は、エミュレーションでアプリから実行すると、エミュレートされたプロセッサの詳細も返します。
オペレーティング システムのエミュレーション機能を検出するアプリの場合は、API GetMachineTypeAttributes を使用します。
Arm バージョンのアプリをサポートするための更新
Arm デバイスでエミュレーションを使用してアプリを実行することは、開始するのに最適な場所ですが、Arm サポートを追加するためにリビルドするときに、ネイティブパフォーマンスの向上と Arm 搭載デバイスの固有の特性からアプリの利点が得られます。
Arm バージョンのアプリを作成する方法と、関連する利点、課題、ツール オプションのガイダンスについては、「 Windows アプリに Arm サポートを追加する」を参照してください。 この記事では、Arm バージョンのアプリと関連する依存関係を作成するための使用可能なサポートについても説明します。
Windows on Arm