E D R , A S I H C RSS

2038년 문제

last modified: 2015-04-03 03:14:05 by Contributors

Contents

1. 개요
2. 시간을 역행한다.
3. 해결책?
4. 기타
5. 참고항목

1. 개요

(ɔ) Monaneko from


컴퓨터의 시계가 UTC 0 기준, 2038년 1월 19일 3시 14분 7초(대한민국 표준시 UTC+9 기준, 2038년 1월 19일 12시 14분 7초)가 지나는 순간 음수값이 적용되어 1901년 12월 13일 20시 45분 52초나, 자동적으로 오류를 감지하고 초기값인 0, 즉 1970년 1월 1일 0시 0분 0초로 돌아가게 되는 버그를 칭한다. 영어로는 Year 2038 problem, Unix Millennium bug 등으로 표기한다.

즉 2038년 1월 19일 새벽 3시경(대한민국에선 2038년 1월 19일 정오쯤)에 32비트 규격의 모든 컴퓨터의 시간이 136년 전 혹은 68년 전으로 돌아간다

2. 시간을 역행한다.

컴퓨터에서 사람들이 사용하는 그레고리력 시간을 계산하는 방법은 여러가지가 있는데, 가장 많이 쓰는 방법이 유닉스 운영체제에서 채용한 유닉스 시간(Unix Time 또는 POSIX Time)이다. 여기서 사용한 방식이 32비트 크기의 정수형으로 시간을 나타내는 변수를 선언하고 초당 1씩 증가하게 처리하였다. 이로 인해 값이 32비트 크기의 표현한계인 2,147,483,647까지 증가한다면 더이상 증가할 값이 없게 된다. 컴퓨터에서는 이런 표현범위의 초과현상(Overflow 현상)이 발생할 경우 해당범위의 최소값으로 돌아가는 식으로 처리되는 특징이 있다. 간단하게 값(x)의 범위가 0≤x≤99 일때 99 다음의 수는 100이 아니라 0이 되는 식이다.밀레니엄 버그 시즌2

이로 인해 2038년 1월 19일 3시 14분 7초가 지나면 유닉스 시간의 맨 처음 시간으로 돌아가게 된다. 요컨데 컴퓨터의 시간이 과거로 역행하게 된다. 그로 인해 컴퓨터의 각종 연산에 문제를 줄 수 있다. 좀 오바질이 될 수도 있지만 과거 Y2K 문제에서 언급됐던 그런 현상들이 발생할 가능성이 있다. Y2K는 사람이 헷갈리는 거지만 이건 기계가 헷갈리는 거니까 진짜로.

시간을 나타내는 변수를 32비트 크기가 아니라 64비트 크기의 정수형으로 바꾸면 되긴 하지만 말처럼 쉬운게 아니란 점이 골치거리. 아직까지 많은 OSCPU들이 32비트 아키텍처[1]인 상황인데다가, 시간을 표현하는 변수의 형식을 그냥 막 바꿔버리면 기존에 구현했던 알고리즘들도 꼬이고 각종 호환성 크리가 터질 수 있어서 골치거리다.

정수형을 부호 없는 정수형(Unsigned Integer)으로 바꾸면 2106년까지 늦출수 있다. 음수 부분이 없이 0부터 시작하므로 4,294,967,295까지 증가하기 때문이다. 물론 이렇게 하면 음수부분의 시간이 없어지므로 Unix Time 0에 해당하는 1970-01-01 이전의 시간을 셀 수 없으므로 문제가 역시 있는건 마찬가지.

3. 해결책?

