Спецкурс "Программный интерфейс GNU/Linux"

  • Лектор: Георгий Курячий
  • Время и место проведения: пятница, 18:00, П-5
  • Первая лекция: 17/II 2017
  • Лицам, не имеющим пропуск на факультет ВМК МГУ, рекомендуется на первую лекцию принести одну матовую фотографию 3×4 и паспортные данные для оформления пропуска.

Аннотация

  • Название: Программный интерфейс GNU/Linux
  • Title: GNU/Linux programming interface

В курсе рассматривается три аспекта организации современных операционных систем и других программных комплектов на базе ядра Linux:

  • Программный интерфейс ядра Linux (системные вызовы)
  • Командный интерфейс в классическом POSIX-стиле (командная строка)
  • Программный интерфейс системообразующих прикладных компонентов операционной системы (шина данных, графическая подсистема и т. п.)

Дополнительно изучаются инструменты построения программных комплектов различной сложности на базе GNU/Linux, а также даётся обзор основных положений архитектуры операционных систем в приложении к GNU/Linux.

Планируется демонстрация и практическое ознакомление с примерами таких программных комплектов.

Требования к слушателям: знание основ языка программирования Си, представление об архитектуре операционных систем вообще, и основанных на GNU/Linux в частности.

Рекомендуемая предварительная литература: учебник по основам GNU/Linux, например [[Books/LinuxIntro]].

Тематический план курса

Концепция: как программы взаимодействуют с компьютером под управлением Linux?

Возможно, стоит начать с командного интерфейса, а затем «спуститься» к ядру и далее в досистемную часть, после чего «подняться» к прикладным системообразующим компонентам.

  • Досистемная загрузка: PC-style, EFI, embedded-style (пример — загрузка и запуск какой-нибудь standalone программы)
  • Ядро: программный интерфейс (пример — тривиальная программа, вызывающая system call)
  • Минимальная программная начинка (примерно в объёме того, что видно в Android-е):
  • Больше функций: приложения, утилиты+shell для управления
  • Многозадачность: процессы, сигналы, /proc
  • Много пользователей: права доступа, root
  • Различное аппаратное обеспечение: /dev, /sys
  • хранение настроек в /etc
  • (пример — какой-нибудь busybox)
  • Взаимодействие приложений: D-Bus (пример то же + dbus и приложения, которые через него общаются ??)
  • Динамическое изменение аппаратной конфигурации (udev) — что видят приложения (то же + udev и приложения, которые на него реагируют ??)
  • Старт всех процессов: (init) + перезапуск (supervise), запуск по событиям (cron), прочее (systemd) (пример — minimal system)
  • Проблема выдачи прав: root / sudo / демон+утилита / polkit / capabilities
  • Проблема изоляции: просто права доступа, namespaces, cgroups
  • Графическая подсистема: X.org, стандарты Freedesktop.org (seat), Wayland
  • Ограничения доступа: SE (а также appArmor / RSBAC, yama)

Материалы

  1. Обзор
  2. Запуск процессов (конспект)
  3. Командная оболочка
  4. Объекты системы
  5. Субъекты системы
  6. Межпроцессное взаимодействие
  7. О полезных инструментах
  8. О полезных возможностях ядра