Ядро

  • Понятия: 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) потоков.
  • Синхронизация потоков: мьютексы, условные переменные.
  • Потокобезопасность: предотвращение гонок и взаимных блокировок.