컴퓨터가 시간을 측정하는 방법
아래 유튜브 영상을 기본으로 여러곳에서 공부한 내용을 정리했다.
애플2 같은 초창기 컴퓨터들은 시간을 기록(저장)하지 않았다.
대신 어플리케이션이 시간을 알아야 할 때 사용자가 입력해야 했고
이후 일정한 간격으로 프로세서에 인터럽트를 발생시켜 시간을 측정했다.
컴퓨터가 재부팅 되었을때 다시 시간을 입력해야 하는 번거로움이 있었지만
지금의 컴퓨터가 시간을 측정하는 방식과 크게 다르지 않았다.
컴퓨터의 프로세서는 외부 발진기에서 전기적 진동을 공급 받는다.
이것을 clock speed 또는 clock rate 라고 하는데,
1초에 한번의 진동을 공급 받는다면 이 프로세서의 clock speed 는 1 Hz 라고 표기 할 수 있다.
내가 사용중인 CPU 의 clock speed 는 3.4 GHz 인데, 1초에 34억번의 진동이 CPU 로 들어온다는 뜻이다.
34억번의 진동을 측정할 때마다 CPU 가 나에게 알려준다면
나는 1초에 한번씩 알림을 받을것이고, 컴퓨터가 시계의 역할을 하고 있다고 생각할것이다.
그러나 컴퓨터는 34억번의 진동을 세고 있을 수가 없다.
이 진동횟수만큼 CPU 가 명령을 수행 할 수 있다고 생각하면 되는데,
시계 역할을 위해 모든 진동을 측정하는 명령을 수행한다면 다른 프로그램을 위한 명령은 수행 할 수 없게 된다.
게다가 컴퓨터가 종료될 경우 프로세서도 작동을 멈추게되어 시간 측정도 더이상 할수 없게 되는 문제도 있다.
이런 문제들을 해결하기 위해 컴퓨터는 RTC를 사용한다.
RTC는 전압이 가해졌을때 특정 주파수로 진동하는 석영의 특성을 이용하여 시간을 측정한다.
(석영은 외부 변화에도 그 주파수가 크게 변하지 않는 특성이 있기 때문에 대부분의 시계에서 사용한다)
그러나 석영 결정을 통한 시간 측정은 100% 정확하지 않다.
모델에 따라 다르지만 30일이 지날때마다 15초가량의 오차가 발생할 수 있고
이때문에 시간을 다시 맞춰야 하는 수고가 발생한다.
컴퓨터는 이런 수고로움 없이 인터넷을 통해 시간을 보정한다.
원자시계 처럼 굉장히 정밀히 측정한 시간을 받아서 사용하는데,
NTP 를 사용하면 네트워크 지연시간까지 보정하여 더욱 정확한 시간을 확인할 수 있다.
정리하자면 다음과 같다.
컴퓨터의 전원이 켜지면 OS 는 RTC 에서 시간을 가져온다.
이후 프로세서에 인터럽트를 발생시켜 시간을 측정한다.
이렇게 측정된 시간은 오차가 발생하기 때문에 주기적으로 NTP 와 동기화한다.
다시 전원이 종료된 상태로 돌아가면 RTC 가 시간을 측정한다.
의문점
- 클럭 스피드와 CPU 의 명령 사이클이 어떻게 연관되어 있는지 잘 모르겠다.
클럭 스피드에 상관없이 명령을 수행하면 안되는건지 - 유튜브에서는 clock oscillator 를 사용하여 진동 횟수를 관리 가능한 정도로 줄인 뒤 측정하는 방법도 있다고 말하는데, 관련 정보를 찾지 못해서 넘겨버렸다.