2012-01-19 2 views
3

Windows에서 hal.dll로 스핀 록을 내 보낸다는 것을 알고 있으므로 스핀 록 코드를 리버스 엔지니어링했습니다. 결과는 다음과 같습니다.Windows XP와 Windows 7간에 스핀 록 구현이 다른 이유는 무엇입니까?

윈도우 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

죄송합니다. Xen 환경에서 Windows 7의 성능이 향상된 버전입니다. 나는 그 말을 분명히 말하지 않았다. 또한 인증을 위해 몇 가지 테스트를 수행했습니다. –

+0

이 질문의 목적이 무엇인지는 분명하지 않습니다. 자신의 코드에서 같은 기술을 사용할 수 있도록 설명을 찾고 있습니까? 이 변경 사항에서 추적 한 문제를 디버깅하고 있습니까? 이게 그냥 쓸데없는 호기심입니까? –

답변

3

KeAcquireSpinLockRaiseToSynchKeAcquireSpinLock와 동일하지 않습니다.

KeAcquireSpinLockRaiseToSynchreserved for system use이며 드라이버를 인터페이스하는 데 사용되지 않습니다.

이렇게 차이가 있습니다.

+0

실제로'KeAcquireSpinLockRaiseToSynch'는'KeAcquireSpinLock'과 같습니다. '무효 __cdecl KfAcquireSpinLock() { __writefsbyte (36, 2U) : I은 다음과 같습니다 즉 ~ –

+0

내가 윈도우 7.의 persudo 코드의 KeAcquireSpinLock''의 engneeried 코드를 리버스 그래서 –

+0

을 자유롭게 증명할 수 ; JUMPOUT (loc_8001371E); } ' –

관련 문제