Бакалавриат
2025/2026




Системное программирование в Linux
Статус:
Курс по выбору (Разработка информационных систем для бизнеса)
Где читается:
Факультет социально-экономических и компьютерных наук
Когда читается:
3-й курс, 1, 2 модуль
Охват аудитории:
для своего кампуса
Преподаватели:
Лабутин Иван Александрович
Язык:
русский
Кредиты:
6
Контактные часы:
52
Программа дисциплины
Аннотация
Курс направлен на изучение низкоуровневых интерфейсов и механизмов операционной системы GNU/Linux через практические задания по разработке программного обеспечения, взаимодействующего с ядром и с системными ресурсами. В начале курса студенты выполнят задание по установке и настройке ОС Alt Linux в среде гипервизора VirtualBox, что позволит безопасно экспериментировать с поведением системы и её настройками в изолированной среде. Далее через серию практических модулей будет рассмотрена работа с системными вызовами, файловым вводом-выводом, управлением процессами и потоками, синхронизацией, управлением памятью и сетевыми интерфейсами. Теоретические лекции и практические занятия подкрепляются самостоятельной работой над заданиями, требующими разработки и отладки программ, а также изучением документации и использования специализированных инструментов (strace, gdb и др.).
Цель освоения дисциплины
- • Подготовить студентов к разработке программного обеспечения, взаимодействующего с ядром и системными ресурсами ОС GNU/Linux, используя язык C (или C++). • Научить устанавливать и настраивать ОС GNU/Linux в виртуальной среде (VirtualBox). • Развить понимание архитектуры ОС GNU/Linux и механизмов предоставления сервисов пользовательским программам (системные вызовы, IPC). • Дать опыт работы с файловым вводом-выводом на низком уровне и mmap. • Обучить управлению процессами и потоками: создание, завершение, планирование, межпроцессное взаимодействие и синхронизация. • Показать основные приёмы сетевого программирования в Linux: сокеты, неблокирующий I/O, мультиплексирование. • Обучить методам отладки и профилирования системного кода: использование strace, ltrace, gdb, perf и других инструментов. • Научить читать и анализировать исходный код типовых утилит и библиотек, а также обращаться к документации. • Сформировать навыки самостоятельного поиска и устранения ошибок в системных программах.
Планируемые результаты обучения
- Знать ключевые компоненты архитектуры ОС GNU/Linux.
- Уметь настроить и запустить виртуальную машину с ОС GNU/Linux под VirtualBox, включая сетевые настройки и общие папки для обмена с хостом.
- Понимать механизм системных вызовов, знать, как их вызвать и обрабатывать ошибки.
- Владеть навыками низкоуровневого файлового ввода-вывода: открытие, чтение/запись, работа с файловыми дескрипторами, блокирующий и неблокирующий I/O, mmap.
- Уметь создавать, завершать и синхронизировать процессы и потоки: fork/exec, wait, pthreads, mutex, условные переменные, семафоры, shared memory (SystemV и POSIX).
- Владеть приёмами сетевого программирования: создавать клиентские и серверные приложения на базе сокетов (TCP/UDP), использовать select/poll/epoll.
- Уметь отлаживать и диагностировать поведение системных программ с помощью strace, gdb, ltrace, анализировать дампы, читать логи ядра (dmesg).
- Знать основы взаимодействия с ядром Linux через sysfs и ioctl.
Содержание учебной дисциплины
- 1. Введение и подготовка среды.
- 2. Архитектура ОС и системные вызовы.
- 3. Файловый ввод-вывод.
- 4. Управление процессами и сигналы.
- 5. Потоки и синхронизация.
- 6. Сетевое программирование.
- 7. Взаимодействие с ядром.
Промежуточная аттестация
- 2025/2026 2nd module0.7 * Лабораторные работы + 0.1 * Мини-тесты/опросы + 0.2 * Проект-модуль
Список литературы
Рекомендуемая основная литература
- Linux API. Исчерпывающее руководство, Керриск, М., 2019
- Linux. Системное программирование, Лав, Р., 2014
- UNIX. Профессиональное программирование, Стивенс, У. Р., 2018
Рекомендуемая дополнительная литература
- Командная строка Linux : полное руководство, Шоттс, У., 2021