О надёжности компьютерного программного обеспечения
stalinist — 16.06.2024
Программизм сейчас создаёт настолько сложные программные продукты,
что в их надёжности уже невозможно быть уверенным. Программные
дефекты Microsoft Windows стали притчей во языцех, но
никакой сколько-нибудь серьёзный программный продукт не может
гарантировать, что в нём нет дефектов. По этому поводу шуточная
программистская аксиома гласит: "В каждой программе есть по крайней
мере одна ошибка." Да и почти у всех приборов есть сзади дырочка,
куда нужно засунуть шпильку и сбросить состояние прибора к
исходному тогда, когда его программное обеспечение отчаялось выйти
из тупика, куда его завели программные дефекты. По этой же причине
производители выпускают "сырые" программные продукты с перспективой
их периодического обновления, так как полностью их испытать в
мириадах сценариев очень часто невозможно или, по крайней мере,
непрактично, поскольку очень трудоёмко и никогда не даёт
гарантии.А сейчас я наткнулся на интересное, по существу, признание о том, что некоторые широко распространённые программистские практики считаются слишком рискованными, чтобы их можно было применять в системах, требующих высочайшей надежности:
Besides, I was trained to never use the heap/malloc in embedded systems. Most coding standards for critical aerospace systems http://www2.research.att.com/~bs/JSF-AV-rules.pdf 1 and motor vehicle coding standards like MISRA have statements like this:Здесь, по существу, говорится, что динамическое выделение оперативной памяти (RAM) запрещено в аэрокосмических системах и в программном обеспечении автомобилей, а такое выделение -- краеугольный камень пресловутого объектно-ориентированного программирования, например, на языках вроде C++. Проблема с динамическим выделением памяти, то есть с ситуацией, когда программный код сам вычисляет, сколько дополнительной памяти ему требуется в данный момент, состоит в том, что невозможно оценить тот максимум потребной памяти, которая может быть запрошена в процессе исполнения программы, а этот максимум может превысить доступную память, что приведёт к аварийному -- неуправляемому и неисправляемому -- состоянию программы.
MISRA C++ rule 18-4-1, dynamic heap memory allocation cannot be used.
Другая проблема с динамическим выделением памяти -- так называемая "утечка памяти", когда процессы занимают память как бы на время, но "забывают" её освобождать, создавая растущее количество сегментов "мертвой" памяти, то есть памяти, выключенной из оборота, что, в свою очередь, может привести к аварийному останову из-за недостатка доступной памяти. Кстати, я сейчас пишу это в браузере Firefox, который с течением времени занимает всё больше и больше памяти, доходя до гигабайтов, что, как минимум, может сильно замедлить другие процессы.
|
|
</> |
Как проходит пломбирование зуба: этапы процедуры и выбор материалов
Дача Рябушинских в Вышнем Волочке
Юбилейный рейс Поезда Деда Мороза
"Запретные" технологии прошлого на территории Москвы.
Кафа неизвестная — Доковая... — этот день в блоге
Ужин
Как Louis Vuitton в китайскую культуру вкладывается
Поддельная роскошь
Валентин Левитин и Владимир Гоосс

