Я Выпустил Текстовый Процессор, Который Форматировал Жесткий Диск После Каждого 1024-Го Сохранения.

Рассказывая начинающим инженерам истории о том, как вы когда-то серьезно облажались, — это хороший способ помочь им справиться с ситуацией.

синдром самозванца .

Это был, вероятно, 1984-1985 год. В то время мне было 25 лет, начинающий программист с пятилетним опытом.

Мы с другим программистом написали и поддерживали набор приложений, похожих на сегодняшний Office: электронные таблицы, текстовый процессор, база данных, плоттер и т. д. Мы настроили всю эту систему для трех или четырех вертикальных рынков [ узкоспециализированные бизнес-клиенты / ок.

перевод ].

Большую часть текстового процессора я написал сам.

я написал на Форте и для различных комбинаций операционных систем и процессоров.

Молодежь этого не знает, но в те времена каждые несколько месяцев выпускались новые микрокомпьютеры со своей специальной ОС и одним из нескольких вариантов процессора.

Форт использовал блочный обмен данными с диском.

Каждый блок имел длину 1 КБ, и чтобы хранить что-либо больше 1 КБ, приходилось работать с мастер-блоком файла, где хранились смещения всех блоков данных — по сути, это была пара списков, занятых и нераспределенных блоков.

.

Чтобы инициализировать этот мастер-блок, его нужно было заполнить нулями.

Ну, поехали.

Короче говоря, я изменил приложение так, чтобы оно поддерживало файлы вдвое большего размера, чем раньше — и вместо 256 элементов в мастер-блоке появилось 1024. Каждое вхождение занимало – внимание – одно слово из 16 бит. Следовательно, если в мой мастер-блок размером 1 Кб еще умещалось 512 слов, то для 1024 слов требовалось использование двух блоков.

Поэтому я изменил количество блоков, заполненных нулями, но не изменил размер буфера.

А когда вы работаете с незащищенной памятью и записываете 2048 нулей в 1024 байт пространства, оставшиеся байты перезапишут любой случайный мусор, который попадётся в памяти.

В моем случае мастер-блоком диска ОС оказался всякий случайный мусор.

Да.

И когда я инициализировал новый файл, что происходило каждый 1024-й раз, когда я писал одноблочный файл, я перезаписывал мастер-блок диска, что удаляло все файлы на нем.

И мы, конечно, выпустили эту версию, которая проработала 8-9 недель.

И вы можете себе представить, сколько звонков от клиентов нам пришлось получить.

В результате мы посоветовали всем каждый день сохранять резервные копии (что, кстати, делалось с помощью видеокассет).

Я провел много недель, просто извиняясь по телефону, снова и снова запуская свою программу через отладчик.

И у меня ничего не получалось.

Ничего.

А потом позвонила одна женщина и красочно описала - а она работала в грузоперевозках, так что я теперь активно использую ее примеры ненормативной лексики - что она сделала резервную копию, запустила текстовый процессор, и он сразу очистил ее диск.

Она снова загрузила резервную копию, и процессор тут же снова стер ее диск.

Она была в ярости.

И, представьте себе, мне понадобилось целых два часа, чтобы понять, как мне повезло.

Я рассказывал эту историю коллеге за обедом, когда меня вдруг осенило – стоп.

Останавливаться.

Однажды? Каждый раз? Я позвонил ей и пообещал все земные блага, лишь бы она упаковала эту кассету и отправила ее нам.

Я пообещал ей оплатить стоимость доставки и отменить ежемесячные платежи за наши услуги (начальник не колебался ни секунды: «Да, да, мы отменим ей платежи»).

И наконец, мне удалось воспроизвести эту ошибку.

И она не лгала.

Резервная копия, которую она сохранила, находилась в критической точке: на момент создания 1023 сохранения.

Скачайте резервную копию, сохраните файл и диск гарантированно очистится.

Возможно, я преувеличиваю, но мне кажется, что я обнаружил проблему в то же утро, когда получили пленку.

Это было так легко найти в отладчике.

Я смотрел на блок размером 2 КБ, который должен был быть записан, и последний 1 КБ был заполнен каким-то мусором.

Мне это показалось странным, и я начал в этом разбираться.

И, конечно же, это был не мусор — это были 1024 байта мастер-блока диска, который ОС хранила рядом с моим мастер-блоком файлов.

Я получил резервную копию ядра «до» — дампа ядра у меня не было, но это давало мне гарантированный способ добраться до этого дефекта.

Если бы мне не повезло, я бы никогда его не нашел.

Я бы просто не догадался, что пишу не в свою память, а в системную.

Так что да — ваш «мастер» компьютерщик выпустил текстовый процессор, который в течение восьми-девяти недель форматировал жесткий диск клиента после каждого 1024-го сохранения.

Потому что я «разнорабочий».

В этой истории много морали, но вот две основные для любого юниора:

Никогда не записывайте числовые константы в коде, отличном от 0, 1 и -1. Не будьте так строги к себе.

У всех ваших мудрых лордов есть похожие истории, а у некоторых их гораздо больше.

Теги: #ИТ-история #отладка #Системное программирование #память #fort #fort #fort #fort

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.