Федеральное государственное бюджетное образовательное
учреждение высшего образования 
Московский государственный университет имени М.В. Ломоносова
Факультет вычислительной математики и кибернетики

УТВЕРЖДАЮ
декан факультета вычислительной математики и кибернетики
______________/И.А. Соколов /
«___» ________________20___г.

РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ
Наименование дисциплины:
Конструирование ядра операционной системы
Уровень высшего образования:
бакалавриат
Направление подготовки / специальность:
01.03.02 «Прикладная математика и информатика» (3++)
Направленность (профиль):
Системное программирование и компьютерные науки
Форма обучения:
очная

Москва 2023

Рабочая программа дисциплины (модуля) разработана в соответствии с самостоятельно установленным МГУ образовательным стандартом (ОС МГУ) для реализуемых основных профессиональных образовательных программ высшего образования по направлению подготовки 01.03.02, 01.04.02 "Прикладная математика и информатика" программы бакалавриата  Утвержден приказом МГУ от 30 августа 2019 года № 1041 (в редакции приказов МГУ от 11 сентября 2019 года № 1109, от 10 июня 2021 года № 609, от 7 октября 2021 года № 1048, от 21 декабря 2021 года № 1404, от 2 ноября 2022 года № 1299) 

1. Дисциплина относится к вариативной части ОПОП ВО.

2. Входные требования для освоения дисциплины (модуля): учащиеся должны владеть знаниями по алгоритмам и алгоритмическим языкам, архитектуре ЭВМ и языку ассемблера и операционным системам в объеме, соответствующем программе первых двух лет обучения основных образовательных программ бакалавриата по укрупненным группам направлений и специальностей 01.00.00 «Математика и механика», 02.00.00 «Компьютерные и информационные науки».

3. Результаты обучения по дисциплине (модулю), соотнесенные с требуемыми компетенциями выпускников.

Компетенции выпускников, частично формируемые при реализации дисциплины (модуля):

•	ОПК-3.Б Способность решать задачи в области прикладной математики и информатики с использованием современных информационных технологий, учитывая основные требования информационной безопасности
•	ПК-4.Б Способность применять в профессиональной деятельности современные средства разработки программного обеспечения и методы параллельной обработки данных, реализовывать отдельные этапы разработки системного и прикладного программного обеспечения, систем обработки и анализа данных, сетевых технологий
•	ПК-5.Б Способность определить совокупность математических методов и программных решений для отдельного этапа решения прикладной задачи в рамках заданной схемы

Планируемые результаты обучения по дисциплине (модулю):

Знать:
1.	принципы внутреннего устройства ядра операционной системы.
2.	механизмы аппаратной поддержки работы ядра.
3.	механизмы обеспечения защиты ядра операционной системы от приложений и приложений друг от друга.
4.	методы управления и распределения аппаратными ресурсам.
5.	методы и средства виртуализации аппаратных ресурсов.

Уметь:  
1.	проектировать компоненты ядра операционной системы.
2.	программировать на языке Си и на языке ассемблера с использованием привилегированных инструкций процессора.
3.	отлаживать программы, работающие в привилегированном режиме работы процессора.

Владеть:  
1.	технологиями разработки компонентов ядра операционной системы.
4. Формат обучения: лекции и семинарские занятия проводятся в компьютерном классе с использованием мультимедийного проектора и экрана для демонстрации слайдов, лабораторные работы выполняются студентами самостоятельно.

5. Объем дисциплины (модуля) составляет 4 з.е., в том числе 72 академических часа, отведенных на контактную работу обучающихся с преподавателем, 72 академических часа на самостоятельную работу обучающихся. 

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

Форма промежуточной аттестации по дисциплине (модулю)	Всего
(часы)	В том числе	
		Контактная работа 
(работа во взаимодействии с преподавателем)
Виды контактной работы, часы	Самостоятельная работа обучающегося,
 часы 
	
		Занятия лекционного типа*	Занятия семинарского типа*	Всего		
