2012-05-02 2 views
2

이것은 숙제 문제가 아니라 파생 문제입니다.프로그래밍, 응용 프로그램 및 운영 체제의 시간 정확도

시간 기능은 객체 지향 언어와 C와 같은 명령형 언어에서 어떻게 구현됩니까? 나노초 단위의 타임 스탬프를 long으로 가져 와서 문자열로 변환한다면 시간이 정확하지 않을까요?

실제로 타이밍 데이터를 계산하거나 작업하는 즉시 알려지지 않은 정도로 부정확하지 않습니까? 이 가정이 맞습니까?

네트워크 대기 시간을 매우 쉽게 계산할 수 있지만 데이터가 전송되기 전에 로컬로 전송되는 것은 어떨까요? 지금까지 질문 한 모든 사람들이 시간 함수가 결코 정확하지 않다는 결론에 도달 한 것 같습니다. 이는 부정확 한 것으로 받아 들여지고 있습니다.

본질적으로 내가 묻는 것은 실제 시간 어플리케이션이 어떻게 구현되고 있는가입니다.

+0

몇 가지 프로세서 사이클의 지연으로 큰 어려움을 겪을 수있는 "실제 시간 응용 프로그램"을 보여줄 수 있습니까? – deceze

+0

리눅스의 ntpd 데몬? 안내 시스템? – atx

답변

1

실은 숙제!

time라고하는 것은 진행됩니다. 오래전에 은 숫자도 휴대하지 않았습니다. 여행하는 태양과 여행하는 스타들에게 시간에 관한 힌트가 에게 주어졌습니다. 나중에, 특히 디지털 혁명이 시작된 이래로 Numbers 은 time에 할당되었습니다. 진행 시간이 증가하는 숫자와 함께 나타납니다. 다른 형식에 대해 많이 말하지 않고서도 이러한 스키마의 대부분에는 시간이 있습니다. Unix epoche 은 1970 년 1 월 1 일 00:00:00 UTC 시간입니다. 물론 이것은 시작의 시간은 아니지만 합리적인 데이터 구조에 숫자를 맞추기 위해 그러한 가상의 기원이 선택됩니다. Back to you question: 현재 시간을 캡처 할 수 있습니까? 아니, 우리는 할 수 없을 것이다. 어떤 시계를 읽는 것은 빛이 우리의 눈으로가는 도중에 시계를 떠난 시간을 알려줍니다. 그것은 아주 작은 것일지도 모르지만 ... 누군가가 우리에게 시간을 요청하면, 우리는 기쁜 마음으로 말할 수 있습니다. 그러나 다시 약간의 지연이 발생하고 지연을 추가하지 않고 동일한 시간을 말할 것이라고 확신합니다.

물리학을 알면 우리의 눈에 들어오는 빛이 지연 될 수 있고, 우리의 두뇌가 지연되고, 말한 단어가 사람의 귀에 도달하는 데 필요한 지연이 추가됩니다.

그러나 ..........

그래서 어떻게 실제 시간 응용 프로그램이 구현 될 수 있습니까? THAT TIME은 없습니다. 시간은 당신이 어디에 있느냐에 달려 있으며, 시간은 당신을 둘러싼 중력에 달려 있으며, 시간은 당신의 속도에 달려 있습니다.

그러나 ......... 그것은 시간이 통과하기 때문에 일이 일어나고 있는지없는

. 아니요, 시간이 지나면 일이 생깁니다!

Again back to your question: 일반적으로 소프트웨어에있어 시간에 관한 질문은 기본적으로 진행 및/또는 동기화에 대한 질문입니다. 당신은 뭔가를 비교하고 싶습니다. 기본적으로 time이라는 진행 상황을 제공하는 리소스에 대해 calls 두 가지 가능성이 있습니다. first call은 전화를 걸 때 time을 반환합니다. 그러나 나중에 결과를 얻을 것이라는 점을 고려해야합니다. 그래서 당신이 얻는 시간은 과거에 다소 있습니다. second call은 호출이 반환되는 time을 반환합니다.이러한 기능은 자체 서비스에 필요한 기간을 알고 있어야하기 때문에 약간 다른 구현입니다. 이는 일부 보정을 통해서만 가능할 수 있습니다.

두 가지 주요 호출입니다.

resolution (다시 질문으로 돌아가십시오.) 원자 시계가 컴퓨터에 연결되도록 옵션을 제외하고 싶습니다. 선반 슈퍼 마켓 컴퓨터에서 의 소유자라고 가정 해 보겠습니다. 몇 GHz에서 실행될 수 있습니다. 관찰 할 수있는 가장 높은 빈도는 CPU 빈도 일 가능성이 큽니다. 예를 들어 4GHz에서 이러한 주파수는 250 나노초 내에 4 번 증가하는 카운터를 발생시킵니다. 이는 250 피코 초 시간을 의미합니다. 일반적으로 sub-nanosecond 해상도라고 말할 수 있습니다. 실제로 일반적으로 사용되는 고주파 카운터는 MHz 범위에 있으며, 이는 100ns 단위 범위에서 분해능을 제공합니다.

그러나 .......

이 높은 주파수는 시간의 통치자로 사용할 수 있습니까? 단기적으로 그들은 할 수 있습니다! 그러나 장기적으로 볼 때 이러한 시간 소스는 예를 들어 PC 시간과 같은 일반적인 시간 소스로 고정되어야하기 때문에 훨씬 더 복잡합니다. 고주파 계수기에는 많은 오차가 있으며 위상 편차가 많은 us/s가됩니다. 이것은주의 깊은 보정으로 만 극복 할 수 있습니다. 적절한 교정을 통해 고주파 카운터를 시스템 시간에 위상 고정시킬 수 있습니다.

몇 마이크로 초 범위의 정확도로 시간 원본을 얻으면 잠재 지연을 예측할 수 있으므로 코드 동작을 매우 다르게 진단 할 수 있습니다. 시간이 이런 일을하게

  1. :

    은 (철학적 접근)을 요약합니다. 당신이 말하고있는 것처럼 결코 true 또는
  2. 시간 is
  3. 마지막으로
  4. 시간 관련 고려 모든 값이 지난
  5. 의 시간을 나타내는 진정한 가치 같은 것은 actual time 실제로 없다을 나타냅니다 Time can never be completely accurate (아무 것도 할 수 없습니다!)

Windows 용 고해상도 시간 서비스 구현에 대한 자세한 내용은 Windos Timestamp Project을 참조하십시오.