Lancé un procesador de texto formateando el disco duro después de cada 1024

Contarles cuentos para principiantes sobre cómo una vez te equivocaste seriamente es una buena manera de ayudarlos a lidiar con el síndrome del impostor .

Probablemente fue 1984-1985. Entonces era un programador incipiente de 25 años con cinco años de experiencia. Yo y otro programador escribimos y apoyamos un conjunto de aplicaciones similares a las de la oficina actual: hojas de cálculo, procesador de textos, base de datos, trazador, etc. Configuramos todo este sistema para tres o cuatro mercados verticales [ clientes comerciales altamente especializados / aprox. perev. ]

Yo mismo escribí la mayor parte del procesador de textos. Escribí en Fort, y para varias combinaciones de sistemas operativos y procesadores. Los jóvenes no están familiarizados, pero en esos días, aparecían nuevos microordenadores con su propio sistema operativo especial y una de varias opciones de procesador cada pocos meses.

Fort utilizó el intercambio de datos de bloque con el disco. Cada bloque tenía una longitud de 1 kb, y para guardar algo más de 1 kb, tenía que trabajar con el bloque maestro del archivo, donde se almacenaban las compensaciones de todos los bloques con datos; de hecho, era un par de listas de bloques ocupados y desocupados.

Para inicializar este bloque maestro, tenía que rellenarse con ceros. Bueno, ya empezó. En resumen, cambié la aplicación para que admitiera archivos dos veces más grandes que antes, y en lugar de 256 elementos en el bloque maestro, apareció 1024.

Cada entrada tomó - atención - una palabra de 16 bits. Por lo tanto, si 512 palabras todavía caben en mi bloque maestro de 1 kb, entonces 1024 palabras ya requieren el uso de dos bloques.

Por lo tanto, cambié el número de bloques llenos de ceros, pero no cambié el tamaño del búfer. Y cuando trabaje con memoria desprotegida y escriba 2048 ceros en el espacio de 1024 bytes, los bytes restantes sobrescribirán cualquier basura aleatoria que encuentren en la memoria.

En mi caso, cualquier basura aleatoria resultó ser el bloque maestro del disco del sistema operativo. Sí ... Y cuando inicialicé un nuevo archivo, que sucedió cada 1024 veces al escribir un archivo de un bloque, sobrescribí el bloque maestro del disco, que eliminó todos los archivos.

Y, por supuesto, lanzamos esta versión, que funcionó durante 8-9 semanas. Y puede imaginar la cantidad de llamadas de clientes que tuvimos que recibir. Al final, aconsejamos a todos que mantuvieran copias de seguridad (lo que se hizo, por cierto, usando cintas de video) todos los días.

Pasé muchas semanas disculpándome por teléfono mientras ejecutaba mi programa en el depurador una y otra vez. Y no tuve éxito. Nada.

Y luego una mujer llamó y describió en términos coloridos, y ella trabajó en el transporte de mercancías, así que ahora uso activamente sus ejemplos del campo de la blasfemia, que hizo una copia de seguridad, lanzó un procesador de textos e inmediatamente limpió su disco. Volvió a descargar la copia de seguridad y el procesador volvió a borrar su disco de inmediato. Ella estaba furiosa.

Y, imagina, me tomó dos horas enteras entender cuán afortunado fui. Le conté esta historia a mi colega en la cena, y luego me di cuenta: para. Detener. ¿En seguida? ¿Cada vez?

La llamé y le prometí todas las bendiciones terrenales, si tan solo ella empacara este cassette y nos lo enviara. Le prometí que pagaría los costos de envío y cancelaría los pagos mensuales por nuestros servicios (mi jefe no dudó ni un segundo: "Sí, demonios, cancelaremos sus pagos").

Y finalmente, pude reproducir este error. Y ella no hizo trampa. Esa copia de seguridad que guardó resultó estar en un punto crítico: 1023 copias de seguridad en el momento de la creación. Descargue la copia de seguridad, guarde el archivo y se garantiza que la unidad se limpiará.

Tal vez estoy exagerando, pero, en mi opinión, encontré el problema la misma mañana cuando obtuvimos la película. Fue muy fácil encontrarlo en el depurador.

Miré un bloque de 2 kb que se suponía que estaba escrito, y el último 1 kb estaba lleno de algún tipo de basura. Me pareció extraño y comencé a entender. Y, por supuesto, no era basura: eran 1024 bytes del bloque maestro de disco que el sistema operativo almacenaba junto al bloque maestro de mi archivo.

Obtuve una copia de seguridad "antes" del kernel; no tenía un volcado de núcleo, pero me dio una forma garantizada de llegar a este defecto. Si no tuviera suerte, no lo habría encontrado. Simplemente no habría adivinado que estaba escribiendo no en mi memoria, sino en el sistema.

Entonces, sí, su geek "maestro" ha lanzado un procesador de texto, que dentro de ocho a nueve semanas ha formateado el disco duro del cliente después de cada 1024º guardado. Porque, bueno, soy artesano.

Puedes encontrar mucha moralidad en esta historia, pero aquí hay dos principales para cualquier junior:

  1. Nunca escriba constantes numéricas excepto 0, 1 y -1 en su código.
  2. No seas tan duro contigo mismo. Todos tus mayores sabios tienen historias similares, y algunos de ellos tienen muchas.

All Articles