2038年危机!“Unix千年虫”

2000年到来前,“千年虫”bug曾经引发了很大的恐慌,甚至不少影视剧中都有夸大的描写。不过在紧急磋商和“打补丁”之后,软硬件“无法正确处理2000年问题”的千年虫危机算是平稳度过了。但……事实真的如此吗?对于Unix类操作系统来说,它们其实还面临着同样的问题,那就是——2038年危机!(又称“Unix千年虫”)!!
Torvalds对于Linux内核中潦草的Unix千年虫bug补丁感到很不爽。该操作系统底层的日期数值,存储在一个32位的整数签名中,而起始点则是1970年1月1日(还记得iOS里往前调时间让iPhone变砖的bug吗?)。问题在于,32位整数将于2038年1月19号的03时14秒遭遇“溢出”,从而让系统错误地将时光“回滚”到了1901年的12月13日。或许有人觉得“问题怎么着也会在22年后才会发生”,但它对软件的影响其实迫在眉睫(尤其是规划未来事务的软件类型)。
随着时间的推移,我们将日期提前安排到2038年之后的情况会越来越多,而系统日期错乱所带来的影响亦将越发不可收拾——有鉴于此,该问题应该尽早全面解决。

不出所料的是,“Linux之父”Linus Torvalds一直对Linux内核代码变动保持着密切的关注,比如Arnd Bergmann所忧虑的虚拟文件系统内核切换接口(包含了百余由Deepa Dinamani打上的小补丁)。一向爽直的Torvalds曾猛喷过自己是“越看越不爽”。有趣的是,同样于数月前提交的一些变动,却还没有被审查。XFS专家Paul Chinner自称是系统文件开发者,他在看过代码后说到:在我试图让你重建补丁却被猛喷之后(正如Linus当前认为的那样),我撒手并没再看你们的补丁了。难怪没有其它文件系统维护者愿意把时间浪费在这件破事上面…
故事背景是大家希望给Linux内核带来预期中的高质量补丁,然而高层却无惧于开发者潦草了事(已有2次未通过审查),看来近期这些补丁代码是不会被提交到AI Viro的VFS分支作深入审查了。总的来说,Torvalds仍准备将未来25年投入到帮助Linux征战桌面的事业上,所以即使在“2038 bug”爆发后,他仍有3天的时间去为Linux的未来“纠偏护航”。
本文地址:http://www.linuxprobe.com/unix-2038-bug.html
时间: 2024-08-25 09:37:30

2038年危机!“Unix千年虫”的相关文章

千年虫 2038问题

千年虫问题: 计算机2000年问题,又叫做“千年虫”.“电脑千禧年千年虫问题”或“千年危机”.缩写为“Y2K”.是指在某些使用了计算机程序的智能系统(包括计算机系统.自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示,因此当系统进行(或涉及到)跨世纪的日期处理运 算时(如多个日期之间的计算或比较等),就会出现错误的结果,进而引发各种各样的系统功 能紊乱甚至崩溃.因此从根本上说千年虫是一种程序处理日期上的bug(计算机程序故障),而非病毒. “千年虫”问题的根源始于60年代.当时计算机存储

“千年虫问题”、“2038年问题”、什么是闰年

(1)先温习一下什么是闰年(Leap Year) 闰年是公历中的名词.闰年分为普通闰年和世纪闰年. 普通闰年:能被4整除但不能被100整除的年份为普通闰年.(如2004年就是闰年,1999年不是闰年); 世纪闰年:能被400整除的为世纪闰年.(如2000年是世纪闰年,1900年不是世纪闰年); 闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的.补上时间差的年份为闰年.闰年共有366天(1-12月分别为31天,29天,31天,30天,31天,30天

关于1970-1-1 00:00.000的知识【转】

转自:http://blog.csdn.net/tianzizhi/article/details/4547373 现在计算机和一些电子设备时间的计算和显示是以距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量为标准的,如1970-1-10 20:47 偏移量为2724441632毫秒,出现类似字样说明时间被初始化了. 小知识:格林威治标准时间GMT许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time,那么G

关于1970-1-1 00:00.000的知识

现在计算机和一些电子设备时间的计算和显示是以距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量为标准的,如1970-1-10 20:47 偏移量为2724441632毫秒,出现类似字样说明时间被初始化了. 小知识:格林威治标准时间GMT许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘上密密麻麻的英文单字代表着什么意义与作用呢?这些都是新手

【Java】有关System.currentTimeMillis()的思考

在Java中无须引入任何类利用System.currentTimeMillis()能够轻松地取出1970年1月1日到现在的毫秒数,利用它能够轻松产生时间戳,甚至import java.text.SimpleDateFormat; import java.util.Date;之后配合new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss E").format(new Date(System.currentTimeMillis())).toString();能够

mibox connections

tcp        0      0 :::52549                :::*                    LISTEN      4398/net.myvst.v2:mtcp        0      0 :::12581                :::*                    LISTEN      24307/com.moretv.antcp        0      0 :::6087                 :::*    

科普一下:Y2K千年虫问题

这周没有给定的博客主题,我就来科普科普在复习过程中遇到的感兴趣的问题吧~ Year 2000 problem(千年虫问题) The Year 2000 problem (also known as the Y2K problem, the Millennium bug, the Y2K bug, or simply Y2K) was a problem for both digital (computer-related) and non-digital documentation and da

洛谷 P2655 2038年问题

P2655 2038年问题 题目描述 网络时代,机会与危机共存.“千年虫”解决之后,会不会有新的“虫”出现?回答是肯定的,“2038年”就是一个新的关卡. 也许大家都已经知道计算机的2000年问题是什么概念,但是什么时候又冒出来一个2038年问题的呢? 用C语言编制的程序不会碰到2000年问题,但是会有2038年问题.这是因为,大多数C语言程序都使用到一个叫做“标准时间库”的程序库,这个时间库用一个标准的4字节也就是32位的形式来储存时间信息. 当初设计的时候,这个4字节的时间格式把1970年1

Java 获取 Unix时间戳

unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. 在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题. 但是,因为需求是需要int类型的UNIX时间戳. 开始的时候我是这样设计的. /** * 获取当前事件Unxi 时间戳 * @return */ public static int getUnixTimeStamp(){ long rest=System.currentTimeMillis()/1000L; return (i