Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021)

Материал из 0x1.tv

Докладчик
Александр Андреев™

Для того, чтобы разобраться во внутреннем устройстве операционных систем, необходимо исследовать их исходные тексты, а ещё лучше — дописать или переписать их отдельные компоненты. Для этих целей открытость исходного кода является обязательным требованием к операционным системам, но открытый код ещё не делает систему доступной для изучения.

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

В работе представлена «игрушечная» операционная система, которая не предназначена для промышленного применения, но при этом является удобной для изучения внутреннего устройства ядра. Предложенная операционная система была использована в рамках семестрового курса по разработке операционных систем в МФТИ.

Видео

on youtube

Презентация

Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021).pdf

Thesis

О курсе по устройству операционных систем

Классическим курсом по внутреннему устройству операционных систем является курс Operating Systems Engineering американского университета MIT. Методически курс оформлен в виде «лабораторных работ», в рамках выполнения которых студенты должны реализовать какую-либо функциональность операционной системы. При этом студенты не пишут всю операционную систему с нуля, а имеют некоторый «скелет», — минимально функциональную систему небольшого размера. В рамках оригинального курса используется операционная система XV6[1], — открытая операционная система для архитектуры x86, которая является клоном очень старой оригинальной UNIX 6-й редакции. В России похожий курс читается в Школе анализа данных от Яндекс, где также используется система XV6.

В 2020 году на направлении «Информатика и вычислительная техника» ФПМИ МФТИ прошла первая итерация курса по внутреннему устройству операционных систем, идейно повторяющий курсы в MIT и ШАД. В рамках этого курса были изучены: процесс загрузки ОС, прерывания процессора, виртуальная память, планировщик процессов, работа с HDD в различных режимах, базовые принципы работы файловых систем, изоляция процессов. В отличии от курсов-прообразов, для курса в МФТИ была разработана своя базовая операционная система.

Почему не XV6

Использовать GNU/Linux или существующие BSD-решения общего назначения в учебных целях невозможно, — одного семестра просто не хватит на то, чтобы изучить архитектуру минимальной рабочей системы. Существуют системы, существенно более компактные, хотя и ограниченные в функциональности. Одной из таких систем является XV6 , разработанная в 2006 году в MIT специально для учебного курса по низкоуровневому программированию.

Из преимуществ этой системы можно отметить наличие готового учебного курса (методических материалов), который можно использовать с минимальными переработками. Учебные материалы, как и сама операционная система, опубликованы в открытом доступе. При этом, качество исходных текстов самой системы оставляет желать лучшего: в коде отсутствует единый стиль кода, часто используются однобуквенные переменные, файлы userspace-программ перемешаны с файлами ядра. Также в её коде используются устаревшие механизмы: не используется ACPI, нет поддержки DMA для чтения с жёстких дисков и т. д.

Мы ставили перед собой цель не сделать ещё один курс по XV6, а дать дополнительный современный материал сверх того, что мотивированные студенты могут найти в открытом доступе, поэтому для этого потребовалась новая операционная система.

Архитектура системы HellOS

Система HellOS реализована на языке С для архитектуры x86 и предназначена для работы в виртуальной машине QEMU. Представляет собой простое монолитное ядро, расположенное в верхних адресах памяти. Поддерживает загрузку с помощью multiboot-совместимого загрузчика (подходят все современные загрузчики OC). В HellOS реализованы базовые функции для работы с примитивами x86: обработка вектора прерываний, работа с виртуальной памятью и т.д. Реализованы функции парсинга и валидации ACPI таблиц. Не используется устаревший PIC, вместо него для управление прерываниями используется APIC/LAPIC. HellOS имеет базовый не fair-share планировщик процессов, не поддерживающий приоритеты процессов. Все эти расширения остаются в качестве лабораторных работ. Также в HellOS есть драйвер для ATA-совместимых устройств, в качестве механизма трансфера данных используется DMA вместо устаревшего PIO. Поверх драйвера реализована простая виртуальная файловая система, на текущий момент поддерживается только ext2.

Основываясь на архитектуре HellOS, курс разбит на следующие темы:

  1. Процесс загрузки и bootloader’ы.
  2. Прерывания процессора.
  3. Реализация виртуальной памяти в x86.
  4. Планировщики процессов.
  5. Работа с HDD (режимы PIO и DMA).
  6. Базовые принципы работы файловых систем на примере ext2.
  7. Запуск userspace-приложений.

Лабораторные работы, предлагаемые студентам

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

  1. Подготовка окружения (настройка кросс-компилятора, qemu, gdb, make etc). Это самая простая, но самая важная лабораторная работа. В ходе неё студенты устанавливают нужны утилиты и программы для компиляции, разработки и тестирования кода, которые они будут писать в последующих работах.
  2. Калибровка APIC таймера и разработка драйвера PS/2-совместимой клавиатуры. Эта работа учит студентов работе с примитивами x86 (I/O операции процессора, прерывания, и т.д.). А также учит студентов искать и использовать документацию по x86.
  3. Менеджер виртуальной памяти. Как показала первая итерация курса, это была самая сложная лабораторная работа. Она предлагает студентам реализовать базовый аллокатор физических фреймов, а поверх него средства для аллокации виртуальной памяти.
  4. Реализация механизма переключения контекста и изоляция процессов. Базовый context switch поддержан в HellOS, однако обладает рядом недостатков: например, не поддерживается FPU-контекст (x87 и SSE), отсутствует изоляция виртуальных адресных пространств для различных процессов. Эти недостатки и предлагается исправить студентам.

Результаты и дальнейшее развитие

Реализована операционная система, которая опубликована на GitHub[2] под лицензией MIT. Первая апробация курса прошла осенью 2020 года, следующая итерация запланирована на осенний семестр 2021 года. В рамках первой итерации студенты смогли освоить большинство тем, однако при этом у них возникли сложности с усвоением тем по виртуальной памяти.

В следующей итерации курса и HellOS будет добавлена поддержка архитектуры ARM, которая будет изучаться параллельно с x86.

Учебная операционная система HellOS (Александр Андреев, OSEDUCONF-2021)!.jpg

Примечания и ссылки

  1. Xv6, a simple Unix-like teaching operating system, https://pdos.csail.mit.edu/6.828/2020/xv6.html
  2. Simple Operating System, https://github.com/carzil/hellos



Plays:1   Comments:0