7

簡単な要約:x86-64モードでは、ジャンプはx86-32モードと同じくらい遅いですか?

x86プロセッサでは、ジャンプは次の3つのタイプに分類されます。

  • 短く、PCオフセットは+/- 127バイト(2バイト命令)
  • 近く、現在のセグメントを「ロールアラウンド」する+/- 32kオフセット(3バイト命令)
  • どこにでもジャンプできるfar(5バイト命令)

プロセッサによって異なりますが、短いジャンプと近いジャンプには1〜2クロックサイクルかかりますが、遠いジャンプには50〜80クロックサイクルかかります。私がドキュメントを読んだところ、これは「現在のコードセグメントであるCSの外に出ている」ためです。

x86-64モードでは、コードセグメントは使用されません-セグメントは事実上常に0..無限大です。エルゴ、セグメントの外に出てもペナルティはないはずです。

したがって、質問:プロセッサがx86-64モードの場合、ファージャンプのクロックサイクル数は変化しますか?

関連するボーナスの質問:32ビットプロテクトモードで実行されているほとんどの* nixのようなオペレーティングシステムは、セグメントサイズを明示的に0..infinityに設定し、ページテーブル全体で線形->物理変換を管理します。彼らは遠い呼び出しの時間(より少ないクロックサイクル)の点でこれから利益を得ますか、それともサイズセグメントレジスタからの内部CPUレガシーが8086以来本当にペナルティでしたか?

4

1 に答える 1

2

CSは、ベースと制限だけでなく、アクセス許可にも使用されます。CPLは、次のような他のフィールドと同様に、そこでエンコードされます。

  • Dビット-32ビットまたは16ビットのデフォルトのセグメントサイズ
  • Lビット-セグメントの互換性または64ビットモードを選択します(この場合、ベースと制限が重要です)

ファージャンプはタスクゲートを通過することもでき、ファーコールもコールゲートを通過することができます。64ビットモードに関係なく、これらすべてを処理する必要があります。

要約すると、64ビットモードでのファージャンプは、32ビットモードよりも速くはありません。実際、64ビットモードが有効になっている場合、セグメント記述子は64ビットモードが無効になっている場合の2倍になることを考慮すると、すべての記述子テーブルアクセスが2倍になり、ジャンプ時間が長くなる可能性があります。

于 2010-07-03T07:36:13.953 に答える