2000 年问题:修订间差异
跳转到导航
跳转到搜索
无编辑摘要
正义羊-JRJSheep(讨论 | 贡献) (创建页面,内容为“thumb|300px|2000 年问题实例,法国南特中央理工学院的 LED 显示屏将 2000 年 1 月 3 日错误显示为 1900 年 1 月 3 日 2000 年问题(Year 2000 Problem,也称作 Millennium Bug 或 Year 2000 Bug,简称 Y2K),通常称作“千年虫问题{{efn|千年虫实际上是由 2000 年问题的英语名称 Millennium Bug 直译而来,在英语中,Bug 除了本义“虫子”之外,还可以指代……”) |
正义羊-JRJSheep(讨论 | 贡献) 无编辑摘要 |
||
| 第 3 行: | 第 3 行: | ||
进入到 20 世纪 90 年代,2000 年问题逐渐通过媒体传播引起人们对它的关注,但是同时也引发了人们对此问题的恐慌。随后,针对此问题的全球性大规模修复开始,全世界为修复此问题前后在接下来的数年内累计投入约 3080 亿美元,在持续数年的修复之后,此问题最终得到有效解决,没有在新千年到来之际大规模爆发。 | 进入到 20 世纪 90 年代,2000 年问题逐渐通过媒体传播引起人们对它的关注,但是同时也引发了人们对此问题的恐慌。随后,针对此问题的全球性大规模修复开始,全世界为修复此问题前后在接下来的数年内累计投入约 3080 亿美元,在持续数年的修复之后,此问题最终得到有效解决,没有在新千年到来之际大规模爆发。 | ||
== 问题由来 == | |||
2000 年问题实际上并非电脑病毒,它只是一个计算机程序在日期表示上的缺陷,并不是一个恶意编写的电脑病毒。2000 年问题最早始于 20 世纪 50~60 年代,当时的计算机存储器价格极为昂贵,且容量很小,早期的磁芯存储器单位价格平均为 1 美元/比特,同时期一块容量仅为 1 MB 的硬盘价格为 761000 美元。当时的计算机极为早期,仍然使用打孔卡存储和输入数据,最常见的 IBM 打孔卡仅有 80 列宽,能够储存的数据也极其有限。正因为如此,程序员在编写程序时需要尽可能的节省存储空间,最大程度降低存储成本。因此,当时的程序员普遍在编写程序时使用六位数字存储时间,且只取年份中的后两位表示年份(例如,1976 年 10 月 29 日在这种格式下被简短存储为 23/10/76 或 10/23/76)。 | |||
在当时的情况下,使用六位数字表示日期的六位数日期表示法有一个很大的作用就算能够减小程序的内存需求,减少一个程序要占用的打孔卡卡数。这种做法实际上沿袭自更早之前的制表机时代,当时的操作人员就已经在打孔卡上使用六位数日期来节省时间和空间。在处理大量日期数据时,六位数日期表示法还可以发挥更大的作用。例如,一家拥有一千万客户,每个客户每天交易三次的银行如果要在计算机中存储一周之内所有客户的交易时间,只取两位数年份能够为银行节省60MB的存储空间。 | |||
随着科技的发展,到了20世纪70年代,磁芯存储器的单位价格逐渐下降到1美分/比特,同时,同样价格,但是尺寸更小且更加便于使用的DRAM开始逐步替代磁芯存储器,打孔卡也同样逐渐被淘汰。存储技术的进步以及其价格的大幅降低,使得存储空间不再是一个紧迫的问题,在程序之中使用六位数日期的必要性也越来越低,但是并没有就此退出历史舞台。出于程序员们的习惯,并为了保持向上兼容,此种表示法继续沿用。即使当时就已经有人提出此种日期表示法潜在的问题,但是当时的程序员普遍都认为自己编写的程序不可能被持续使用到新千年,自然没有人理会这些警告。 | |||
六位数日期表示法虽然的确在节省存储空间上发挥了作用,但是这种模糊的表示方法也为未来埋下了隐患。人们在日常生活中为了方便有时也会只用两位数简称年份,但是计算机和人类的区别在于,人类拥有理解并补全前两位年份数字的能力,但是计算机没有这种能力。它们只会读取实际写出来的后两位年份,不会,也无法自行变更没有实际写出来的前两位年份数字。在六位数日期下,2000年1月1日表示为01/01/00,然而由于前两位没有实际写出来,自然也就无法变更。计算机始终会在这种情况下默认年份前两位为19,这样会导致计算机将2000年错误认为是1900年,认为这个时候要早于1999年。这会引发计算机在涉及这部分的任务执行时出错,甚至崩溃。如果不对此问题进行修复,类似的故障将会在2000年到来时全球爆发,所有依赖这些老旧的计算机运作的基础设施、军政机关都会受到影响,导致轻则停电停水,重则医疗瘫痪,甚至导弹误射等一系列灾难性后果。 | |||
== 注 == | == 注 == | ||