1.	Введение. Карта физической памяти x86. Процесс загрузки и инициализации PC. BIOS, инициализация основных устройств. Загрузчик JOS. Загрузка ядра.	6	2	2	4	2 (сдача 1-й лабораторной работы)	
2.	Устройство ядра JOS. Отладка кода ядра JOS. Компиляция первой собственной функции, вывод строк на консоль.	6	2	2	4	2 (сдача 2-й лабораторной работы)	
3.	Описатели процессов в JOS. Создание процессов в JOS, загрузка приложений в память из бинарных секций образа ядра. Переключение контекстов. Кооперативное разделение времени. Примитивный планировщик FIFO без приоритетов.	6	2	2	4	2 (сдача 3-й лабораторной работы)	
4.	Прерывания в x86. Инициализация IDT. Обработка прерываний таймера. Вытесняющее разделение времени. Примитивный планировщик Round Robin без приоритетов.	6	2	2	4	2 (сдача 4-й лабораторной работы)	
5.	Обработка вложенных прерываний в x86. Средства синхронизации, состояние гонок, дедлоки. Запрет прерываний, семафоры.	6	2	2	4	2 (сдача 5-й лабораторной работы)	
6.	Управление распределением физических страниц. Виртуальная память. Сегментная и страничная трансляция. Таблицы трансляции.	18	6	6	12	6 (сдача 6-й и 7-й лабораторных работ)	
7.	Переключение между режимами работы процессора. Прерывания и системные вызовы. Вложенные прерывания. Изменения в создании процессов, переключении между контекстами. Передача данных между программой и ядром.	12	4	4	8	4 (сдача 8-й лабораторной работы)	
8.	Управление процессами. Системный вызов fork(). Механизмы межпроцессного взаимодействия.	12	4	4	8	4 (сдача 9-й лабораторной работы)	
9.	Примитивная файловая система. Реализация системных вызовов open(), close(), read(), write(), exec().	12	4	4	8	4 (сдача 10-й лабораторной работы)	
10.	Механизмы и виды виртуализации. Аппаратная поддержка виртуализации.	12	8	4	12	0	
11.	Комплексное практическое задание.	12	0	4	4	8	
Промежуточная аттестация: устный экзамен	36	0	0	0	36	
Итого	144	36	36	72	72	

7. Фонд оценочных средств (ФОС) для оценивания результатов обучения по дисциплине (модулю)

7.1. Типовые контрольные задания или иные материалы для проведения текущего контроля успеваемости.

В рамках курса слушателям предлагается выполнить 11 лабораторных работ. Они выполняются студентами в рамках практикума и самостоятельной работы. 
Лабораторная работа №1. Процесс загрузки ЭВМ.
Лабораторная работа №2. Отладка кода ядра ОС в эмуляторе ЭВМ Qemu.
Лабораторная работа №3. Кооперативное разделение времени.
Лабораторная работа №4. Прерывания и вытесняющее разделение времени.
Лабораторная работа №5. Механизмы синхронизации.
Лабораторная работа №6. Управление распределением физических страниц.
Лабораторная работа №7. Виртуальная память.
Лабораторная работа №8. Системные вызовы.
Лабораторная работа №9. Системный вызов fork() и межпроцессное взаимодействие.
Лабораторная работа №10. Файловые системы.

После сдачи 8-й лабораторной работы студентам выдаётся комплексное индивидуальное задание, которое заключается в реализации заданной функциональности в ядре ОС. Например, задание может заключаться в реализации системных вызовов через инструкции sysenter/sysexit и проведение замера изменения накладных расходов на выполнение системного вызова по сравнению с реализацией через механизм прерываний.
Работа над заданием выполняется в два этапа:
1.	Подготовка дизайн-документа, описывающего основные принципы предлагаемого решения и тесты, на которых оно будет проверяться.
2.	Реализация решения, согласованного с преподавателями. Дизайн-документ должен быть помещён в репозиторий и обновляться, если в ходе реализации потребуется вносить изменения в дизайн. Также решение должно проходит все тесты, сформулированные на первом этапе.
Срок выполнения – 6 недель. Итоговое решение сдаётся в конце семестра.

7.2. Типовые контрольные задания или иные материалы для проведения промежуточной аттестации.

Вопросы к экзамену.

1.	Процесс загрузки и инициализации персональных ЭВМ архитектуры x86. Задачи, решаемые BIOS, инициализация основных устройств. Функции загрузчика. Загрузка ядра.
2.	Виды архитектур ядра ОС. Монолитные и микроядерные архитектуры.
3.	Переключение контекстов. Кооперативное разделение времени. Примитивный планировщик FIFO без приоритетов.
4.	Прерывания в x86. Инициализация IDT.
5.	Обработка прерываний таймера. Вытесняющее разделение времени. Примитивный планировщик Round Robin без приоритетов. Алгоритмы планирования процессорного времени.
6.	Обработка вложенных прерываний в x86. Средства синхронизации, состояние гонок, деадлоки. Запрет прерываний, спинлоки, мьютексы, семафоры. Read-Copy-Update.
7.	Карта физической памяти x86. Управление распределением физических страниц. 
8.	Виртуальная память. Сегментная и страничная трансляция x86. Таблицы трансляции.
9.	Переключение между режимами работы процессора. Прерывания и системные вызовы. AMD syscall/sysreturn и Intel sysenter/sysexit. Выполнение системных вызовов без переключения в привилегированный режим.
10.	Управление процессами. Системные вызовы fork() и exec(). Механизмы межпроцессного взаимодействия.
11.	Механизмы межпроцессного взаимодействия в ОС Linux (сигналы, разделяемая память, семафоры, очереди сообщений, программные каналы, сетевые интерфейсы, взаимодействие на основе файловых систем, KDBUS).
12.	Файловые системы. Основные задачи файловых систем. Организации работы файловых систем в ОС Linux: VFS, драйвера файловых систем, bio, кэширование. Обзор современных файловых систем ОС Linux (ext4, btrfs, XFS, jffs2, f2fs).
13.	Механизмы и виды виртуализации. Аппаратная поддержка виртуализации (Intel VT-x и AMD AMD-V). Вложенные таблицы трансляции и идентификаторы виртуальных процессоров.

