시스템 시간
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
시스템 시간은 컴퓨터 시스템에서 날짜와 시간을 추적하는 기능으로, 초기 개인용 컴퓨터에서는 전원이 꺼지면 시간이 초기화되는 문제가 있었다. IBM PC/AT는 메인보드에 실시간 시계를 내장하여 이 문제를 해결했으며, 이후 컴퓨터 네트워크의 발달과 함께 시간대 설정 기능이 추가되었다. 시스템 시간은 프로그래머블 인터벌 타이머를 통해 구현되며, 운영체제, 프로그래밍 언어, 응용 프로그램별로 시스템 시간을 얻는 방법이 다르다. CPU 시간과 파일 시스템 타임스탬프 역시 시스템 시간과 연관되어 사용된다.
더 읽어볼만한 페이지
- 컴퓨터 프로그래밍 - 순서도
순서도는 컴퓨터 알고리즘이나 프로세스를 시각적으로 표현하는 도구로, 흐름 공정 차트에서 기원하여 컴퓨터 프로그래밍 분야에서 알고리즘을 설명하는 데 사용되며, 다양한 종류와 소프트웨어 도구가 존재한다. - 컴퓨터 프로그래밍 - 의사코드
의사코드는 컴퓨터 과학 및 수치 계산 분야에서 알고리즘을 설명하기 위해 사용되는 비표준적인 언어로, 자연어와 프로그래밍 언어의 요소를 혼합하여 알고리즘의 논리적 흐름을 이해하기 쉽게 하고 프로그래머가 실제 코드로 구현하기 전에 알고리즘을 설계하고 검토하는 데 유용하다. - 운영체제 기술 - 프로세스
프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다. - 운영체제 기술 - 커널 (컴퓨팅)
커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
시스템 시간 |
---|
2. 역사
개인용 컴퓨터의 발전과 더불어 시스템 시간의 역사도 함께 발전해왔다. 초기 개인용 컴퓨터는 시스템 시간을 유지하는 기능이 없었지만, 기술 발전과 함께 실시간 시계(RTC)가 메인보드에 탑재되면서 시스템 시간을 안정적으로 관리할 수 있게 되었다.
대부분의 1세대 PC들은 날짜와 시간을 추적하지 못했다. 컴퓨터 네트워크가 널리 사용되기 전까지 시스템 시간을 추적하였던 대부분의 개인용 컴퓨터 시스템들은 오직 로컬 시간과만 관계를 맺었고 시간대는 고려하지 않았다.
현재 기술로 대부분의 최신 컴퓨터는 현지 민간 시간을 추적하며, 비디오 카세트 레코더, 디지털 비디오 레코더, 케이블 TV 수신기, 개인 정보 단말기, 호출기, 휴대 전화, 팩스, 자동 응답기, 카메라, 캠코더, 에어컨, 전자레인지와 같은 다른 많은 가정 및 개인용 기기도 마찬가지이다.[1]
임베디드 시스템 내에서 작동하는 마이크로컨트롤러는 항상 시간을 추적하는 내부 하드웨어를 가지고 있는 것은 아니다.[1] 이러한 정보를 필요로 하는 시스템은 일반적으로 재부팅 시 타임 서버 또는 외부 시계와 같은 외부 소스에서 현재 시간을 가져오거나 사용자에게 현재 시간을 수동으로 입력하도록 사용자 인터페이스를 사용하여 기본 시간을 초기화한다.[1]
현재는 컴퓨터뿐만 아니라, 다음과 같은 가정용·개인용 전자기기도 시스템 시간을 구현하고 이용하고 있다.[2] 내장 시계를 구동할 수 있는 배터리를 내장한 것도 있지만, 대기 전력으로 구동되는 것도 많아, 전원 케이블을 제거하여 전원을 차단하면 시간이 리셋된다.[2]
- 녹화 기능이나 알람 기능을 내장한 텔레비전 수상기[2]
- VTR (VCR)[2]
- DVD 레코더를 비롯한 디지털 비디오 레코더[2]
- 케이블 텔레비전 수상기[2]
- PDA[2]
- 삐삐[2]
- 자동차 내비게이션 시스템[2]
- 휴대 전화[2]
- 팩스[2]
- 자동 응답 전화[2]
- 디지털 카메라[2]
- 캠코더[2]
- 에어컨[2]
- 전자 레인지[2]
2. 1. 초기 개인용 컴퓨터 (PC)
대부분의 1세대 PC는 날짜와 시간을 추적하지 못했다. 여기에는 CP/M 운영 체제를 구동하던 시스템뿐 아니라 초기 모델의 애플 II, BBC 마이크로, 코모도어 PET도 포함되었다. IBM PC/AT는 메인보드에 날짜/시간 하드웨어가 장착된 최초의 상용화된 개인용 컴퓨터였다. IBM PC와 XT용으로 온보드 배터리 백업이 있는 실시간 시계 칩이 포함된 애드온 주변 기판이 이용 가능했다. 컴퓨터 네트워크가 널리 사용되기 전까지 시스템 시간을 추적한 대부분의 개인용 컴퓨터 시스템은 오직 로컬 시간과만 관계를 맺었고 시간대는 고려하지 않았다.초기 PC는 시스템 전원이 꺼지면 시간도 함께 소멸했기 때문에, 부팅할 때마다 시간을 설정해야 했다.[2] CP/M운영 체제나 초기의 Apple II, Commodore PET 등이 이에 해당한다.[2] 1981년에 출시된 IBM PC가 처음으로 전원을 꺼도 배터리로 계속 작동하는 실시간 시계를 마더보드에 탑재하여 시스템 시간을 안정적으로 이용할 수 있게 되었다.[2]
2. 2. 시간대 (Time Zone)
컴퓨터 네트워크가 널리 사용되기 전까지 대부분의 개인용 컴퓨터 시스템은 오직 현지 시간만 관리했으며 시간대에 대한 고려는 없었다.[1] 대한민국 표준시(KST, UTC+9)는 한국에서 사용되는 시간대이며, 대부분의 한국 내 컴퓨터 시스템은 KST를 기준으로 시간을 관리한다.3. 시스템 시간의 작동 원리
시스템 시계는 일반적으로 CPU를 주기적으로 인터럽트하는 프로그래머블 인터벌 타이머로 구현되며, CPU는 타이머 인터럽트 서비스 루틴을 실행한다. 이 루틴은 보통 시스템 시계에 1 틱(단순한 카운터)을 더하고, 인터럽트 전에 CPU가 실행하던 작업으로 돌아가기 전에 다른 주기적인 정리 작업(선점 등)을 처리한다.[49]
시스템 시각은 "시스템 클록"이 생성하는 일정 "템포"(틱)를 시스템 시작 시(운영 체제의 부트업 시) 읽어들인 실시간 시계(하드웨어 시계)에 더하여 임의의 시작 시각부터의 경과 시간을 구한다. 이 틱은 PC에서는 Intel 8253 칩상의 프로그래머블 인터벌 타이머(Programmable Interval Timer영어, PIT)에서 인터럽트 벡터 "IRQ0"을 이용하여 정기적으로 발생시킬 수 있으며, 이 인터벌을 시스템 시각에 주기적으로 더한다.[49] 최근에는 PIT보다 고기능인 HPET이 탑재되는 경우가 많다. 리눅스 커널에서는 이 인터벌 횟수를 "Hz"라는 매크로로 커널빌드 시 지정할 수 있다.[50] 유닉스 계열 및 POSIX 호환 운영 체제에서는 예를 들어 1970년1월 1일 0시 0분 0초(UTC) 즉 UNIX 에포크부터 윤초를 고려하지 않은 경과 시간(UNIX 시간)이, 마이크로소프트 윈도우 NT에서는 1601년 1월 1일 0시 0분(UTC)부터 100나노초 틱 단위의 경과 시간이 주로 사용된다.
시스템 시각은 인간에게 익숙한 캘린더 시각으로 쉽게 상호 변환할 수 있다. 예를 들어, UNIX의 time_t는 이러한 변환을 지원하는 데이터형 중 하나이며, UNIX 시간=1,000,000,000초를 캘린더 시각 2001-09-09 01:46:40 UTC(단, 윤초를 고려하지 않음)로 변환하여 표시할 수 있다. 프로그래밍에서 사용되는 시간에 관한 라이브러리 함수나 서브루틴은 일반적으로 서로 다른 시각 표현 간의 상호 변환뿐만 아니라 표준 시간대(지구상의 시차), 서머타임, 윤초, 사용자 로케일 설정에 맞춰 조절하는 기능도 있어 시각을 적절하게 처리할 수 있다.
4. 시스템 시간의 반환
.System.currentTimeMillis()
INT 1Ah, AH=00h
[70]INT 1Ah, AH=02h
[71]INT 1Ah, AH=04h
[72]scb$base+58h
(1978년 1월 1일 이후 날짜 수), scb$base+5Ah
(시, BCD), scb$base+5Bh
(분, BCD), scb$base+5Ch
(초, BCD)69h
(T_GET
):[74] word
(1978년 1월 1일 이후 날짜 수), byte
(시, BCD), byte
(분, BCD), byte
(초, BCD)DATE / TIME
INT 21h, AH=2Ch SYSTEM TIME
[75] / INT 21h, AH=2Ah SYSTEM DATE
[76]CFAbsoluteTimeGetCurrent()
[77]CFAbsoluteTimeGetCurrent()
[78][79][80]SYS$GETTIM()
STCK
[81]date
/ Time.h
1970년 1월 1일 ~ 2038년 1월 19일
1970년 1월 1일 ~ 292,277,026,596년
gettimeofday()
clock_gettime()
GetSystemTime()
GetSystemTimeAsFileTime()