閏秒 @ 2005-12-31 23:59:60 UTC

Posted by yoosee on Debian at 2006-01-01 23:42 JST

*1  うるう秒 at /var/log/messages

今年の日本の1月1日は うるう秒 で 1秒長かったわけだが、/var/log/messages にしっかりそのメッセージが残っていた。
Jan  1 08:59:59 one kernel: Clock: inserting leap second 23:59:60 UTC
ん、と言うことはこれは linux kernel 内に処理コードがあると言うことか。それで見てみると、kernel/timer.c に処理が入っているようだ。
case TIME_INS:
  if (xtime.tv_sec % 86400 == 0) {
    xtime.tv_sec--;
    wall_to_monotonic.tv_sec++;
    /*
     * The timer interpolator will make time change
     * gradually instead of an immediate jump by one second
     */
    time_interpolator_update(-NSEC_PER_SEC);
    time_state = TIME_OOP;
    clock_was_set();
    printk(KERN_NOTICE "Clock: inserting leap second "
   "23:59:60 UTC
");
処理は 1sec のジャンプじゃなく clock を微妙に遅くすることで処理してるらしい。基本的にうるう秒は明確なロジックで挿入されるものではないので(そもそもが原子時計と地球公転速度のずれを補正するため)、kernel 内で TIME_INS に落ちる条件をもう少し追おうかと思ったけど根気が尽きたのでここまで。

( Permalink | Comments (0) | tags: misc  )
Comments

Please write your comment. email address won't appear. Cannot use any HTML tags in comment.
コメントをお書き下さい。メールアドレスは公開されません。 またHTMLタグは利用できません。
Name   E-mail   URL
Comment

About W.W.Walker

World Wide Walker は yoosee による blog です。PDA, Web・サーバ技術, 美味しい食べ物などの話題を取り上げています... read more

このエントリーのブックマーク

Monthly Archives

Select Month to read