到2038年一个重大错误将揭示信息技术的脆弱性
但是过了此日期和时间,计算机将因内存和文件很难正确表示时间或是长期以来的计算疏忽发生功能故障,即著名的“2000年问题(千年虫)”中遇到的那样。
错误或编程问题?
“这不是一个缺陷,而是一个编程问题,因为没有人期望这些程序能够持续数十年,”法兰西学院的计算机科学家兼工程师杰拉德·贝里说。
计算机程序中的年份条目由2个数字而不是4个数字组成,以减少所使用的内存量。但是在2000年1月上旬,由于计算机没有显示整个年份的编程,年份从99年转到00年时恢复为零,这一故障使世界面临着史无前例的经济灾难风险。
纠正这个问题需要大量的人力和财力投资,例如,美国花费了大约1000亿美元来预防和克服“2000年问题”。 具体日期
2000年首次出现该问题后,38年后可能会再次发生类似问题,但是规模很小,这次危机也与操作系统和软件的时间信息储存方式相关。
当前模式比上个世纪更准确,但这并不能消除发生此类问题的可能性。当前情况下,时间是指自特定日期(即1970年1月1日世界标准时间00:00:00)以来经过的秒数。
十进制整数的范围有限,32位编码似乎绰绰有余。32位有符号整数存储计算的秒数,加号表示特定时间之后的秒数,减号表示之前的秒数。
问题在于,32位编码不足以容纳2038年1月19日下午03:14:07之后的秒数,从而变成第-2147483648秒,因此世界可能目睹时光倒流回到1901年。
为避免此难题,只需将日期编码为64位(这是当前计算机组件的标准),就可以将时钟的过期日期延迟2920亿年,大约是宇宙年龄的20倍。
为简化“2038年问题”,假设有一个计数器,其中包含32个单元,每个单元显示一个数字,该计数器已复位到1970年。从该日期起,计数器会自动递增以计算秒数,但是在2038年,计数器将达到峰值,无法容纳更多秒数,只有增加计数单位才能继续工作,否则,它会清零并重新启动,从1901年计时。
此错误已在最常见的操作系统(例如使用64个编解码器的Unix,Linux、Windows和Mac OS)中得到纠正,但是在某些程序(例如Mysql数据库)中,日期仍以32位编码。
对于较早版本的操作系统以及难以更新的嵌入型系统的计算机而言,情况也是如此。
这意味着计算机处于不安全状态。2019年1月1日,瑞士许多医院的病房中呼叫按钮管理系统发生故障,所有铃铛都被静音。
该问题很快得到避免,正如2010年冬天美国iPhone 4手机发生的情况一样,警报响了一个小时。当年1月1日,一个错误导致超过2000万张支付卡在德国被冻结数天。
2007年发生的另一起事件是时间变化导致8架F-22战斗机失去控制 (路透)
失去控制
贝里警告说,不良的时间管理可能会带来悲剧性的后果。1991年2月在达兰,美国爱国者导弹未能拦截一枚伊拉克飞毛腿导弹,爆炸导致28名士兵死亡,98人受伤。爱国者导弹的时间管理发生了故障,飞机的计算机被迫每4小时重新启动一次。
作者提到了2007年2月发生的另一起事件,当时,洛克希德·马丁公司生产的8架F-22猛禽隐形战机越过夏威夷以西的国际日期变更线,系统故障导致美国空军失去了对它们的控制权。
贝里强调,随着现代微处理器的使用,时间管理已经变得更加复杂,20或30年前很容易预测实现该程序需要多长时间,如今,许多调整是在芯片内部独立进行的,因此这既困难又伟大。