- •Перечень контрольных вопросов по дисциплине «Системное программирование»
- •Понятие системного программного продукта.
- •Стадии разработки программного обеспечения.
- •Технология инкрементального программирования.
- •Понятие объекта: состояние, поведение, методы. Понятие класса и идентичность объектов.
- •Принципы объектной модели
- •Проблема создания и уничтожения объектов
- •Понятие ссылки. Операции над ссылками и способы применения ссылок.
- •Статические и постоянные члены класса. Встраиваемые методы.
- •Дружественные функции.
- •Иерархические отношения между классами: композиция.
- •Иерархические отношения между классами: наследование.
- •Виртуальные методы и позднее связывание.
- •Понятие абстрактного класса.
- •Использование потокового ввода-вывода.
- •Порождаемые функции в обобщённом программировании.
- •Порождаемые классы в обобщённом программировании.
- •Использование основных контейнеров стандартной библиотеки.
- •Классы функциональных объектов: создание и применение.
- •Использование алгоритмов стандартной библиотеки операционной системы, ее назначение и функции.
- •Операционная система, ее назначение и функции
- •Утилиты операционной системы gnu/Linux
- •Понятие файла. Виртуальная файловая система gnu/Linux
- •Разграничение доступа к файлам. Доступ к устройствам
- •Организация взаимодействия пользователя с системой
- •Организация ввода-вывода системного уровня
- •Концепция процесса. Состояние процесса и диаграмма смены состояний процесса
- •Операции над процессами. Разграничение доступа процессов к ресурсам системы.
- •Планирование процессов. Политики планирования
- •Сигналы и их использование для управления процессами
- •Понятие потока выполнения. Сравнительный анализ потоков и процессов.
- •Асинхронные параллельные потоки. Проблематика разработки многопоточных приложений.
- •Задача «разделение доступа к ресурсу». Способы ее решения.
- •Задача «синхронизация по готовности данных». Способы ее решения.
- •Системные средства синхронизации потоков.
- •1.Решение задачи «разделение доступа к ресурсу».
- •2.Способы обеспечения атомарности операций
- •3.Обеспечение взаимоисключения потоков через мьютексы.
- •4.Решение задачи «синхронизация по готовности данных»
- •Мониторы Хоара. Пример проектирования монитора «склад» для задачи «производитель-потребитель».
- •Проектирование и модели многопоточных приложений.
- •Иерархия памяти. Виртуальная память: концепция и инструменты.
- •Взаимодействие процессов: проблематика и средства.
- •Модули ядра Linux.
Модули ядра Linux.
Модуль ядра – это часть кода ядра, которая может быть динамически загружена и выгружена во время работы ядра.
Расширяет функциональность ядра без необходимости перезагрузки системы.
Позволяет иметь компактное ядро без необходимости его пересборки при добавлении новой функциональности.
Получение списка загруженных в ядро модулей – утилита lsmod.
Получение информации о модуле – утилита modinfo.
Загрузка модуля в ядро – утилиты modprobe и insmod.
Выгрузка модуля из ядра – утилита rmmod.
Модули могут зависеть друг от друга. Установление зависимостей между модулями – утилита depmod -a.
Управление модулями – привилегированная операция и выполняется от имени суперпользователя (пользователя с именем root).
Модуль собирается относительно исходного кода работающего на целевой системе ядра.
Для сборки модуля необходимы заголовочные файлы и настройки для ядра, в которое он будет загружен.
Сборка осуществляется с помощью make.
При сборке предпочтительно использовать Makefile указанного ниже вида.
оbj-m определяет список модулей ядра для сборки.
KDIR задаёт расположение исходного кода ядра.
PWD определяет текущий каталог и расположения исходных текстов модуля.
Результатом сборки модуля является файл имя_модуля.ko
