Несовместимость программного обеспечения
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( декабрь 2016 г. ) |
Эта статья в значительной степени или полностью опирается на один источник . ( март 2024 г. ) |
Несовместимость программного обеспечения — это характеристика программного обеспечения компонентов или систем , которые не могут удовлетворительно работать вместе на одном и том же компьютере или на разных компьютерах, связанных компьютерной сетью . Это могут быть компоненты или системы, предназначенные для совместной или независимой работы. Совместимость программного обеспечения — это характеристика компонентов или систем программного обеспечения, которые могут удовлетворительно работать вместе на одном и том же компьютере или на разных компьютерах, связанных компьютерной сетью. Вполне возможно, что некоторые программные компоненты или системы могут быть совместимы в одной среде и несовместимы в другой.
Примеры [ править ]
Тупики [ править ]
Рассмотрим последовательные программы вида:
Запросить ресурс А Запросить ресурс Б Выполните действие, используя A и B. Освободить ресурс Б Освободить ресурс А
Конкретная программа может использовать принтер (ресурс A) и файл (ресурс B) для печати файла.
Если одновременно работают несколько таких программ P1,P2,P3..., то первая выполнившаяся остальные до заблокирует освобождения ресурсов, и программы будут выполняться по очереди. Никаких проблем не будет. Не имеет значения, используется ли однопроцессорная или многопроцессорная система, поскольку именно распределение ресурсов определяет порядок выполнения.
Однако обратите внимание, что программисты , как правило, не обязаны писать программы определенным образом, и даже если существуют рекомендации, некоторые из них могут отличаться от рекомендаций. Вариантом предыдущей программы может быть:
Запросить ресурс Б Запросить ресурс А Выполните действие, используя A и B. Освободить ресурс А Освободить ресурс Б
Ресурсы A и B такие же, как и в предыдущем примере, а не просто фиктивные переменные , так как в остальном программы идентичны.
Как и прежде, если таких программ будет несколько, Q1, Q2, Q3, которые запускаются одновременно, используя ресурсы, как и раньше, проблем не возникнет.
Однако если несколько Ps настроены на работу одновременно с несколькими Q, взаимоблокировка может возникнуть . Обратите внимание, что тупиковая ситуация не обязательно должна возникнуть, но может возникнуть.
P: Запросить ресурс A Вопрос: Запросить ресурс Б Вопрос: Запросить ресурс A (заблокирован P) P: Запрос ресурса B (заблокирован Q) ...
Теперь ни P, ни Q не могут продолжить 1 .
Это один из примеров, когда программы могут демонстрировать несовместимость.
Несовместимость интерфейса [ править ]
Другим примером другого рода может быть случай, когда один программный компонент предоставляет услуги другому. Несовместимость может заключаться в простом изменении порядка параметров между программным компонентом, запрашивающим услугу, и компонентом, предоставляющим услугу. Это будет своего рода несовместимость интерфейса . Это можно считать ошибкой , но в некоторых системах ее очень сложно обнаружить. Некоторые несовместимости интерфейсов можно легко обнаружить на этапе сборки , особенно для строго типизированных систем, другие бывает трудно обнаружить и их можно обнаружить только во время выполнения , а третьи практически невозможно обнаружить без детального анализа программы.
Рассмотрим следующий пример:
Компонент P вызывает компонент Q с параметрами x и y. В этом примере y может быть целым числом.
Q возвращает f(x), который является желаемым и никогда не равен нулю, и игнорирует y.
Вариант Q, Q' имеет аналогичное поведение со следующими отличиями:
если y = 100, то Q' не завершается.
Если P никогда не вызывает Q со значением y, равным 100, то использование Q' вместо этого является совместимым вычислением . Однако если P вызывает Q со значением y, равным 100, то использование вместо этого Q' приведет к непрерывным вычислениям.
Если далее предположить, что f(x) имеет числовое значение, то компонент Q'' определяется как:
Q'' ведет себя как Q, за исключением того, что если y = 100, то Q'' не завершается если y = 101, то Q'' возвращает 0,9 * f(x) если y = 102, то Q'' возвращает случайное значение если y = 103, то Q'' возвращает 0.
может вызвать проблемное поведение. Если P теперь вызовет Q'' с = 101, то результаты вычислений будут неверными, но это не может привести к сбою программы. Если P вызывает Q'' с y = 102, тогда результаты непредсказуемы и может возникнуть сбой , возможно, из-за деления на ноль или других ошибок, таких как арифметическое переполнение . Если P вызывает Q'' с y= 103, то в случае, если P использует результат в операции деления, может произойти сбой деления на ноль.
Этот пример показывает, как одна программа P1 может быть всегда совместима с другой программой Q1, но могут быть построены другие программы Q1' и Q1'', такие, что P1 и Q1'' иногда несовместимы, а P1 и Q1'' несовместимы всегда.
Несовместимость производительности [ править ]
Иногда программы P и Q могут быть запущены на одном компьютере, и присутствие одной из них будет снижать производительность другой. Это особенно может произойти, если компьютер использует виртуальную память . В результате может произойти перегрузка диска , и производительность одной или обеих программ значительно снизится. Эта форма несовместимости может возникнуть, если P и Q предназначены для совместной работы, но может также возникнуть, если P и Q совершенно не связаны между собой, но просто выполняются одновременно. Примером может служить P — программа, которая создает большие выходные файлы, которые хранятся в основной памяти , а Q — антивирусная программа, которая сканирует множество файлов на жестком диске. Если для виртуальной памяти используется кэш памяти , то возможно неблагоприятное взаимодействие двух программ, и производительность каждой из них будет резко снижена.
Совместимость производительности некоторых программ P и Q может зависеть от среды, в которой они выполняются. Они могут быть существенно несовместимы, если запускаются на компьютере с ограниченной оперативной памятью, однако их можно удовлетворительно запустить на компьютере с большим объемом памяти. Некоторые программы могут быть несовместимы по производительности практически в любой среде.
См. также [ править ]
Ссылки [ править ]
- К.М. Кришна, К.Г. Шин, Системы реального времени, McGraw-Hill, 1997 г.