2012-01-19 14 views
3

私はスピンロックがWindowsのhal.dllによってエクスポートされていることを知っています。そのため、スピンロックのコードをリバースエンジニアリングしました。結果は次のとおりです。Windows XPとWindows 7のスピンロックの実装が異なるのはなぜですか?

Windows XPの逆コンパイルされたスピンロック。

unsigned __int32 __thiscall KfAcquireSpinLock(signed __int32 *this) 
{ 
    unsigned __int32 result; // [email protected] 

    result = __readfsdword(36); 
    __writefsdword(36, 2u); 
    while (_interlockedbittestandset(this, 0)) 
    { 
    while (*this & 1) 
     _mm_pause(); 
    } 
    return result; 
} 

Windows 7のデコンパイルされたスピンロック。

unsigned __int32 __fastcall KeAcquireSpinLockRaiseToSynch(signed __int32 *a1) 
{ 
    unsigned __int32 result; // [email protected] 
    int v2; // [email protected] 
    unsigned __int32 v3; // [email protected] 
    signed __int32 *v4; // [email protected] 
    int v5; // [email protected] 

    result = __readfsdword(36); 
    __writefsbyte(36, 0x1Bu); 
    while (_interlockedbittestandset(a1, 0)) 
    { 
    v2 = 0; 
    do 
    { 
     ++v2; 
    if (!(v2 & dword_8002D1B0)) 
     { 
     if (dword_8002D19C & 0x40) 
     { 
      v3 = result; 
      v4 = a1; 
      v5 = v2; 
      dword_8002D1B4(v2); 
      v2 = v5; 
      a1 = v4; 
      result = v3; 
     } 
     } 
     _mm_pause(); 
    } 
    while (*a1 & 1); 
} 
    return result; 
} 

バージョンによってコードが異なるのはなぜですか?特に、Windows 7バージョンで追加されたコードが、仮想化におけるスピンロックのパフォーマンスをどのように向上させるかはわかりません。

+0

変更がパフォーマンス上の理由からだと思いますか? –

+0

申し訳ありませんが、Windows 7のバージョンがXen環境でより優れたパフォーマンスを持つことを意味します。私はそれをはっきり言っていませんでした。また、私はそれを証明するためにいくつかのテストを行った。 –

+0

この質問の目的が何であるかは不明です。あなた自身のコードで同じテクニックを使用できるように説明を探していますか?この変更を追跡した問題をデバッグしていますか?これはちょうどアイドルな好奇心ですか? –

答えて

3

KeAcquireSpinLockRaiseToSynchは、KeAcquireSpinLockと同じではありません。

KeAcquireSpinLockRaiseToSynchreserved for system useです。これはインターフェイスドライバでは使用できません。

このように、

+0

実際、 'KeAcquireSpinLockRaiseToSynch'は' KeAcquireSpinLock'と同じです。私は〜 –

+0

はそう –

+0

私は、Windows 7。persudoコードの 'KeAcquireSpinLock'のengneeriedコードを逆に行う気軽に証明することができます以下の通りです: '無効__cdecl KfAcquireSpinLock() { __writefsbyte(36、2U) ; JUMPOUT(loc_8001371E); } ' –

関連する問題