Программирование в ядре Linux

Информация для студентов

Программа курса

Теория

  1. История ядра Linux. Основные функции Linux. Коммерческое использование Linux. Модель разработки Linux.

  2. Обзор кодовой базы ядра Linux. Модули ядра Linux. Базовые API ядра.

  3. Модель устройства, шины и драйвера в Linux. Character, misc devices, struct file.

  4. Работа с памятью в ядре Linux

  5. Контекст CPU. Реализация невытесняющего планировщика потоков

  6. Прерывания в UMP и SMP системах. Реализация вытесняющего планировщика потоков

  7. Concurrency на уровне hardware и на уровне ЯП. Concurrency в ядре Linux, синхронизация.

  8. Продвинутые механизмы синхронизации. RCU в Linux, transactional memory.

  9. Сигналы в Linux. Их использование, реализация

  10. Системные вызовы в Linux. Путь от функций libc до функции в структуре file operations модуля ядра.

  11. Энергосбережение в Linux. Принципы написания энергосберегающих приложений.

  12. Виртуальные машины и контейнеры. Сценарии использования, реализация, общие черты и отличия.

  13. Асинхронный ввод-вывод. Плюсы и минусы.

 

Практика

  1. Настройка окружения для разработки в ядре Linux. Сборка и кофигурирование Linux. Запуск и отладка собранного ядра в QEMU.

  2. Реализация структуры данных стек в ядре и переворачивание списков в ядре с его помощью

  3. Реализация драйвера и модели виртуального устройства хранения данных (VSD)

  4. Поддержка системного вызова mmap в драйвере VSD. Реализация userspace C библиотеки, предлагающей удобный интерфейс для работы с VSD.

  5. Реализация интерфейса VSD с помощью эмулируемых буферов в RAM, DMA, MMIO регистров. Сериализация доступа к VSD в ядре.

  6. Реализация примитива синхронизации mutex в виде userspace C библиотеки с поддержкой со стороны ядерного misc device.

  7. Реализация примитива синхронизации mutex в виде userspace C библиотеки с поддержкой со стороны ядра в виде статически вкомпилированных дополнительных системных вызовов.

  8. Поддержка асинхронного ввода-вывода в VSD device и driver.