[OS] 컴퓨터는 현재시간을 어떻게 알까?
컴퓨터의 시계를 보면 꽤 정확하게 시간을 측정하는 시계를 볼 수 있다.
그런데 컴퓨터는 이 시간을 어떻게 매번 정확하게 측정할 수 있는걸까?
이를 알기 전에 고등학교 물리 시간으로 돌아가 시간 측정 방법에 대해서 먼저 알아보자.
협정 시계시(UTC)
협정 시계시는 국제적인 표준 시간의 기준으로 쓰이는 시각으로, 원자시계와 윤초 보정을 기반으로 표준화 한 시각이다.
이 시각은 학교에서 배웠듯이 영국 그리니치 천문대가 기준(UTC+0)이다.
대한민국의 시간은 UTC+9로, 영국이 12시라면 한국은 21시가 된다.
원자시계
협정 시계시는 위에서 말했듯, 원자시계를 통해 측정한다.
원자시계는 세슘 원자를 이용해 정의하며, 세슘 원자가 절대영도 조건에서 방출하는 특정한 파장의 빛이 9,192,631,770번 진동하는 시간을 1초로 정의한다.
컴퓨터가 시간을 알아내는 방법
그럼 이제 컴퓨터가 시간을 어떻게 알아내는지 알아보자.
컴퓨터가 시간을 알아내는 방법은 2가지가 있다.
- NTP를 통해 시간 동기화
- 하드웨어의 시스템 클럭을 이용
NTP를 통해 시간 동기화
컴퓨터를 키면 자동으로 현재 시간을 보여주는데, 이는 시스템 시간을 NTP(Network Time Protocol)를 통해 동기화하여 나타낸 시간이다.
즉, 컴퓨터는 NTP 서버에 네트워크 요청을 하여 현재 시간을 받을 수 있다.
NTP
NTP(Network Time Protocol)는 네트워크 시간 프로토콜로 인터넷에서 라우터 및 기타 하드웨어 디바이스의 클럭을 동기화하는 데 널리 사용되는 프로토콜이다.
전송 계층 프로토콜로는 빠르고 실시간성을 가진 UDP를 사용하며, 포트번호는 123번을 사용한다.
NTP를 통해 시간 정보를 제공해주는 것은 NTP 서버이다.
NTP 서버
NTP 서버는 UTC로 나타내는 시간 정보를 전송해준다.
아무리 빠른 광회선 인터넷일지라도 패킷을 보내고 응답 받을 때까지 최소 10밀리초 이상의 시간이 걸린다.
때문에 정확한 시간 정보를 얻으려면 보정이 매우 중요한데, NTC 서버는 시간을 전송해 줄 때 통신에 걸리는 시간만큼 정확하게 예상하여 보정해준다.
하지만, 시간 정보를 제공해주는 서버는 소수이기 때문에 이곳에 접속이 집중되면 부하가 너무 커져버릴 수 있다. 그래서 NTP 서버는 계층적인 구조로 이를 대비한다.
NTP 서버 계층
NTP 서버는 계층으로 이루어져 있으며 그 계층을 Stratum이라고 부르는데 최상위 계층인 Stratum 0을 PRC(Primary Reference Clock)라고 부른다.
PRC?
PRC는 원자 시계로 시간을 측정하며 아래 계층 요소들이 동기화를 통해 시간을 알 수 있다.
그래서 하위 계층일수록 정밀도가 조금씩 떨어진다.
서버 원천에 직접 연결된 서버들은 Stratum 1이라고 한다. Stratum 1은 Stratum 0에 동기화 시킨 시간 서버이며, 전세계적으로 수백 개 이상의 공식적인 1차 타임서버가 운용중이다.
이런식으로 Stratum 2부터 Stratum 15까지 계층적 트리 구조를 형성하면서 다수의 컴퓨터에게 시간 정보를 전송해준다.
하드웨어의 시스템 클럭을 이용
그럼 인터넷이 없을 때는 어떻게 시간을 알까?
바로 컴퓨터 내부에 시간을 측정하는 시스템 클럭이 있다.
클럭?
순서논리회로에 가해지는 전기적 진동의 속도를 나타내는 단위이며 Hz로 표기한다.
CPU를 비롯한 모든 컴퓨터의 부품들은 특정한 신호에 맞추어 동작을 하는데, 이 특정한 신호를 가리키는 말이 클럭이다.
이는 RTC(Real Time Clock)라는 모듈을 사용하는데, 아마 데스크탑이 있는 분들은 메인보드를 살펴보면 RTC가 붙어있는 것을 확인할 수 있다.
RTC는 날짜, 시, 분, 초 등의 시간을 카운터하는 디지털 카운터 회로로 구성되어 있으며, 이 카운터 회로를 통해 시간이 측정된다.
카운터 회로는 어떻게 정확히 1초를 셀 수 있을까?
이는 클럭 발생회로에 필요한 수정 발진기(Crystal Oscillator)에 대해 찾아보면 알 수 있다. RTC의 오실레이터는 32.768Hz의 수정 발진기를 사용한다.
https://noel-embedded.tistory.com/423
그런데, 컴퓨터를 껐다 켜도 컴퓨터는 정확히 시간을 측정하는 것을 볼 수 있다. 컴퓨터가 꺼지면 전기 공급이 차단될텐데 어떻게 된걸까?
RTC는 자체적으로 배터리를 가지고 있어서 컴퓨터 전원을 끄더라도 계속 시간이 유지될 수 있다. 이 RTC는 컴퓨터뿐만 아니라 시간을 유지해야 하는 거의 모든 전자기기에 존재한다.
시스템 클럭과 Unix Time
그럼 시스템 클럭과 Unix Time의 관계에 대해 알아보자.
먼저 시스템 클럭을 통한 컴퓨터의 시간은 특정 시각(Epoch)을 기준으로 시스템 클럭의 틱을 세는 것으로 구현하는데, 이를 시스템 시간이라고 한다. 여기서 시스템 시간을 값으로 표현한 것을 타임스탬프라고 한다.
이 타임스탬프는 운영체제마다 기준 시간과 단위가 다를 수 있는데, Unix 계열 운영체제에서 시간을 표시하는 방법을 Unix Time이라고 부흔다.
Unix Time은 1970년 1월 1일 0시 0분 0초가 기준 시각이며, 기준 시각은 유닉스 개발자 데니스 리치가 정한 날짜이다.
당연히 기준 시각인 1970년 이전 시간은 음수로 표현되며, 초 단위로 시간이 증가한다.
참고
[1] https://ko.wikipedia.org/wiki/%EC%8B%A4%EC%8B%9C%EA%B0%84_%EC%8B%9C%EA%B3%84
[2] https://namu.wiki/w/%ED%81%B4%EB%9F%AD
[3] https://namu.wiki/w/%EC%BF%BC%EC%B8%A0
[4] https://noel-embedded.tistory.com/423
'Computer Science > OS' 카테고리의 다른 글
[Unix Programming] ipcs & ipcrm (0) | 2021.12.13 |
---|---|
[Unix Programming] Shared Memory (0) | 2021.12.13 |
[Unix Programming] Semaphore (0) | 2021.12.04 |
[Unix Programming] Message Passing (0) | 2021.12.04 |
[Unix Programming] IPC 기본 개념 (0) | 2021.12.03 |
댓글
이 글 공유하기
다른 글
-
[Unix Programming] ipcs & ipcrm
[Unix Programming] ipcs & ipcrm
2021.12.13 -
[Unix Programming] Shared Memory
[Unix Programming] Shared Memory
2021.12.13 -
[Unix Programming] Semaphore
[Unix Programming] Semaphore
2021.12.04 -
[Unix Programming] Message Passing
[Unix Programming] Message Passing
2021.12.04