|
№ п/п |
Название модулей |
Разделы и темы лекционных занятий |
Содержание |
Аудиторная работа (зачетные ед./часы) |
|
1 |
Введение |
Введение в курс, знакомство с ОС Unix и с ядром Linux. |
Определение и функции ОС. Понятие ядра ОС, классификация ядер, отличия ядер от пользовательских приложений. История развития семейства ОС UNIX и Linux. Структура ядра и дерева исходных кодов Linux. Модульность и конфигурируемость ядра Linux. Знакомство с исходными файлами ядра Linux. Задание конфигурации. Компиляция ядра Linux, запуск скомпилированного ядра. Обзор средств разработки ядра. |
4 |
|
2 |
Процессы и потоки в Linux и их планирование |
Процессы и потоки в Linux; их жизненный цикл; сигналы в Linux. |
Понятие процесса. Иерархия процессов в Linux. Контекст процесса. Создание процессов в Linux. Понятие потоков исполнения и их реализация в ядре Linux. Адресные пространства процессов и потоков. Сигналы и обработчики сигналов в Linux. Завершение процессов. Задачи и алгоритмы планирования процессов. |
2 |
|
3 |
Планирование процессов и потоков. |
Системный планировщик. Планирование в режиме реального времени. Системный таймер. Приоритеты процессов и классы планирования в Linux. Переключение контекста и вызов системного планировщика. История планировщиков в Linux. Принципы работы планировщиков CFS и EEVDF. Модели вытесняемости в ядре Linux. |
2 |
|
|
4 |
Системные вызовы |
Системные вызовы. |
Уровни и интерфейсы ОС. Понятие системного вызова, его составляющие части. Системные вызовы в Linux. Выполнение системного вызова. Проверка аргументов системного вызова. Контекст системных вызовов. Создание нового системного вызова. Утилита strace. Быстрые системные вызовы. Реализация нового системного вызова и его использование в пользовательской программе. |
4 |
|
5 |
Подсистема прерываний |
Прерывания и их обработка. |
Понятие прерываний. Классификация прерываний. Программируемый контроллер прерываний. Номера и линии прерываний. Процесс обработки прерывания. Контекст прерываний. Обработчик прерываний, их установка и удаление. Вход в ядро при прерывании. Сравнение прерываний, исключений и сигналов. |
2 |
|
6 |
Нижние половины обработчиков прерываний. |
Верхняя и нижняя половины обработчика прерывания. Механизмы реализации нижних половин прерываний: отложенные прерывания, тасклеты, очереди отложенных действий, threaded interrupts, их особенности и возможности применения. |
2 |
|
|
7 |
Механизмы синхронизации |
Механизмы синхронизации. |
Состояние гонки в программировании и его источники. Понятие критической секции. Задача синхронизации. Масштабируемость при синхронизации. Атомарные операции, их использование и реализация. Per-CPU переменные. Спинлоки, их реализация и особенности использования. Мьютексы и семафоры. Спинлоки и семафоры по чтению-записи. Сравнение блокирующих примитивов синхронизации. Порядок обращений в память. Барьеры, их виды и применение. Механизмы неблокирующей синхронизации: последовательные блокировки и RCU, их особенности. |
2 |
|
8 |
Подсистема памяти |
Управление оперативной памятью; виртуальная память и таблица страниц; аппаратная поддержка. |
Иерархия памяти в современных вычислительных системах. Оперативная память, адресация в ней. Адресное пространство. Виртуальная память. Страничная организация памяти. Трансляция виртуальных адресов в физические. Таблица страниц. Структура записей в таблице страниц. Многоуровневые таблицы страниц. Таблица страниц в ядре Linux. Обход таблицы страниц. Ошибки отсутствия страницы. Преимущества и недостатки виртуальной памяти. Аппаратные устройства для поддержки виртуальной памяти: MMU, TLB, IOMMU. Прямой доступ устройств к памяти. |
2 |
|
9 |
Выделение памяти в ядре; управление пользовательской памятью. |
Механизмы выделения памяти в ядре. Buddy-аллокатор, его интерфейс и алгоритм работы. Идея блочного распределения памяти, slab-аллокатор и его интерфейсы. Функции kmalloc() и vmalloc(). Описание памяти процесса. Области виртуальной памяти. Особенности работы с памятью пользовательских программ: разделяемая память, demand paging, копирование при записи. Действия ядра при нехватке памяти. |
2 |
|
|
10 |
Файловая система и ввод-вывод |
Виртуальная файловая система; блочный ввод вывод; страничный кэш; модель представления устройств. |
Понятие файловой системы. Иерархия файлов в Linux. Виртуальная файловая система, её свойства и основные объекты: суперблок, индексный узел, элемент каталога и файл. Операции над объектами. Схема выполнения системного вызова, работающего с файлом. Символьные и блочные устройства. Планирование блочного ввода-вывода. Страничный кеш. Отложенная запись страниц и потоки синхронизатора. Модель представления устройств в Linux. Создание простейшего модуля ядра, организующего взаимодействие с пользователем через файловый интерфейс. |
4 |