
- •Перечень контрольных вопросов по дисциплине «Системное программирование»
- •Понятие системного программного продукта.
- •Стадии разработки программного обеспечения.
- •Технология инкрементального программирования.
- •Понятие объекта: состояние, поведение, методы. Понятие класса и идентичность объектов.
- •Принципы объектной модели
- •Проблема создания и уничтожения объектов
- •Понятие ссылки. Операции над ссылками и способы применения ссылок.
- •Статические и постоянные члены класса. Встраиваемые методы.
- •Дружественные функции.
- •Иерархические отношения между классами: композиция.
- •Иерархические отношения между классами: наследование.
- •Виртуальные методы и позднее связывание.
- •Понятие абстрактного класса.
- •Использование потокового ввода-вывода.
- •Порождаемые функции в обобщённом программировании.
- •Порождаемые классы в обобщённом программировании.
- •Использование основных контейнеров стандартной библиотеки.
- •Классы функциональных объектов: создание и применение.
- •Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
- •Операционная система, ее назначение и функции
- •Утилиты операционной системы gnu/Linux
- •Понятие файла. Виртуальная файловая система gnu/Linux
- •Разграничение доступа к файлам. Доступ к устройствам
- •Организация взаимодействия пользователя с системой
- •Организация ввода-вывода системного уровня
- •Концепция процесса. Состояние процесса и диаграмма смены состояний процесса
- •Операции над процессами. Разграничение доступа процессов к ресурсам системы.
- •Планирование процессов. Политики планирования
- •Сигналы и их использование для управления процессами
- •Понятие потока выполнения. Сравнительный анализ потоков и процессов.
- •Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
- •Задача «разделение доступа к ресурсу». Способы ее решения.
- •Задача «синхронизация по готовности данных». Способы ее решения.
- •Системные средства синхронизации потоков.
- •1.Решение задачи «разделение доступа к ресурсу».
- •2.Способы обеспечения атомарности операций
- •3.Обеспечение взаимоисключения потоков через мьютексы.
- •4.Решение задачи «синхронизация по готовности данных»
- •Мониторы Хоара. Пример проектирования монитора «склад» для задачи «производитель-потребитель».
- •Проектирование и модели многопоточных приложений.
- •Иерархия памяти. Виртуальная память: концепция и инструменты.
- •Взаимодействие процессов: проблематика и средства.
- •Модули ядра Linux.
Сигналы и их использование для управления процессами
Процессы могут принимать сигналы. Сигнал – традиционный способ асинхронной связи между процессами.
Сигнал может быть послан ядром ОС, пользователем из оболочки, другим процессом. Процесс может послать сигнал сам себе. Посылкой сигнала процессу сообщается о наступлении определённого события.
Обработка сигналов
Существует несколько вариантов реакции процесса на поступление сигнала.
Действие по умолчанию – выполняется, если процесс явно не задал другого варианта реакции. Для большинства процессов действием по умолчанию является завершение.
Игнорирование – эффект «отсутствия» сигнала. Процесс продолжает своё нормальное выполнение.
Выполнение пользовательского обработчика. Нормальное выполнение процесса прерывается и осуществляется вызов обработчика. По завершении обработки продолжается нормальное выполнение.
Обработчик является обычной функцией с одним целочисленным параметром типа int и возвращающей значение типа void.
Задание обработчика handler для сигнала signum осуществляется системным вызовом signal со следующим прототипом:
sighandler_t signal(int signum, sighandler_t handler);
Обработка процессом сигнала может быть отложена (заблокирована).
Сигналы SIGKILL и SIGSTOP нельзя заблокировать или игнорировать. Для них нельзя определить пользовательский обработчик.
Понятие потока выполнения. Сравнительный анализ потоков и процессов.
Процесс – единица выделения ресурсов. Процессы инертны. Каждый процесс всегда состоит, по крайней мере, из одного потока выполнения. Этот поток создаётся автоматически при инициализации процесса.
Поток выполнения (thread – «тред») – единица исполнения (распределения процессорного времени). Процесс может иметь несколько потоков. Любой процесс можно «расщепить» на несколько параллельных потоков, которые выполняются независимо и совместно используют выделенные процессу ресурсы.
Поток выполняется строго последовательно и имеет свой собственный программный счётчик, стек, значения регистров процессора. Поток находится в одном из допустимых состояний.
Ядро Linux поддерживает потоки в виде легковесных процессов. Потоки одного процесса выполняются в одном адресном пространстве. Они разделяют все переменные приложения.
Издержки на переключение контекста между потоками одного процесса невелики, по сравнению с переключением контекстов разных процессов.
Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
В текущей и следующей теме под словом «процесс» понимается «процесс или поток», а при обсуждении специфичных для потоков вопросов явно используется слово «поток».
Процессы называются параллельными, если они существуют одновременно.
Параллельные процессы могут быть независимыми или взаимодействующими.
Взаимодействующим процессам в некоторые моменты времени может требоваться синхронизировать свои действия (запрос на выполнение операции, обмен данными). Такие процессы являются асинхронными.
Синхронизация – использование специальных неделимых (атомарных) операций для кооперации между асинхронными параллельными процессами.
Параллельная обработка – поле современных исследований и практической деятельности.
Проблемы разработки параллельных алгоритмов: критерий возможности выполнения операций параллельно, надёжное и безопасное взаимодействие процессов, отладка параллельных программ.
Синхронизация «готовность данных».
Задача: вычисление корней уравнения ax2+bx+c
Последовательный алгоритм вычисления корней требует 11 шагов.
Алгоритм с параллельными вычислениями требует 6 шагов. Идея:
объединяем то, что может быть выполнено без дополнительных промежуточных действий.
Проблема готовности промежуточных результатов вычислений при распараллеливании
Синхронизация «выполнение одним из многих».(РиС)
Задача о покупке молока: если один из супругов по возвращении с работы обнаруживает, что молоко закончилось, то необходимо сходить в магазин и купить его.
Возможна ситуация, при которой молоко будет куплено обоими супругами. Источник проблемы: субъекты действуют независимо. Решение проблемы: синхронизация действий (кооперация).
Вариант: использование записки. Новая проблема: на написание и оставление записки требуется время.