2017-10-14 2 views
5

32ビット値が2ページにわたるメモリ位置に書き込まれたとします。議論のために、最初のページで2バイト、2番目のページで2バイトと仮定します。最初のページは書き込み可能ですが、2ページ目はマップされていません。全体として命令を実行するとページフォールトが発生し、問題ありません。未割り当ての書き込みがページ境界を越えてフォルトがトリガされた場合はどうなりますか?

私の質問は:値の最初の2バイトの前後にページ違反トリガがメモリに書き込まれるのですか?別の言い方をすると、フォルト後に実行されるコード(フォルトハンドラなど)は部分的な書き込みを観察できるでしょうか?

X86環境では、動作がアーキテクチャであるか、モデル固有である可能性があると考えられます。

インテルアーキテクチャマニュアルボリューム3Aから
+0

IIRCでは、書込み全体がフォルトによって中止されます。 Intelのx86マニュアルでは、これを再確認したい場合には、これを詳細に文書化する必要があります。このことはあまり確かではありませんが、IIRC AVX512マスクストア*は実際にフォールトが発生する前に(フォルト以外の)要素の一部を保存するかもしれません。私は、散布命令のISAリファレンスマニュアルをチェックしました。そして、スキャッタは、指定された順序でフォルトをチェックします。 (ただし、散布図の1つの要素に対しては、それが全く行われていないと失敗します。) –

+1

部分的なストアを非フォルトのページに進めるようにするアーキテクチャがあれば、私は驚いています。 BTWは、[x86タグwiki](https://stackoverflow.com/tags/x86/info)のインテルのx86マニュアルにリンクしています。 –

+0

@PeterCordes - 私はAVX-512ストアをチェックしませんでしたが、それはどのように動作するのか疑いがありません。 AVX2ギャザリングでさえ、このように動作します。各ギャザリング操作後(原則としてとにかく)マスクレジスタを更新して中断できるようにします(私は思う)。例外がスローされた場合、ロードの一部が既に完了している可能性があります。マスクレジスタに反映されます(潜在的に問題が修正され、ロードが再開される可能性があります)。間違いなくAVX-512は同じように動作しますが、スキャッターが異なると変なことになります。 – BeeOnRope

答えて

-3

は、インテルCore 2 デュオ、インテル®Atom™によるキャッシュ行に分割され、 ページ境界がアトミックであることが保証されていないキャッシュ可能なメモリへのアクセスIntel Core Duo、Pentium M、Pentium 4、Intel Xeon、 P6ファミリ、Pentium、およびIntel486プロセッサ。

IMOは、上記のシナリオが発生する可能性があることを意味します。割り込みは、最初の2バイトが書き込まれた後に生成されます。

+0

しかし、どのように動作するかについて間違っていない限り、どちらかの部分がグローバルに見えるようになる前にページ分割の両方のパーミッションをチェックする必要があります。 –

+0

私は別のものを見ることはできません。 NOT-atomicは、他の部分(他のコアまたはバス)が部分書き込みを観察できることを意味し、割り込みが発生したときに同じコアが部分書き込みを観察できないのはなぜですか?ページ違反が発生したときに部分書き込みがロールバックされるとは思わない。それは問題をより複雑にし、何も得られません.. –

+0

は、コアが2つの転送に分割する場合、または単一の非整列転送の場合にバス転送がどのように見えるかに依存します...もちろん単純な答えは試してみるだけですはい? –

関連する問題