- •Перечень контрольных вопросов по дисциплине «Системное программирование»
- •Понятие системного программного продукта.
- •Стадии разработки программного обеспечения.
- •Технология инкрементального программирования.
- •Понятие объекта: состояние, поведение, методы. Понятие класса и идентичность объектов.
- •Принципы объектной модели
- •Проблема создания и уничтожения объектов
- •Понятие ссылки. Операции над ссылками и способы применения ссылок.
- •Статические и постоянные члены класса. Встраиваемые методы.
- •Дружественные функции.
- •Иерархические отношения между классами: композиция.
- •Иерархические отношения между классами: наследование.
- •Виртуальные методы и позднее связывание.
- •Понятие абстрактного класса.
- •Использование потокового ввода-вывода.
- •Порождаемые функции в обобщённом программировании.
- •Порождаемые классы в обобщённом программировании.
- •Использование основных контейнеров стандартной библиотеки.
- •Классы функциональных объектов: создание и применение.
- •Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
- •Операционная система, ее назначение и функции
- •Утилиты операционной системы gnu/Linux
- •Понятие файла. Виртуальная файловая система gnu/Linux
- •Разграничение доступа к файлам. Доступ к устройствам
- •Организация взаимодействия пользователя с системой
- •Организация ввода-вывода системного уровня
- •Концепция процесса. Состояние процесса и диаграмма смены состояний процесса
- •Операции над процессами. Разграничение доступа процессов к ресурсам системы.
- •Планирование процессов. Политики планирования
- •Сигналы и их использование для управления процессами
- •Понятие потока выполнения. Сравнительный анализ потоков и процессов.
- •Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
- •Задача «разделение доступа к ресурсу». Способы ее решения.
- •Задача «синхронизация по готовности данных». Способы ее решения.
- •Системные средства синхронизации потоков.
- •1.Решение задачи «разделение доступа к ресурсу».
- •2.Способы обеспечения атомарности операций
- •3.Обеспечение взаимоисключения потоков через мьютексы.
- •4.Решение задачи «синхронизация по готовности данных»
- •Мониторы Хоара. Пример проектирования монитора «склад» для задачи «производитель-потребитель».
- •Проектирование и модели многопоточных приложений.
- •Иерархия памяти. Виртуальная память: концепция и инструменты.
- •Взаимодействие процессов: проблематика и средства.
- •Модули ядра Linux.
Задача «разделение доступа к ресурсу». Способы ее решения.
В примере учёта поступающих средств для обеспечения надёжной работы требуется предотвратить одновременный доступ нескольких процессов к разделяемому ресурсу – счётчику.
Взаимоисключение: процесс, обращающийся к разделяемому ресурсу, исключает для других процессов возможность одновременного с ним доступа к ресурсу.
Участок в программе, в котором осуществляется доступ к разделяемому ресурсу называется критической секцией ресурса.
Если один процесс находится в своей критической секции определённого ресурса, то остальные не должны иметь возможности войти в их критические секции, относящиеся к тому же самому ресурсу.
Обеспечение взаимоисключения – необходимость отслеживать попытки входа процессов в свои критические секции (операция entercritical) и выхода из них (операция leavecritical).
При выполнении entercritical процесс может блокироваться до освобождения ресурса. При выполнении leavecritical, один из процессов ожидающих входа, возобновляет свою работу.
Требование к реализации операций entercritical и leavecritical – их атомарность.
Задача «синхронизация по готовности данных». Способы ее решения.
Синхронизация потоков по действиям и данным может быть выполнена с
помощью семафоров.
Семафор S – защищённая переменная, значение которой можно опрашивать и менять только специальными операциями P и V, а также операцией инициализации. Множество значений семафора: неотрицательные целые числа.
Операция инициализации: определяет начальное значение семафора.
Операция P(S): значение семафора уменьшается на 1, если оно положительно или поток блокируется, если значение семафора нулевое.
Операция V(S): пробуждение одного из потоков, ожидающих на семафоре, или увеличение значения на 1, если таковых нет.
При входе в критическую секцию поток должен выполнять операцию P(S), а при выходе – V(S).
Расширение операции P (неблокирующий вариант) – P'(S) : при нулевом значении семафора немедленно возвращается признак отказа в доступе.
Примеры использования семафоров.РИС
Задача однократного обмена данными между двумя потоками, производителем и потребителем. Производитель формирует данные, которые нужны потребителю в определённый момент его выполнения для продолжения работы.
Синхронизация необходима только для потребителя. Он должен дождаться готовности данных.
Для решения достаточно одного семафора CanRead (признак наличия данных в буфере Data) с начальным значением 0 («отсутствие данных»).
Задача «производитель-потребитель» для случая многократного обмена данными
Необходима синхронизация и для производителя. Ему необходимо знать, что потребитель произвёл считывание предыдущих данных из буфера. Для решения достаточно двух семафоров CanRead (признак наличия данных в буфере Data) с начальным значением 0 («отсутствие данных») и CanWrite (буфер свободен для занесения) с начальным значением 1.
Системные средства синхронизации потоков.
1.Решение задачи «разделение доступа к ресурсу».
В примере учёта поступающих средств для обеспечения надёжной работы требуется предотвратить одновременный доступ нескольких процессов к разделяемому ресурсу – счётчику.
Взаимоисключение: процесс, обращающийся к разделяемому ресурсу, исключает для других процессов возможность одновременного с ним доступа к ресурсу.
Участок в программе, в котором осуществляется доступ к разделяемому ресурсу называется критической секцией ресурса.
Если один процесс находится в своей критической секции определённого ресурса, то остальные не должны иметь возможности войти в их критические секции, относящиеся к тому же самому ресурсу.
Обеспечение взаимоисключения – необходимость отслеживать попытки входа процессов в свои критические секции (операция entercritical) и выхода из них (операция leavecritical).
При выполнении entercritical процесс может блокироваться до освобождения ресурса. При выполнении leavecritical, один из процессов ожидающих входа, возобновляет свою работу.
Требование к реализации операций entercritical и leavecritical – их атомарность.
