2012-07-19 2 views
5

x86 인터럽트 0x1A는 컴퓨터의 시계 시간을 제공하지만 55ms (AH = 0) 이내의 정확한 시간 만 제공 할 수 있습니다. 아마 1ms 정도 더 작은 증분을 얻을 수있는 방법이 있습니까? 나는 내 자신의 장난감 OS를 만들기 위해 노력하고있어, 내가 쓸 수없는 것을 사용할 수 없다.1ms 단위로 시간 받기

답변

3

자신 만의 OS를 만들고 있기 때문에 타이머 기간을 유지할 필요가 없습니다. INT 8 (IRQ 0)을 더 자주 트리거하도록 PIT를 다시 프로그래밍 할 수 있습니다. here을 참조하십시오.

최신 컴퓨터의 경우 High Precision Event Timer을 사용할 수도 있습니다.

+0

APIC 타이머를 사용할 수도 있습니다. http://wiki.osdev.org/APIC_timer – Necrolis

6

x86의 rdtsc (타임 스탬프 카운터 읽기) 명령을 사용하면 edx:eax에 64 비트 CPU 타임 스탬프를 사용할 수 있습니다. 이 명령어의 구현은 프로세서에 따라 다르지만 클럭마다 또는 일정한 속도로 한 번씩 증가합니다. 이 때문에 시간 해상도도 달라 지지만 1ms보다 좋을 것입니다.

rdtsc를 사용하는 몇 가지주의 사항이 있습니다

  1. 타임 스탬프 카운터는 CPU 코어를 통해 동기화 필요는 없다. 이는 하이퍼 스레드 및 멀티 코어 CPU에서 문제가 될 수 있습니다.
  2. 카운터가 반드시 일정한 비율로 증가하지는 않습니다. 프로세서의 스로틀 또는 절전 기능에 의해 영향을받을 수 있습니다.
  3. 최대 절전 모드로 인해 카운터가 재설정 될 수 있습니다.

자신 만의 OS를 작성하고 있으므로 이러한 문제에 대해 걱정하지 않아도됩니다.