하지만 컴퓨터 업계쪽 사람들은 의외로 느긋하게 생각하고 있는데 현재 컴퓨터들이 64비트 아키텍처와 시스템으로 넘어가는 단계이기 때문에 시간이 좀 흐르고나면 저절로 해결될 것이라 생각하고 있다. 유닉스 시간을 설계하던 당시에도 이 문제를 알고 있었지만 "후손님들이 그 전에 알아서 잘 해결할거야"였다나 뭐라나(…). 하지만 이미 현실에서는 문제가 발생하고 있다. 바로 미래를 다루는 구형 시스템들. 예를 들어 연금보험을 2038년 문제를 보정하지 않은 구형 시스템으로 처리할 경우 1977년생이 만 61세부터 보험을 탈 수 있다고 가정하면 바로 2038년(!)에 첫 연금을 수령하게 된다. 수령 예상액 등을 미리 계산해보면 이 사람은 태어나기도 전인 1970년에 연금을 수령하는 꼴이 된다(...) 물론 국내 시스템은 2038년 문제가 없다고 봐도 된다. 중국에서는 국내 소프트웨어를 이용해 시스템을 구축하고 상용화하기 이전에 테스트를 통해 2038년 문제를 감지하고 수정 버전을 요청한 적이 있다.

일단 64비트 시스템에도 숫자를 표시할 수 있는 한계는 여전히 있으므로 이대로 간다면 2922억 7702만 6596년 문제가 발생하게 되지만 아직 이 문제를 진지하게 제기한 사람은 없다.근데 그정도면 우주의 나이도 아득히 초월하는데 그때까지 인류가 존재하긴 할까? 그땐 4096비트라도 쓰겠지 그 때 정도면 후손님들이 알아서 잘 해결할거야. 살아있다면 말이지. 닥터후 보니까 50억년이면 우주 종말이던데?

사실 있다. 믿으면 골룸. 마야 달력2012년과 유닉스 시간을 빗댄 만화다.
Calendar.jpg
[JPG image (50.01 KB)]


수천년 전 마야 왕국에서...
- 2012년 12월 21일 이후 날짜를 새길 석판이 없어요.
- 괜찮아. 누가 그렇게 먼 미래 달력이 필요하겠어?
오늘날
- 맙소사. 세상이 2012년 12월 21일에 멸망하려나봐. 마야 달력 마지막날이야.
- 응. 뛰어난 사람들이 많았지. 아마 맞을거야.

몇년전.
- 컴퓨터에서 시간을 어떻게 표기할까?
- 64비트 정수를 쓰자. 누가 그렇게 먼 미래까지 기록하겠어?
292277024641년 후
- 젠장. 세상이 292277026596년 12월 4일에 멸망하려나봐. 유닉스 날짜 마지막날이야.
- 응. 뛰어난 사람들이 많았지. 아마 맞을거야.


292277026598년이면 현재 이론상 우주 망하고도 한참 지난거다.. 그쯤되면 모든별이 핵융합 끝내고 블랙홀로 뭉쳐져있을것이다 [2][3]
사실 쟤넨 다른 우주에 사는거다.

4. 기타


  • 강남스타일유튜브 조회수가 32비트에서 처리할 수 있는 정수의 최대값(2,147,483,647)을 넘기면서 마우스를 올리면 조회수가 음수로 표기되는[4] 이스터 에그가 등장했다. 유튜브 측에서는 미리 예측하고 64비트로 업데이트해놨다고.

  • 아주 예전에 만들어진 게임들을 하다보면 만렙 찍고나서 다시 0렙이나 1렙 또는 기괴한 렙이 나오는 현상이 있었는데 이 문제와 같은 원인에서 발생하는 것이었다. 극단적인 예로, 8비트에서 127 다음에 -128로, 혹은 255 다음에 0으로 넘어가는 문제가 있다.

  • 페이스북도 이 문제를 가지고 있다. time_t 를 unsigned 타입으로 바꾼 것 같지만... 아직 32-bit 로 추정된다.

  • 2033년 문제 와는 관계가 없다. 그것은 음력에 대한문제.
  • 이와 아주 유사한 문제로 497일 문제 라는 것도 있다. 해당항목 참고.

  • 128비트로 바꿔서 2922억 년 문제를 넘어간다 해도 128비트에도 엄연한 한계는 존재한다. 물론 약 539[5]이 지나야 하므로 지금 거론하기에는 말도 안 되는 문제이다.
  • 더더욱 말도 안되는 이야기로 흘러가자면, 256비트는 약 1.84 * 1069 년, 512비트는 2.12 * 10146[6], 1024비트는 2.84 * 10300 년, 2048비트는 5.12 * 10608 년 후에 문제가 발생한다. 표로 만들자면 아래와 같다.

