Понятия: kernelspace (привилегированный режим), userspace (непривилегированный режим).
Ядро Unix: cтруктура, обязанности и взаимодействие с оборудованием.
Прерывания и ошибки: аппаратные и программные прерывания, процесс обработки прерываний и ошибок.
Системные вызовы: Интерфейс между пространством пользователя и пространством ядра.
Понятие процесса: определение, жизненный цикл (создание, выполнение, завершение).
Управление процессами: системные вызовы fork, exec и wait.
Состояния процессов: ready, running, sleeping, zombie.
Атрибуты процесса: виртуальная память, таблица файловых дескрипторов, маски сигналов.
Запуск программы: загрузка исполняемого файла, передача переменных окружения и параметров командной строки, запуск динамического загрузчика.
Страничная виртуальная память, отображения, page fault.
Аппаратные механизмы поддержки виртуальной памяти: MMU, таблицы страниц, TLB.
Как работает copy-on-write при fork().
Динамическая компоновка, позиционно-независимый код (PIC).
Введение в каналы: функциональность, типы (анонимные, именованные).
Создание каналов: Использование pipe(), mkfifo().
Поведение в различных ситуациях (чтение из закрытого / пустого канала, запись в закрытый / заполненный канал, гарантии при записи размером меньше PIPE_BUF).
Основы сигналов: определение, стандартные сигналы в Unix.
Обработка сигналов: обработчики сигналов, sigaction(), маскирование сигналов.
Доставка сигналов: механизм и прерывание выполнения процессов.
Основные сигналы: SIGINT, SIGTERM, SIGKILL, SIGCHLD.
Обработчики сигналов: что можно и нельзя в них делать, чем volatile sig_atomic_t отличается от int.
Основы файловой системы: структура, каталоги, inode.
Операции с файлами: открытие, чтение, запись, закрытие, lseek.
Права доступа к файлам: владелец, группа, биты доступа.
Типы файлов: обычные файлы, символические и жёсткие ссылки, FIFO, Unix-сокеты, файлы устройств.
Основы: модель OSI, стек TCP/IP.
Программирование сокетов: системные вызовы socket, bind, listen, accept, connect, setsockopt.
Сетевые протоколы: IPv4, IPv6, TCP, UDP, примеры протоколов прикладного уровня.
Мультиплексирование: концепция и примеры использования.
Механизмы: select, poll, epoll.
Неблокирующий ввод-вывод.
Манипуляции с датой и временем: time(), gettimeofday(), localtime(), mktime().
Таймеры: alarm(), setitimer().
Работа с общей памятью: зачем нужны атомики.
Различия между процессами и потоками.
POSIX Threads (pthreads): создание (pthread_create) и объединение (pthread_join) потоков.
Синхронизация потоков: мьютексы, условные переменные.
Потокобезопасность: предотвращение гонок и взаимных блокировок.