ШКАЛА И КРИТЕРИИ ОЦЕНИВАНИЯ результатов обучения (РО) по дисциплине (модулю)  	
Оценка
РО и
соответствующие виды оценочных средств 	2	3	4	5	
Знания
Экзамен	Отсутствие знаний	Фрагментарные знания	Общие, но не структурированные знания	Сформированные систематические знания	
Умения
Лабораторные работы
 	Отсутствие умений	В целом успешное, но не систематическое умение	В целом успешное, но содержащее отдельные пробелы умение (допускает неточности непринципи-ального характера)	Успешное и систематическое умение	
Навыки 
(владения, опыт деятельности)
Комплексное практическое задание, Экзамен 	Отсутствие навыков (владений, опыта)	Наличие отдельных навыков (наличие фрагментарного опыта)	В целом, сформированные навыки (владения), но используемые не в активной форме	Сформированные навыки (владения), применяемые при решении задач	
Соответствие результатов обучения и компетенций, в развитии которых участвует дисциплина (модуль)	
Результаты обучения	Компетенция, с частичным формированием которой связано достижение результата обучения	
Знать:
1.	принципы внутреннего устройства ядра операционной системы.
2.	механизмы аппаратной поддержки работы ядра.
3.	механизмы обеспечения защиты ядра операционной системы от приложений и приложений друг от друга.
4.	методы управления и распределения аппаратными ресурсам.
5.	методы и средства виртуализации аппаратных ресурсов.

Владеть:  
1.	технологиями разработки компонентов ядра операционной системы.

ОПК-3.Б	
Уметь:  
1.	программировать на языке Си и на языке ассемблера с использованием привилегированных инструкций процессора.
2.	отлаживать программы, работающие в привилегированном режиме работы процессора.

ПК-4.Б	
Уметь:  
1.	проектировать компоненты ядра операционной системы.
	
ПК-5.Б	

8. Ресурсное обеспечение:

Основная литература:
  
1.	Э. Таненбаум “Архитектура компьютера”, Питер, 2012 г.
2.	Э. Таненбаум “Современные операционные системы”, Питер, 2011 г.
3.	Э. Таненбаум “Операционные системы. Разработка и реализация”, Питер, 2006 г.
4.	А. Робачевский, С. Немнюгин, О. Стесик «Операционная система UNIX»,  БХВ Санкт-Петербург, 2010 г.

Дополнительная литература:

5.	C. A. R. Hoare, Monitors: An Operating System Structuring Concept. Communications of the ACM, 17(10):549--557, 1974.
6.	Thomas W. Doeppner “Operating Systems In Depth: Design and Programming” Wiley, 2010
7.	Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. “Linux Device Drivers”. 
8.	Ellen Siever, Stephen Figgins, Robert Love, Arnold Robbins. “Linux in a Nutshell”. O'Relly Media, 2009.
9.	Скотт Шакон. «Про Git». Apress. Перевод на русский. (http://git-scm.com/book/ru).

Информационные справочные системы:

1.	Веб-страница дисциплины:  http://forge.ispras.ru/projects/os-course-YEAR/wiki
2.	IA-32 Intel Architecture Software Developer's Manual Volume 1: Basic Architecture. Basic 80x86 architecture and programming environment. http://developer.intel.com. 
3.	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. 
4.	Tool Interface Standard Executable and Linking Format (ELF) Specification Version 1.2.
5.	Свободно распространяемый эмулятор x86 компьютеров. (http://qemu.org)

Материально-техническое обеспечение: компьютер и мультимедийный проектор (для демонстрации слайдов в ходе лекций)
Для самостоятельной работы студенты используют компьютеры в машинных залах и/или личные компьютеры.

9. Язык преподавания - русский.

10. Преподаватели:  доцент факультета ВМК МГУ А.В. Хорошилов

11. Авторы программы:  доцент факультета ВМК МГУ А.В. Хорошилов