우주에서 일어날 사건은 위키백과를 참조하였다.

비트 수별로 유닉스 오버플로 문제 발생 년 우주에서 일어날 사건
비트 연도 사건의 내용
32비트 2038년 가까운 미래
64비트 2922억 년 우주가 이때까지 살아 있다고 가정할 경우 중소 규모 적색 왜성들만 남아있게 된다[7].
128비트 539양 년 1. 은하가 블랙홀에 의해 소멸된 이후
2. 양성자 붕괴의 반감기로서 제시되는 값 중 하한선의 절반 값[8]
256비트 1.84 * 1069 터널 효과[9]로 인하여 모든 물질들이 절대영도에서 액체상을 띠게 된 이후
512비트 2.12 * 10146 초대질량 블랙홀이 붕괴하고도 한참 뒤이다.
1024비트 2.84 * 10300 양성자가 안정하다고 가정할 경우 모든 물질들이 철이 되고도 한참 뒤이다.
2048비트 5.12 * 10608
4096비트 1.65 * 101225
8192비트 1.73 * 102458
16384비트 1.88 * 104924
32768비트 109871.6497

2922억년 까지 가기 전에 역법이 바뀔수도 있다. 연방력이라던지, 황제력이라던가..
----
  • [1] 사실 CPU는 오래 전부터 64비트로 갈아탔다(AMD 셈프론 시리즈, 인텔 펜티엄D 시리즈부터 지원). OS가 문제인 것.
  • [2] 모든 별이 핵융합이 끝나는 기간이 약 100조년 정도로 추측되니 망하려면 멀었다. 물론 그때까지 인류가 살아있을 확률은..
  • [3] 열린 우주의 경우 무한히 팽창하나, 정말 멀리 잡자면
    $10^{10^{76}}$
    (1010000000000000000000000000000000000000000000000000000000000000000000000000000) 년이 지나면 모든 물질이 블랙홀이나 중성자성으로 완벽히 붕괴되며
    $10^{10^{100}}$
    년이 지나면 가장 거대한 블랙홀도 증발하며
    $10^{34}$
    년이 지나면 양성자가 붕괴해 원자로 이루어진 별들이 모두 사라진다
  • [4] 즉 조회수는 정상적으로 나온다.
  • [5] 우주 나이의 4 배에 달하는 시간. 참고로 이 시간은 양성자 붕괴의 반감기로 추정, 제시되는 예측치 중 하한선(1031년. 상한선은 1036년)의 절반 값이다. 풀어 쓰면 5,390,000,000,000,000,000,000,000,000,000년.
  • [6] 이미 여기서 우주의 수명(10108년)을 넘어갔다. 이 정도면 모든 별이 핵융합 끝내고 은하 중심의 초거대 블랙홀이 은하를 모두 흡수한 후, 그 블랙홀들이 모두 증발한 후이다. 즉, 우주가 완전히 정지한 후이다. 만약 이 기간 동안 블랙홀이 존재하려면, 블랙홀의 질량이 1055 kg 정도 되어야 한다. 참고로 우주의 질량은 1053 kg 정도로 추정되고 있다.
  • [7] 상대적으로 큰 적색 왜성들은 파랗게 되어 있거나 그렇게 되어가고 있을 것이다. 꽤 큰 규모의 적색 왜성들은 백색 왜성이 되어(가고) 있을 것이다. 이론상의 존재인 흑색 왜성이 넘쳐나는 시점이라는 건 덤.
  • [8] 우주가 이때까지도 살아있을 것을 전제로 하한선을 기준으로 계산할 경우 128비트 오류가 발생할 시점에서는 전 우주에 존재하는 양성자가 약 30% 정도(0.50.539≒0.6882) 사라져 있을 것이다.
  • [9] 원자핵의 핵자가 자신을 붙잡는 핵력보다 낮은 에너지를 얻고도 바깥으로 튀어 나가는 현상. 대표적인 예로 알파입자가 있다. 알파 붕괴는 알파입자가 원자핵으로부터 뛰쳐나가는 것처럼 보이지만, 실제로는 확률적으로 일어나는 일이다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2015-04-03 03:14:05
Processing time 0.1459 sec