Описание курса:
Пройдя обучение по комплексной программе, вы получите все необходимые знания и навыки для успешной разработки программного обеспечения для операционной системы Linux. Программа составлена с учетом наиболее распространенных требований работодателей к сотрудникам. Пройдя обучение по комплексной программе, вы станете специалистом высокого уровня и сможете уверенно претендовать на хорошую должность и высокую заработную плату!
Необходимая подготовка:
• Успешное окончание курса «Linux. Уровень 1. Основы администрирования», или эквивалентная подготовка.
• Успешное окончание курса «Программирование на языке C (Си)», или эквивалентная подготовка.
Программа курса:
Часть 1. Linux. Уровень 2. Программирование в Linux на C
Модуль 1. Введение
• Ознакомление со спецификой сборки ПО в GNU/Linux (версия 2024)
• Ознакомление с консольными текстовыми редакторами (vi,nano,mcedit)
• Ручная и автоматическая сборка ПО (Makefile)
• Модель Клиент-Интерфейс-Сервер (КИС)
• Статическая сборка библиотек
• Совместно используемые библиотеки
• Работа с переменными окружения
Модуль 2. Низкоуровневый ввод-вывод и файловые операции
• Обзор механизмов ввода-вывода в Linux
• Файловые дескрипторы
• Системные вызовы: open, close, write, read и lseek
• Типы файлов
• Индексные дескрипторы и жесткие ссылки
• Права доступа к файлу
• Файловая система proc
• Два способа прочесть содержимое директории
• Разреженные файлы и специфика их применения
• Блокировка областей файла
Модуль 3. Межпроцессное взаимодействие
• Механизмы межпроцессного взаимодействия Linux
• Неименованные каналы (pipes)
• Именованные каналы (named pipes)
• Сообщения (message queue)
• Разделяемая память (shared memory)
• Семафоры (semaphores)
Модуль 4. Сокеты
• Сокеты в файловом пространстве имен (UNIX-сокеты)
• Парные сокеты (pair sockets)
• Сетевые сокеты (sockets)
Модуль 5. Сигналы
• Знакомство с сигналами (signals)
• Отличие сигналов от других механизмов межпроцессного взаимодействия
• Специфика обработки сигналов (signal handling)
Модуль 6. Процессы
• Клонирование процессов — fork()
• Замена исполняемого процесса — exec()
• Зомби (zombies) — причины возникновения и способы их устранения
Модуль 7. Потоки
• Потоки и процессы
• Специфика построения многопоточных приложений (multithreading)
• Досрочное завершение потока
Модуль 8. Потоки (продолжение)
• Создание обработчика завершения потока
• Средства синхронизации потоков (synchronize primitives)
• Атрибуты потоков
Модуль 9. Демоны (службы)
• Отличие демона от консольной утилиты
• Специфика разработки демонов (daemons)
• Создание демона, использующего сетевые сокеты
Модуль 10. Консольный ввод-вывод
• Специфика разработки консольных приложений
• Предотвращение перенаправления вывода
• Управление терминалом
• Сокрытие пароля пользователя при аутентификации
Модуль 11. Отображаемая память
• Отображение обычного файла
• Совместный доступ к файлу
• Частные отображения
• Другие применения mmap
Часть 2. Разработка драйверов устройств в Linux
Модуль 1. Ядро Linux
• Архитектура ядра linux
• Отличия разработки драйверов от прикладного ПО
• Потенциальные проблемы с безопасностью
• Лицензирование модулей ядра
Модуль 2. Модули ядра Linux
• Простейший модуль ядра
• Знакомство с printk()
• Сборка модулей ядра
• Макроопределения __init и __exit
• Вопросы документирования модулей
• Передача модулю параметров командной строки
• Модули, состоящие из нескольких файлов
Модуль 3. Модули ядра, пространства и устройства
• Модули ядра и прикладные программы
• Функции, которые доступны из модулей
• Пространство пользователя и пространство ядра
• Пространство имен
• Адресное пространство
• Старший и младший номер устройства
Модуль 4. Данные
• Типы данных и структуры ядра
• Специфика использования стандартных типов данных
• Назначение типам данных явного размера
• Специфичные типы данных
• Аспекты, связанные с совместимостью
• Размер страницы
• Порядок следования байт в словах
• Выравнивание данных
• Размер указателя
Модуль 5. Символьные устройства
• Файлы символьных устройств
• Структура file_operations
• Структура file
• Регистрация устройства
• Отключение устройства
• Пример драйвера символьного устройства c доступом только на чтение
• Специфика поддержки записи для символьных устройств
• Пример драйвера символьного устройства c доступом на чтение и запись
Модуль 6. Файловая система /proc
• Особенность файловой системы /proc
• Пример драйвера, создающего файл в /proc c доступом на чтение
• Блокировка процессов при конкурентном доступе к устройству
• Пример драйвера, приостанавливающего работу процессов
Модуль 7. Управление памятью в ядре Linux
• Специфика управления памятью в ядре Linux
• Преобразование адреса в ядре
• Динамическое распределение памяти в ядре
Модуль 8. Блочные устройства
• Блочные устройства
• Регистрация блочного устройства
• Особенности реализации блочного устройства
Модуль 9. Семафоры и синхронизация
• Конкуренция и ситуация гонок
• Семафоры и мьютексы
• Реализация семафора в ядре Linux
• Семафоры на чтение и запись
• Взаимоблокировки
• Пример драйвера, использующего семафоры
• Измерение временных интервалов
Модуль 10. Реализация доступа к периферийному устройству
• Практическая работа
Окончательная цена указывается в договоре на обучение.