- •1. Роль ПО и компьютеров в производстве, социальной жизни и науке.
- •2. Инженерия ПО
- •3. Проблемы разработки ПО и пути их решения
- •4. Характеристики качества ПО
- •5. Факторы, влияющие на качество ПО
- •6. Системный подход к разработке ПО. Временной и "пространственный " аспекты системного подхода
- •7. Этапы жизненного цикла ПО. Каскадная модель жизненного цикла ПО.
- •8. Конструирование ПО
- •9. Стандарты по разработке ПО. Виды и значение стандартов, требования стандартов
- •10. Три группы процессов создания ПО
- •11. Жизненный цикл ПО и процессы верификации.
- •12. Тестирование, верификация, валидация. Различие в понятиях. V образная модель жизненного цикла ПО
- •13. Спиральная модель ЖЦ ПО.
- •14. «Тяжелые и легкие» технологии разработки ПО. Экстремальное (ХР) программирование
- •16. Виды документов, выпускаемых на ПО по этапам разработки системы.
- •17. Итеративный характер проектирования ПО. Стадии проектирования.
- •19. CASE технологии разработки ПО.
- •20. Технология Ration Rose,UML
- •21. Структура системы, иерархия управления и структура ПО
- •22. Цикличность решения задач управления в системах с ЦВМ
- •23. Временная диаграмма работы системы. Представления работы ПО СТС в виде набора «сечений», выполняемых последовательно.
- •24. Представление работы ПО СТС в виде набора параллельных процессов.
- •25. Задачи и процессы. Контекст процесса
- •26. Обобщенная схема возможных вариантов совместного использования информации взаимодействующими процессами
- •Закон Амдела
- •28. Критический ресурс ЦВМ. Основное правило защиты ресурсов ЦВМ
- •29. Синхронизация процессов
- •Взаимное исключение процессов. Использование мьютексов
- •30. Задача синхронизации «Читатели-писатели»
- •Задачи синхронизации. «Обедающие философы»
- •31. Технология синхронизации ПО. Система Intel Thread Checker (ITC) и типы обнаруживаемых ею ошибок.
- •32. Конструирование ПО
- •33. Минимизация сложности ПО. Стандартные приемы в конструировании
- •35. Особенности конструирования программ для встроенных ЦВМ критических систем. Фиксированное распределение памяти
- •36. Проектирование снизу-вверх и проектирование сверху-вниз. Программные заглушки и их использование
- •37. Основные понятия структурного подхода к проектированию ПО.
- •Основные понятия объектно - ориентированного подхода (ООП) к конструированию ПО.
- •38. Мультиагентные технологии
- •39. Классы реального мира предметной области и искусственные объекты. Чрезмерно большие и неправильно названные классы
- •40. Эвристические приемы конструирования методов, предотвращение дублирования кода
- •41. Сокрытие информации. Две категории секретов программ.
- •Избыточное распространение информации в программе
- •Опасность использования глобальных переменных
- •45. Сопряжение между модулями. Критерии оценки сопряжения. Виды сопряжения
- •46. Эталоны для контроля работы ПО
- •47. Низкоуровневые средства обнаружения ошибочного функционирования ПО
- •Исключительные ситуации (Исключения)
- •48. Выбор способа обработки некорректных входных данных
- •49. Способы обработки возможных ошибок
- •50. Утверждения и общие принципы их использования
- •51. Стратегии безопасности. Три уровня реакции ПО на обнаруженную ошибку. Отказоустойчивые системы
- •54. Ошибки ПО, отладка и тестирование ПО.
- •55. Анализ обнаруживаемых в ПО ошибок и важность его проведения
- •Классификация ошибок ПО
- •56. Статическая отладка и динамическая отладка
- •Функциональная отладка
- •57. Принцип «белого» и «черного» ящика при динамической отладке ПО.
- •58. Структурная динамическая отладка
- •59. Автономная отладка (АО) и комплексная отладка (КО) ПО
- •60. Тестовое окружение ПО. Драйверы и заглушки.
- •61. Последовательность действий при отладке ПО.
- •Принципы выделения маршрутов для отладки.
- •62. Приближенный метод оценки числа вариантов для отладки ПО для «широкого графа» программы. Графы деревья, как модели структуры ПО
- •63. Регулярное дерево и устойчивость его структурного параметра
- •64. Контроль отлаженности ПО в процессе отладки.
- •67. Метод наименьших квадратов для аппроксимации экспериментальных данных
Основное правило защиты критических ресурсов – процесс не должен менять состояние ресурса, пока любой другой процесс имеет к нему доступ. Это правило на практике, учитывая что процессы при доступе могут менять состояние ресурса, переформулируется следующим образом: процесс не должен получать доступа к ресурсу пока он используется другим процессом вне зависимости от того хочет ли первый про-
цесс менять состояние ресурса, поскольку не всегда эти намерения известны.
29. Синхронизация процессов
При взаимодействии процессов применяется «синхронизация» процессов, под которой понимается:
1)обеспечение заданной правильной последовательности исполнения процессов, обеспечивающей заданное функционирование систем;
2)защита общих критических ресурсов ЦВМ от одновременного использования несколькими процессами.
Для обеспечения правильного взаимодействия процессов во времени необходимо планировать последовательность прохождения процессов во времени. Это планирование реализует «грубую» синхронизацию. Однако, чисто временное решение задачи «кто за кем следует», связанное с высчитыванием времен исполнения процессов определением и установлением временных пауз, не представляется реалистичным – времена исполнения процессов имеют случайную составляющую, «ползут» при изменениях ПО, изменяются при вклинивании программ, вызванных на исполнение через систему прерывания, не говоря о том что такая буквальная синхронизация может нарушаться при переносе ПО на другую ЦВМ или в другое программное окружение.
Поэтому необходимо иметь средства, позволяющие обеспечить логическую последовательность исполнения процессов путем отслеживания в самом ПО выполнения некоторых логических условий, например, фактического начала или завершения смежных взаимодействующих процессов либо попытки их одновременного обращения к защищаемому ресурсу.
Грубая синхронизация процессов, не учитывающая возможность их обращения к общим ресурсам, обеспечивается программами комплексного функционирования и планирования работы программного комплекса, которые вызывают на исполнение по определенной временной диаграмме функциональные программы. При этом тонкая синхронизация в многозадачном комплексе между программами требует логического разрешения.
При решении вопросов тонкой синхронизации не должно быть заложено никаких предположений о времени исполнения процессов.
Тем не менее обеспечение заданной последовательности исполнения процессов мы традиционно будем называть синхронизацией, хотя взаимодействием чисто во времени (хронос) она, как мы показали, не исчерпывается.
Можно выделить несколько различных задач синхронизации, которые обеспечивают защиту общих ресурсов ЦВМ:
[Введите текст]
1.взаимное исключение;
2.читатели-писатели;
3.обедающие-философы и т.п.
Эти задачи соответствуют реальным и типовым ситуациям в “жизни программ”.
Взаимное исключение процессов. Использование мьютексов
Это задача согласования работы n ≥ 2 параллельных процессов при использовании некоторых критических ресурсов ЦВМ, которые не могут использоваться одновременно, а должны использоваться последовательно таким образом, чтобы:
одновременно к критическому ресурсу допускалось не более одного процесса,
освобождение критического ресурса должно быть произведено процессом (программой), использующим его, за определенное конечное время.
Для решения этой задачи часто используются двоичные логические переменные – признаки или флаги, которые управляются от процессов и читаются ими.
Например, процесс, захвативший ресурс «вывешивает объявление» или флаг, что ресурс занят, обнуляя значение данной логической переменной. Любой другой процесс, желающий использовать данный ресурс, сначала опрашивает флаг его занятости, застает его в состоянии «занят» и вынужден ждать освобождения. Первый процесс, освободив ресурс, следующим действием устанавливает флаг занятости в единицу, что означает, что ресурс свободен. В операционных системах данный механизм проработан и принимает стандартную форму путем использования семафоров и мьютексов (от английского mutual exclusion – взаимное исключение).
Процесс или поток, владеющий ресурсом, захватил мьютекс, который в любой момент времени может принадлежать только одному процессу или потоку. При этом системные вызовы ОС «создать мьютекс, уничтожить мьютекс, освободить мьютекс и т.п.» должны быть внесены в код программы при ее разработке.
Над мьютексом определены две операции – два системных вызова ОС : Signal (Set) и Wait (названия обобщенные).Signal всегда устанавливает мьютекс в 1. Мьютекс находится в сигнальном состоянии, если он никому не принадлежит.
Пришедший процесс, желающий получить доступ к критическому ресурсу, может застать мьютекс как в состоянии 1, так и в состоянии 0. Этот процесс должен содержать опрос значения Мьютекса и операцию
Wait. Процесс, содержащий Wait, анализирует состояние мьютекса. Если оно равно 1, то процесс захва-
тывает его, уменьшая его значение с 1 до 0. При этом процессу, содержащему Wait, разрешается исполняться дальше. Если мьютекс уже имеет значение 0, то процесс, содержащий Wait, блокируется и ждет пока значение мьютекса не станет равным 1. По завершению процесса, владеющего мьютексом, он путем выдачи системного вызова переводится процессом в состояние Signal.
46