Читается в весеннем семестре на первом курсе магистаратуры МФТИ и ВШЭ.

Преподаватель: к.ф.-м.н. Хорошилов Алексей Владимирович.

Цель курса — знакомство на практике с основными принципами конструирования ядра операционной системы и сопутствующих понятий, таких как планировщик, виртуальная память, прерывания, механизмы синхронизации, системные вызовы, файловые системы и др.

В рамках курса каждым студентом выполняется постепенная разработка маленькой операционной системы на языке Си с небольшими количеством вставок на ассемблере x86, которая запускается на эмуляторе ЭВМ Qemu. Каркас операционной системы постепенно выдается слушателям, наполнение каркаса осуществляется совместно на аудиторных занятиях и в ходе самостоятельной работы.

Задачами данного курса являются:

  • освоение студентами основных принципов внутреннего устройства ядра операционной системы;
  • приобретение теоретических знаний и практических умений и получение навыков проектирования и программирования компонентов ядра операционной системы и отладки программ в привилегированном режиме работы процессора.

Планируемые результаты обучения:

  • знать принципы внутреннего устройства ядра операционной системы;
  • знать механизмы аппаратной поддержки работы ядра;
  • знать механизмы обеспечения защиты ядра операционной системы от приложений и приложений друг от друга;
  • знать методы управления и распределения аппаратными ресурсами;
  • знать методы и средства виртуализации аппаратных ресурсов;
  • уметь проектировать компоненты ядра операционной системы;
  • уметь программировать на языке Си и на языке ассемблера с использованием привилегированных инструкций процессора;
  • уметь отлаживать программы, работающие в привилегированном режиме работы процессора;
  • владеть технологиями разработки компонентов ядра операционной системы.

Рассматриваемые темы:

  1. Введение. Карта физической памяти x86. Процесс загрузки и инициализации PC. UEFI BIOS и Legacy BIOS, инициализация основных устройств. Режимы работы процессора x86. Загрузчик JOS. Загрузка ядра.
  2. Однопоточная ОС без виртуальной памяти. Устройство ядра JOS. Файлы, полезные для отладки ядра. Компиляция первой собственной функции, вывод строк на консоль. Задача печати backtrace.
  3. Многопоточная ОС без виртуальной памяти. Управление распределением физических страницами. Описатели процессов в JOS. Создание процессов в JOS, загрузка приложений в память из бинарных секций образа ядра. Переключение контекстов. Кооперативное разделение времени. Примитивный планировщик FIFO без приоритетов.
  4. Вытесняющая многозадачность. Прерывания в x86. Инициализация IDT. Обработка прерываний таймера. Вытесняющее разделение времени. Примитивный планировщик Round Robin без приоритетов.
  5. Разделяемые данные. Примитивный аллокатор памяти. Проблемы обращения к разделяемой памяти из различных приложений. Прерывания в x86, обработка вложенных прерываний. Работа с ACPI и устройствами. Средства синхронизации, состояние гонок, деадлоки. Запрет прерываний, семафоры.
  6. ОС с виртуальной памятью и процессами. Виртуальная память. Сегментная и страничная трансляция. Таблица трансляции. Карта памяти в JOS. Описатели физических страниц в JOS. Защита ядра: режимы работы процессора, IDT, TSS, флаг PTE_U. Обработка page fault. Динамическое инструментирование с помощью санитайзеров.
  7. Системные вызовы. Переключение между режимами работы процессора. Прерывания и системные вызовы. Вложенные прерывания. Изменения в создании процессов, переключении между контекстами. Передача данных между программой и ядром — вопросы безопасности.
  8. Файловые системы. Организация работы с внешними устройствами хранения. Примитивная файловая система. Реализация системных вызовов open(), close(), read(), write().
  9. Механизмы межпроцессного взаимодействия. Системный вызов fork(). Реализация виртуальных системных вызовов, не требующих переключения контекста.
  10. Виртуализация. Механизмы и виды виртуализации. Аппаратная поддержка виртуализации. Виртуализация ввода-вывода IOMMU.

Практикум.

В рамках курса слушателям предлагается выполнить 12 лабораторных работ по каждой из тем. Они выполняются студентами в рамках самостоятельной работы. В заключение каждому студенту выдаётся индивидуальное комплексное практическое задание.