J'ai publié un traitement de texte formatant le disque dur après chaque 1024e sauvegarde

Raconter aux ingénieurs débutants comment vous avez une fois sérieusement foiré est un bon moyen de les aider à faire face au syndrome de l'imposteur .

C'était probablement 1984-1985. Ensuite, j'étais un programmeur en herbe de 25 ans avec cinq ans d'expérience. Avec un autre programmeur, j'ai écrit et pris en charge un ensemble d'applications similaires à Office d'aujourd'hui: feuilles de calcul, traitement de texte, base de données, traceur, etc. Nous avons mis en place tout ce système pour trois à quatre marchés verticaux [ clients professionnels hautement spécialisés / env. perev. ].

J'ai écrit la plupart du traitement de texte moi-même. J'ai écrit au fortet pour diverses combinaisons de systèmes d'exploitation et de processeurs. Les jeunes ne sont pas familiers, mais à cette époque, de nouveaux micro-ordinateurs avec leur propre système d'exploitation spécial et l'une des nombreuses options de processeur sont sortis tous les quelques mois.

Fort a utilisé l'échange de données de bloc avec le disque. Chaque bloc avait une longueur de 1 ko, et pour économiser quelque chose de plus de 1 ko, il était nécessaire de travailler avec le bloc maître du fichier, où les décalages de tous les blocs avec des données étaient stockés - en fait, c'était une paire de listes de blocs occupés et inoccupés.

Pour initialiser ce bloc maître, il devait être rempli de zéros. Eh bien, ça a commencé. En bref, j'ai changé l'application pour qu'elle

prenne en charge des fichiers deux fois plus volumineux qu'auparavant - et au lieu de 256 éléments dans le bloc maître, 1024 sont apparus. Chaque entrée a pris - attention - un mot de 16 bits. Par conséquent, si 512 mots s'inscrivent toujours dans mon bloc maître de 1 ko, alors 1024 mots nécessitent déjà l'utilisation de deux blocs.

Par conséquent, j'ai changé le nombre de blocs remplis de zéros, mais je n'ai pas changé la taille du tampon. Et lorsque vous travaillez avec de la mémoire non protégée et que vous écrivez 2048 zéros en l'espace de 1024 octets, les octets restants écraseront tous les déchets aléatoires qu'ils trouveront en mémoire.

Dans mon cas, toute poubelle aléatoire s'est avérée être le bloc maître du disque du système d'exploitation. Oui ... Et lorsque j'ai initialisé un nouveau fichier, ce qui s'est produit toutes les 1024e fois lors de l'écriture d'un fichier monobloc, j'ai écrasé le bloc maître du disque, qui en supprimait tous les fichiers.

Et nous avons, bien sûr, publié cette version, qui a fonctionné pendant 8 à 9 semaines. Et vous pouvez imaginer le nombre d'appels de clients que nous avons dû recevoir. En fin de compte, nous avons conseillé à tout le monde de conserver des sauvegardes (ce qui, soit dit en passant, à l'aide de bandes vidéo) chaque jour.

J'ai passé plusieurs semaines à m'excuser par téléphone tout en exécutant mon programme dans le débogueur encore et encore. Et je n'ai pas réussi. Rien.

Et puis une femme a appelé et décrit en termes colorés - et elle travaillait dans le trafic de fret, donc j'utilise maintenant activement ses exemples dans le domaine du blasphème - qu'elle a fait une copie de sauvegarde, a lancé un traitement de texte et il a immédiatement nettoyé son disque. Elle a de nouveau téléchargé la sauvegarde et le processeur a de nouveau immédiatement effacé son disque. Elle était furieuse.

Et, imaginez, il m'a fallu deux heures entières pour comprendre ma chance. J'ai raconté cette histoire à mon collègue au dîner, puis elle m'est venue à l'esprit - arrêtez. Arrêtez. Immediatement? À chaque fois?

Je l'ai appelée et lui ai promis toutes les bénédictions terrestres, si seulement elle emballait cette cassette et nous la renvoyait. Je lui ai promis de payer les frais d'expédition et d'annuler les paiements mensuels pour nos services (mon patron n'a pas hésité une seconde: "Oui, bon sang, nous allons annuler ses paiements").

Et enfin, j'ai pu reproduire cette erreur. Et elle n'a pas triché. Cette sauvegarde qu'elle a enregistrée s'est révélée être à un point critique: 1023 sauvegardes au moment de la création. Téléchargez la sauvegarde, enregistrez le fichier et le lecteur est garanti pour être nettoyé.

J'exagère peut-être, mais à mon avis, j'ai trouvé le problème le matin même quand nous avons eu le film. C'était si facile à trouver dans le débogueur.

J'ai regardé un bloc de 2 ko qui devait être écrit, et le dernier 1 ko était rempli d'une sorte de poubelle. Cela m'a paru étrange et j'ai commencé à comprendre. Et, bien sûr, ce n'était pas des ordures - c'était 1024 octets du bloc maître de disque que l'OS stockait à côté de mon bloc maître de fichier.

J'ai obtenu une sauvegarde «avant» le noyau - je n'avais pas de vidage de mémoire, mais cela m'a donné un moyen garanti de résoudre ce problème. Si je n'avais pas eu de chance, je ne l'aurais pas trouvé. Je n'aurais tout simplement pas deviné que j'écrivais non pas dans ma mémoire, mais dans le système.

Donc, oui - votre geek «maître» a publié un traitement de texte qui, en huit à neuf semaines, a formaté le disque dur du client après chaque 1024e sauvegarde. Parce que, bon, je suis artisan.

Vous pouvez trouver beaucoup de morale dans cette histoire, mais en voici deux principales pour tout junior:

  1. N'écrivez jamais de constantes numériques sauf 0, 1 et -1 dans votre code.
  2. Ne sois pas si dur avec toi-même. Tous vos aînés sages ont des histoires similaires, et certains d'entre eux en ont beaucoup.

All Articles