アームベースのシステムから x86 ベースのシステムにプロセスを移行できるかどうかを知っている人はいますか? どちらもLinuxを実行していますが、問題はARMにあり、プロセスの状態はx86のものとは異なります。
2 に答える
ARM は x86 命令を実行できず、x86 は ARM 命令を実行できません。問題は単に異なるレジスタ セットではなく、まったく異なる ABI です。ARM レジスタを x86 にマッピングしても、問題の解決にはほど遠いものです。x86 で ARM バイナリを実行するには、完全なエミュレーション レイヤーが必要です。同じシステム コールでも、少なくとも場合によっては異なる番号になるため、ARM CPU をエミュレートするだけでは十分ではありません。プロセスが x86-64 カーネルへのシステム コールを行う場合は、ARM ABI をエミュレートする必要があります。
唯一の現実的なオプションは、ARM ハードウェアと x86 ハードウェア上の ARM VM/エミュレーターの間、またはその逆に移行することです。完全にエミュレートされた VM 内で実行されている ARM Linux、またはシステム コールを変換するユーザー モードのみのエミュレーション。後者はおそらく、insn を insn で解釈する代わりに、x86 マシン コードを生成する JIT コンパイラによってさらに高速化される可能性があります。(JIT は両方で機能しますが、完全な VM で完全な ARM-Linux カーネルを変換しなければならない場合は、JIT 層にとってより多くの作業が必要になります。)
Duskwuff が言うように、移行はプロセスのネイティブ マシン状態に関して、たとえば ARM プログラムで使用されるチェックポイント ライブラリによって行われる必要があります。これにより、ARM 状態のバイナリ変換表現に一貫性がないという問題が発生しなくなります。