Главная страница « Спецкурсы «

Курс «Конструирование ядра операционной системы»

Лектор: канд. физ.-мат. наук Хорошилов Алексей Владимирович
Продолжительность: лекции - 32 часа, самостоятельная работа - 32 часа (полугодовой)
Форма отчётности: экзамен
Аудитория: студенты 3 курса кафедры СП

Содержание курса

Новости
Информация
Преподаватели и сотрудники
Студенты и аспиранты
Научно-исследовательский семинар
Спецсеминары
Просеминар
Проекты
Ссылки
Поиск

Аннотация

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

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



Содержание курса

  1. Процесс загрузки ЭВМ. Настройка окружения, установка виртуальной машины. Компиляция и запуск ОС в эмуляторе. Монитор JOS. Карта физической памяти x86. Отладка ядра JOS с помощью GDB. Процесс загрузки и инициализации PC. BIOS, инициализация основных устройств. Загрузчик JOS. Проход в отладчике. Загрузка ядра.

  2. Однопоточная ОС без виртуальной памяти. Устройство ядра JOS. Файлы, полезные для отладки ядра. Компиляция первой собственной функции, вывод строк на консоль. Задача печати backtrace.

  3. Процесс загрузки ЭВМ. Настройка окружения, установка виртуальной машины. Компиляция и запуск ОС в эмуляторе. Монитор JOS. Карта физической памяти x86. Отладка ядра JOS с помощью GDB. Процесс загрузки и инициализации PC. BIOS, инициализация основных устройств. Загрузчик JOS. Проход в отладчике. Загрузка ядра.

  4. Однопоточная ОС без виртуальной памяти. Устройство ядра JOS. Файлы, полезные для отладки ядра. Компиляция первой собственной функции, вывод строк на консоль. Задача печати backtrace.

  5. Многопоточная ОС без виртуальной памяти. Управление распределением физических страницами. Описатели процессов в JOS. Создание процессов в JOS, загрузка приложений в память из бинарных секций образа ядра. Переключение контекстов. Кооперативное разделение времени. Примитивный планировщик FIFO без приоритетов.

  6. Вытесняющая многозадачность. Прерывания в x86. Инициализация IDT. Обработка прерываний таймера. Вытесняющее разделение времени. Примитивный планировщик Round Robin без приоритетов.

  7. Разделяемые данные. Примитивный аллокатор памяти. Проблемы обращения к разделяемой памяти из различных приложений. Прерывания в x86, обработка вложенных прерываний. Средства синхронизации, состояние гонок, деадлоки. Запрет прерываний, семафоры.

  8. ОС с виртуальной памятью и процессами. Виртуальная память. Сегментная и страничная трансляция. Таблица трансляции. Карта памяти в JOS. Описатели физических страниц в JOS. Защита ядра: режимы работы процессора, IDT, TSS, флаг PTE_U. Обработка page fault.

  9. Системные вызовы. Переключение между режимами работы процессора. Прерывания и системные вызовы. Вложенные прерывания. Изменения в создании процессов, переключении между контекстами. Передача данных между программой и ядром — вопросы безопасности.

  10. Файловые системы. Организация работы с внешними устройствами хранения. Примитивная файловая система. Реализация системных вызовов open(), close(), read(), write().

  11. Механизмы межпроцессного взаимодействия. Системный вызов exec(). Механизмы межпроцессного взаимодействия в операционных системах семейства UNIX: сигналы, каналы, разделяемая память, семафоры, очередь сообщений, сокеты.

  12. Виртуализация. Механизмы и виды виртуализации. Аппаратная поддержка виртуализации. Виртуализация ввода-вывода IOMMU.



Практикум

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

Лабораторная работа №1. Процесс загрузки ЭВМ.

Лабораторная работа №2. Отладка кода ядра ОС в эмуляторе ЭВМ Qemu.

Лабораторная работа №3. Кооперативное разделение времени.

Лабораторная работа №4. Вытесняющее разделение времени.

Лабораторная работа №5. Механизмы синхронизации.

Лабораторная работа №6. Виртуальная память.

Лабораторная работа №7. Системные вызовы.

Лабораторная работа №8. Управление памятью. Индивидуальное задание.

Лабораторная работа №9. Управление процессами. Индивидуальное задание.

Лабораторная работа №10. Файловые системы.

Лабораторная работа №11. Комплексное практическое задание.



Литература

  1. А. Робачевский, С. Немнюгин, О. Стесик «Операционная система UNIX», БХВ Санкт-Петербург, 2010 г.

  2. Э. Таненбаум “Архитектура компьютера”, Питер, 2012 г.

  3. Э. Таненбаум “Современные операционные системы”, Питер, 2011 г.

  4. Э. Таненбаум “Операционные системы. Разработка и реализация”, Питер, 2006 г.

  5. IA-32 Intel Architecture Software Developer's Manual Volume 1: Basic Architecture. Basic 80x86 architecture and programming environment. http://developer.intel.com.

  6. IA-32 Intel Architecture Software Developer's Manual Volume 3A: System Programming Guide. Operating system support, including segmentation, paging, tasks, interrupt and exception handling. http://developer.intel.com.

  7. Tool Interface Standard Executable and Linking Format (ELF) Specification Version 1.2.

  8. C. A. R. Hoare, Monitors: An Operating System Structuring Concept. Communications of the ACM, 17(10):549--557, 1974.

  9. Thomas W. Doeppner “Operating Systems In Depth: Design and Programming” Wiley, 2010

  10. Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. “Linux Device Drivers”.

  11. Ellen Siever, Stephen Figgins, Robert Love, Arnold Robbins. “Linux in a Nutshell”. O'Relly Media, 2009.



Аналогичные курсы и курсы по схожей тематике

  1. Operating System Engineering. Frans Kaashoek, Robert Morris. Massachusetts Institute of Technology.

  2. "Advanced" Operating Systems. Eddie Kohler. Harvard University.

  3. Advanced Operating Systems Implementation. David Mazieres. Stanford University.

  4. Principles of Operating Systems. Kevin Webb. University of California, San Diego.

  

© Кафедра системного программирования ВМК МГУ.

Обновлено: 5.9.2013