Читается в весеннем семестре на первом курсе магистаратуры МФТИ и ВШЭ.
Преподаватель: к.ф.-м.н. Хорошилов Алексей Владимирович.
Цель курса — знакомство на практике с основными принципами конструирования ядра операционной системы и сопутствующих понятий, таких как планировщик, виртуальная память, прерывания, механизмы синхронизации, системные вызовы, файловые системы и др.
В рамках курса каждым студентом выполняется постепенная разработка маленькой операционной системы на языке Си с небольшими количеством вставок на ассемблере x86, которая запускается на эмуляторе ЭВМ Qemu. Каркас операционной системы постепенно выдается слушателям, наполнение каркаса осуществляется совместно на аудиторных занятиях и в ходе самостоятельной работы.
Задачами данного курса являются:
- освоение студентами основных принципов внутреннего устройства ядра операционной системы;
- приобретение теоретических знаний и практических умений и получение навыков проектирования и программирования компонентов ядра операционной системы и отладки программ в привилегированном режиме работы процессора.
Планируемые результаты обучения:
- знать принципы внутреннего устройства ядра операционной системы;
- знать механизмы аппаратной поддержки работы ядра;
- знать механизмы обеспечения защиты ядра операционной системы от приложений и приложений друг от друга;
- знать методы управления и распределения аппаратными ресурсами;
- знать методы и средства виртуализации аппаратных ресурсов;
- уметь проектировать компоненты ядра операционной системы;
- уметь программировать на языке Си и на языке ассемблера с использованием привилегированных инструкций процессора;
- уметь отлаживать программы, работающие в привилегированном режиме работы процессора;
- владеть технологиями разработки компонентов ядра операционной системы.
Рассматриваемые темы:
- Введение. Карта физической памяти x86. Процесс загрузки и инициализации PC. UEFI BIOS и Legacy BIOS, инициализация основных устройств. Режимы работы процессора x86. Загрузчик JOS. Загрузка ядра.
- Однопоточная ОС без виртуальной памяти. Устройство ядра JOS. Файлы, полезные для отладки ядра. Компиляция первой собственной функции, вывод строк на консоль. Задача печати backtrace.
- Многопоточная ОС без виртуальной памяти. Управление распределением физических страницами. Описатели процессов в JOS. Создание процессов в JOS, загрузка приложений в память из бинарных секций образа ядра. Переключение контекстов. Кооперативное разделение времени. Примитивный планировщик FIFO без приоритетов.
- Вытесняющая многозадачность. Прерывания в x86. Инициализация IDT. Обработка прерываний таймера. Вытесняющее разделение времени. Примитивный планировщик Round Robin без приоритетов.
- Разделяемые данные. Примитивный аллокатор памяти. Проблемы обращения к разделяемой памяти из различных приложений. Прерывания в x86, обработка вложенных прерываний. Работа с ACPI и устройствами. Средства синхронизации, состояние гонок, деадлоки. Запрет прерываний, семафоры.
- ОС с виртуальной памятью и процессами. Виртуальная память. Сегментная и страничная трансляция. Таблица трансляции. Карта памяти в JOS. Описатели физических страниц в JOS. Защита ядра: режимы работы процессора, IDT, TSS, флаг PTE_U. Обработка page fault. Динамическое инструментирование с помощью санитайзеров.
- Системные вызовы. Переключение между режимами работы процессора. Прерывания и системные вызовы. Вложенные прерывания. Изменения в создании процессов, переключении между контекстами. Передача данных между программой и ядром — вопросы безопасности.
- Файловые системы. Организация работы с внешними устройствами хранения. Примитивная файловая система. Реализация системных вызовов open(), close(), read(), write().
- Механизмы межпроцессного взаимодействия. Системный вызов fork(). Реализация виртуальных системных вызовов, не требующих переключения контекста.
- Виртуализация. Механизмы и виды виртуализации. Аппаратная поддержка виртуализации. Виртуализация ввода-вывода IOMMU.
Практикум.
В рамках курса слушателям предлагается выполнить 12 лабораторных работ по каждой из тем. Они выполняются студентами в рамках самостоятельной работы. В заключение каждому студенту выдаётся индивидуальное комплексное практическое задание.