第1024次保存后,我发布了字处理器来格式化硬盘

告诉初学者讲故事的人您曾经一度被严重搞砸了,是帮助他们应对冒名顶替综合症的好方法

大概是1984-1985年。那时我是25岁的初出茅庐的程序员,拥有5年的经验。我和另一个程序员编写并支持了一组类似于当今Office的应用程序:电子表格,文字处理器,数据库,绘图仪等。我们为三到四个垂直市场设置了整个系统[ 高度专业化的商业客户/大约佩雷夫。 ]。

我自己写了大部分文字处理器。我在,以及OS和处理器的各种组合。年轻人并不熟悉,但是在那几天,每隔几个月就会出现带有自己的特殊操作系统和几种处理器选项之一的新型微型计算机。

Fort使用磁盘与块数据交换。每个块的长度为1 kb,为了节省超过1 kb的空间,有必要使用文件的主块,其中存储了所有包含数据的块的偏移量-实际上,它是几个已占用和未占用块的列表。

要初始化该主块,必须用零填充。好吧,它开始了。简而言之,我更改了应用程序,使其支持的文件大小是以前的两倍-而不是主块中的256个元素,而是显示了1024个,

每个条目占用了-注意-16位中的一个字。因此,如果512个单词仍然适合我的1 kb主块,则1024个单词已经需要使用两个块。

因此,我更改了填充零的块数,但没有更改缓冲区大小。并且,当您使用不受保护的内存时,如果您在1024个字节的空间中写入2048个零,则剩余的字节将覆盖它们在内存中发现的任何随机垃圾。

就我而言,任何随机垃圾被证明是OS磁盘的主要块。是的...当我初始化一个新文件时(在写入一个块的文件时每1024次发生一次),我覆盖了磁盘的主块,从而删除了该文件中的所有文件。

当然,我们发布了此版本,该版本已经运行了8-9周。您可以想象我们必须收到的来自客户的电话数量。最后,我们建议每个人每天保留备份(顺便说一下,使用录像带)。

在调试器中一次又一次地运行我的程序时,我花了很多星期只是通过电话道歉。我没有成功。没有。

然后,一个女人打电话给她并用五颜六色的文字描述-她从事货运工作,所以我现在积极使用她在亵渎领域的例子-她制作了一个备份副本,启动了文字处理程序,然后他立即清理了磁盘。她再次下载了备份,处理器再次立即擦除了磁盘。她很生气。

而且,想像一下,我花了两个小时才了解自己的幸运。我在晚餐时向我的同事讲了这个故事,然后它突然出现在我面前-停下来。停止。立刻?每次?

我打电话给她,并答应了所有尘世的祝福,只要她能把这盒录像带打包并寄给我们。我答应她支付运输费用并取消我们的服务每月付款(我的老板毫不犹豫地说道:“是的,地狱,我们将取消她的付款”)。

最后,我能够重现此错误。她没有作弊。她保存的备份已成为关键时刻:创建时已备份1023个备份。下载备份,保存文件,然后保证驱动器已清理。

也许我有点夸张,但是,我认为,当我们拿到电影的那天早上,我发现了问题。在调试器中很容易找到它。

我看了一个应该写入的2 kb块,最后1 kb充满了某种垃圾。对我来说这很奇怪,我开始理解。而且,当然,这不是垃圾-操作系统在我的文件主块旁边存储的是磁盘主块的1024字节。

我在内核“之前”有一个备份-我没有核心转储,但这为我提供了一种解决此缺陷的有保证的方法。如果我不走运,我将找不到他。我根本不会猜到我不是在内存中而是在系统中写作。

因此,是的-您的“大师级”怪胎发布了一个文字处理程序,在每保存1024次后,它会在八到九周内格式化客户的硬盘驱动器。因为,我是一个工匠。

您可以在这个故事中找到很多道德方面的知识,但是对于任何一个初级学生来说,这都是两个主要的道德问题:

  1. 切勿在代码中写数字常量(0、1,和-1除外)。
  2. 不要对自己太苛刻。您所有明智的前辈都有类似的故事,其中一些故事很多。

All Articles