Introduction

Темы лекций по курсу “Операционные системы” (Семестр 3)

1. Управление памятью

  • Стратегии управления памятью: first, best, worst fit
  • Внешняя и внутренняя фрагментация
  • Стек и стековый кадр
  • Алгоритм парных меток
  • Обзор реализаций malloc в реальных библиотеках языка С
  • Алгоритм близнецов. Слабовый аллокатор
  • Сборка мусора подсчетом ссылок
  • Сборка мусора mark’n’sweep
  • Копирующие и генерационные сборщики мусора
  • Обзор проблем при взаимодействии сред исполнения с разными стратегиями сборки мусора

2. Системные вызовы ввода/вывода. Файлы

  • Понятие файла в Unix
  • Системный вызов open(2)
  • Системные вызовы read/readv, write/writev
  • Системный вызов lseek
  • Разреженные файлы
  • Вызовы fsync, dup, fcntl
  • Мультиплексирование ввода/вывода (select/poll)
  • Отображение файлов на память

3. Аутентификация и авторизация

  • Модели управления правами доступа: ACL, роли, полномочия
  • Принцип минимума привилегий
  • Традиционные права доступа Unix как ACL фиксированной структуры. Кольца доступа
  • ACL произвольного вида
  • UID как полномочие (capability). Аутентификация по токену в Win32
  • Парольная аутентификация
  • Аутентификация запрос-ответ (CHAP). Протокол ssh. Сетевые БД учетных записей
  • Схема Нидхама-Шредера. Kerberos
  • Использование шифрования с открытым ключом. PKI

4. Виртуальная память

  • Страничная и сегментная виртуальная память
  • Страничная подкачка. Использование подкачки для реализации mmap
  • Алгоритмы поиска жертвы при страничной подкачке
  • Копирование при записи и его использование для реализации fork

5. Планировщики

  • Кооперативный планировщик
  • Вытесняющий планировщик
  • Планировщики с приоритетами
  • Динамические приоритеты в ОС разделенного времени
  • Справедливые планировщики

6. Критические секции и синхронизация

  • Введение в проблему. Определение критической секции. Флаговая переменная как простейшая критическая секция
  • Алгоритм Деккера
  • CAS и спинлок
  • Атомарные примитивы (атомарный инкремент и др.)
  • Полная и частичная сериализация и ее влияние на производительность
  • Семафоры и семафороподобные примитивы
  • Реентерабельные функции и thread-safe API
  • Мертвые и живые блокировки
  • Инверсия приоритета

7. Гармонически взаимодействующие процессы

  • Понятие гармонически взаимодействующих процессов
  • Примитивы гармонического взаимодействия: буферизованные (трубы и очереди сообщений) и небуферизованные (линки и рандеву языка Ada)
  • Реализация произвольного доступа к данным в рамках гармонического взаимодействия. Языки запросов
  • Использование буферизованных примитивов для обхода инверсии приоритета

8. Драйверы устройств

  • Понятие драйвера и псевдоустройства
  • Интерфейс драйвера в традиционных ОС семейства Unix. Блочные и символьные устройства. Идеология “Всё - файл". Ioctl. Терминальный интерфейс Unix как пример провала идеологии “всё - файл” и терминальные ioctl как пример попытки обхода этого провала
  • Альтернативные подходы к построению интерфейса драйверов. Обзор Windows Driver Model

9. Событийно-ориентированные архитектуры

  • Голливудский принцип (“не звоните нам, вы вам позвоним")
  • Применения событийно-ориентированных архитектур: графические интерфейсы, подсистема ввода-вывода, сетевые серверы
  • Преимущества событийно-ориентированной архитектуры перед пулами потоков
  • Недостатки событийно-ориентированной архитектуры

10. Виртуальные машины

  • Контейнерная виртуализация: зоны Solaris, VPS OpenVZ/Virtuozzo
  • Теорема Попека/Голдберга. VM/370
  • Подходы к реализации VM на машинах, не соответствующих теореме Попека/Голдберга. Паравиртуализация. Покомандная эмуляция. Jit-компиляция
  • Аппаратная поддержка виртуализации на современных x86