- •Перечень контрольных вопросов по дисциплине «Системное программирование»
- •Понятие системного программного продукта.
- •Стадии разработки программного обеспечения.
- •Технология инкрементального программирования.
- •Понятие объекта: состояние, поведение, методы. Понятие класса и идентичность объектов.
- •Принципы объектной модели
- •Проблема создания и уничтожения объектов
- •Понятие ссылки. Операции над ссылками и способы применения ссылок.
- •Статические и постоянные члены класса. Встраиваемые методы.
- •Дружественные функции.
- •Иерархические отношения между классами: композиция.
- •Иерархические отношения между классами: наследование.
- •Виртуальные методы и позднее связывание.
- •Понятие абстрактного класса.
- •Использование потокового ввода-вывода.
- •Порождаемые функции в обобщённом программировании.
- •Порождаемые классы в обобщённом программировании.
- •Использование основных контейнеров стандартной библиотеки.
- •Классы функциональных объектов: создание и применение.
- •Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
- •Операционная система, ее назначение и функции
- •Утилиты операционной системы gnu/Linux
- •Понятие файла. Виртуальная файловая система gnu/Linux
- •Разграничение доступа к файлам. Доступ к устройствам
- •Организация взаимодействия пользователя с системой
- •Организация ввода-вывода системного уровня
- •Концепция процесса. Состояние процесса и диаграмма смены состояний процесса
- •Операции над процессами. Разграничение доступа процессов к ресурсам системы.
- •Планирование процессов. Политики планирования
- •Сигналы и их использование для управления процессами
- •Понятие потока выполнения. Сравнительный анализ потоков и процессов.
- •Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
- •Задача «разделение доступа к ресурсу». Способы ее решения.
- •Задача «синхронизация по готовности данных». Способы ее решения.
- •Системные средства синхронизации потоков.
- •1.Решение задачи «разделение доступа к ресурсу».
- •2.Способы обеспечения атомарности операций
- •3.Обеспечение взаимоисключения потоков через мьютексы.
- •4.Решение задачи «синхронизация по готовности данных»
- •Мониторы Хоара. Пример проектирования монитора «склад» для задачи «производитель-потребитель».
- •Проектирование и модели многопоточных приложений.
- •Иерархия памяти. Виртуальная память: концепция и инструменты.
- •Взаимодействие процессов: проблематика и средства.
- •Модули ядра Linux.
Использование основных контейнеров стандартной библиотеки.
Контейнеры – это объекты, предназначенные для хранения совокупностей
других объектов.
Виды контейнеров: вектор (vector), список (list), очередь (queue), стек
(stack), ассоциативный массив (map), множество (set).
Вектор – динамический массив.
template < class T, class Allocator = allocator<T> > class vector;
Allocator – задаёт распределитель памяти.
Список – последовательность элементов данных, оптимизированная для их вставки и удаления. Обеспечивает представление двунаправленного линейного списка.
Спецификация списка:
template < class T, class Allocator = allocator<T> > class list;
Для list определены операторы сравнения и отсутствует оператор индексирования. Обеспечивает доступ к обоим концам списка.
Спецификация ассоциативного контейнера:
template < class Key, class T, class Comp = less<Key>, class Allocator =allocator<T> > class map;
Key – тип ключа;
T – тип предназначенных для хранения в контейнере данных;
Итераторы
Итератор – компонент для доступа к отдельным элементам контейнеров и их перебора.
Итератор является обобщением указателя.
Итератор указывает на некоторый элемент контейнера или за последний элемент контейнера.
Доступ к значению элемента осуществляется операцией *, применённой к итератору.
Категории итераторов: ввода, вывода, последовательный, двунаправленный, произвольного доступа.
Перемещение итератора к следующему или предыдущему элементу осуществляется операциями ++, -- (определены не для всех видов итераторов).
Каждый вид контейнера определяет свой набор видов итераторов.
Классы функциональных объектов: создание и применение.
Функциональные объекты – это объекты классов, в которых перегружен оператор вызова функции (метод operator()). Синоним: объекты-функции.
Функциональные объекты являются обобщением функций. Они могут использоваться как функции и вместо функций.
Функциональные объекты выступают в качестве функций с состоянием (состояние сохраняется между вызовами).
Стандартная библиотека содержит набор готовых таких объектов: plus<T> (x+y), less<T> (x<y), negate<T> (-x) и другие.
Функциональные объекты стандартной библиотеки могут быть без параметров («генераторы»), унарными (с одним параметром) и бинарными (с двумя параметрами).
Пример: определение функционального объекта для реализации порогового устройства: если целое число v больше заданного порога L, то выдать значение L, иначе выдать само число v.
Пример использования разработанного класса: применение порогового устройства со значением порога 0 для всех элементов вектора.
Преимущество: реализация алгоритма работы порогового устройства приводится один раз, а используется многократно, причем возможно с разными значениями порога.
Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
Алгоритмы предназначены для выполнения операций над содержимым контейнеров.
Алгоритмы являются порождаемыми функциями.
Группы алгоритмов:
– поэлементная обработка,
– заполнение и порождение,
– подсчёт,
– манипулирование последовательностями,
– поиск и замена,
– удаление,
– сортировка и обработка отсортированных последовательностей,
– численные алгоритмы.
В качестве параметров алгоритмы, как правило, принимают итераторы и функциональные объекты.
