- •1. Определение и функции ос. Классификация многозадачных ос. Принципиальные отличия требований к системам реального времени и к обычными системами разделения времени.
- •1 Вопрос. Определение и функции ос.
- •2 Вопрос. Три подхода к определению ос:
- •3 Вопрос. Классификация многозадачных ос
- •2. Ядро ос. Подходы к определению ядра ос (классический и по Василенко). Причины неоднозначности. Режим ядра и режим пользователя. Системный вызов и его реализация (на примере любой ос/архитектуры).
- •4 Вопрос. Подходы к определению ядра ос
- •7 Вопрос. Понятие процесса. Адресное пространство процесса
- •8 Вопрос. Контекст процесса. Регистровый контекст
- •9 Вопрос. Системный контекст
- •10 Вопрос. Контекст процесса.
- •Создание и завершение процесса
- •11 Вопрос. Создание и завершение процесса
- •12 Вопрос. Граф состояний процесса. Причины перехода между состояниями.
- •Все возможные причины блокировки процесса
- •4. Вытесняющая многозадачность. Цели алгоритма планирования и их противоречивость. Основные алгоритмы планирования и их модификации.
- •13 Вопрос. Вытесняющая многозадачность
- •14 Вопрос. Задачи алгоритмов планирования
- •15 Вопрос. Планирование в системах пакетной обработки данных
- •17 Вопрос. Наименьшее оставшееся время выполнения. Трехуровневое планирование
- •18 Вопрос. Планирование в интерактивных системах
- •19 Вопрос. Несколько очередей. "Самый короткий процесс - следующий"
- •20 Вопрос. Гарантированное планирование. Лотерейное планирование. Справедливое планирование
- •21 Вопрос. Планирование в системах реального времени
- •22 Вопрос. Иерархия классов в Linux: rt, cfs, idle, stats.
- •23 Вопрос. Реальные алгоритмы планирования
- •24 Вопрос. Проблема балансировки нагрузки в smp-системах
- •Область применения нитей и процессов.
- •Реализация потоков в ядре
- •7. Синхронизация процессов и нитей (в т.Ч. Ядерных). Основные примитивы синхронизации. Различия семафоров и спин-блокировки. Ограничения использования семафоров в ядре (сюда же can_sleep()).
- •25 Вопрос. Примитивы межпроцессного взаимодействия
- •Спин-блокировки:
- •26 Вопрос. Семафоры
- •27 Вопрос. Мьютексы
- •[Крищенко: метода sys_linux]
- •28 Вопрос. Виртуальная память
- •Задачи, решаемые виртуальной памятью:
- •Вопросы из лекций:
- •29 Вопрос. Страничная организация виртуальной памяти
- •30 Вопрос. Сегментная и сегментно-страничная организации виртуальной памяти
- •31 Вопрос. Преобразование виртуального адреса в физический при страничном преобразовании
- •32 Вопрос. Tlb и его назначение. Моменты сброса tlb.
- •Адресное пространство процесса
- •Разделы адресного пространства процесса (32 разряда)
- •Выделение памяти процессу и освобождение им памяти. Связь функций выделения памятью стандартной библиотеки и системных вызовов, необходимость менеджера памяти режима пользователя
- •11. Виды межпроцессного взаимодействия и их классификация. Виды ipc в стандартах posix. Использование сокетов tcp/ip при большом количестве соединений Методы межпроцессного взаимодействия.
- •Виды ipc в стандартах posix
- •Использование сокетов tcp/ip при большом количестве соединений
- •32 Вопрос. Ввод-вывод и обработка прерываний.
- •33 Вопрос. Первичная и отложенная обработка прерываний, необходимость такого разделения. Реализация отложенной обработки.
- •13. Планировщик ввода-вывода для дисковых устройств. Алгоритмы планирования ввода-вывода для дискового устройства. Буферизация запросов.
- •34 Вопрос. Структура системы ввода-вывода
- •35 Вопрос. Алгоритмы планирования
- •36 Вопрос. Механизм ввода-вывода
- •36. Вопрос. Дескрипторы очереди запросов. Дескриптор запроса. Процесс планирования ввода-вывода
- •Процесс планирования ввода-вывода
- •14. Подсистема виртуальной фс в ядре ос. Кеширование. Ввод-вывод и прямой доступ к памяти на примере дискового устройства. Необходимость в уровне буферов (на примере Линукс)
- •Основные структуры
- •Уровень виртуальной файловой системы
- •Менеджер ввода-вывода
- •Стратегии организации ввода-вывода:
- •Ещё заметка про уровень буфферов
- •37 Вопрос. Основные структуры файловой системы.
- •Задачи файловой системы (from wiki)
- •38 Вопрос. Различные подходы к организации структур фс
- •39 Вопрос. Неразрывные файлы
- •40 Вопрос. Связанные списки. Связанные списки с индексацией
- •Связанные списки с индексацией
- •41 Вопрос. Индексные узлы
- •42 Вопрос. Реализация простой фс (предлагаю на примере minix file system).
- •43 Вопрос. Битовые карты, индексные узлы в minix 3
- •Индексные узлы
- •44 Вопрос. Журналируемые фс.
- •45 Вопрос. Физическая организация fat
- •46 Вопрос. Физическая организация s5 и ufs
- •47 Вопрос. Поиск адреса файла по его символьному имени
- •49 Вопрос. Физическая организация ntfs
- •50 Вопрос. Первый отрезок mft
- •51 Вопрос. Структура файлов ntfs
- •52 Вопрос. Виды файлов в ntfs
- •53 Вопрос. Каталоги ntfs
- •54 Вопрос. Файловые операции
- •55 Вопрос. Открытие файла
- •56 Вопрос. Обмен данными с файлом
- •57 Вопрос. Блокировки файлов
- •58 Вопрос. Стандартные файлы ввода и вывода, перенаправление вывода
- •59 Вопрос. Контроль доступа к файлам
- •60 Вопрос. Механизм контроля доступа
- •61 Вопрос. Организация контроля доступа в ос unix
- •62 Вопрос. Организация контроля доступа в ос Windows nt
- •63 Вопрос. Разрешения на доступ к каталогам и файлам
- •64 Вопрос. Встроенные группы пользователей и их права
- •65 Вопрос. Выводы
- •16. Сетевая подсистема ос и её функции. Причины включения tcp/ip в ядро ос. Реализация сетевых файловых систем.
- •Реализация сетевых файловых систем
- •Таненбаум Файловая система nfs
- •17. Идея микроядра. Недостатки и достоинства концепции микроядра (см. Qnx, Hurd, Minix, использование Mach в Mac os X). Идея микроядра
- •Достоинства:
- •Недостатки:
- •Более подробно о микроядре на примерах:
- •18. Идея ос на базе jit-vm. Недостатки, достоинства, ограничения концепции (смотреть, например, Singularity)
- •20. Существующие стандарты на интерфейсы ос. Группа стандартов Posix. Достоинства и недостатки реализации нестандартных интерфейсов (на примере WinApi). Реализация интерфейсов "чужеродных" ос.
- •Основные идеи стандарта posix
- •Api операционных систем. Проблемы, связанные с многообразием api (статья Wikipedia: Интерфейс программирования приложений)
- •21. Графическая подсистема и её место в ос на примере x11/Cocoa/WinApi. Достоинства и недостатки различных подходов.
Уровень виртуальной файловой системы
VFS действует как корневой уровень интерфейса файловой системы. VFS следит за всеми поддерживаемыми и всеми смонтированными на данный момент файловыми системами.
Файловые системы в
Linux можно динамически добавлять и удалять
с помощью нескольких функций регистрации.
В ядре хранится список поддерживаемых
файловых систем, который можно просмотреть
из пространства пользователя посредством
файловой системы /proc. В этом виртуальном
файле также показаны устройства,
связанные на текущий момент с файловыми
системами. Для того, чтобы добавить
новую файловую систему в Linux, вызывается
register_filesystem
. Эта команда имеет
один аргумент - ссылку на структуру
файловой системы (file_system_type
),
которая определяет название файловой
системы, набор атрибутов и две функции
системных блоков. Файловая система
также может быть незарегистрированной.
Регистрация новой
файловой системы заключается в добавлении
этой системы и относящейся к ней
информации в список file_systems (см. рисунок
2 и linux/include/linux/mount.h). Этот список определяет
поддерживаемые файловые системы.
Просмотреть его можно, введя в командной
строке cat /proc/filesystems
.
Рисунок 2. Файловая система, зарегистрированная в ядре
Другой
структурой, поддерживаемой VFS, являются
смонтированные файловые системы (см.
рисунок 3). Она предоставляет список
смонтированных на данный момент файловых
систем (см. linux/include/linux/fs.h). Она ссылается
на структуру системного блока superblock
,
о котором я расскажу ниже.
Рисунок 3. Список смонтированных файловых систем
Системный блок
Системным блоком (superblock) называется структура, представляющая файловую систему. В нее входит информация, необходимая для управления файловой системой во время работы. К такой информации относится название файловой системы (например, ext2), размер файловой системы и ее состояние, ссылку на блочное устройство и информацию метаданных (например, списки свободных блоков и т.п.). Как правило, системный блок хранится на носителе, но если его нет, он может быть создан в реальном времени. Структуру системного блока (см. рисунок 4) можно найти в ./linux/include/linux/fs.h.
Рисунок 4. Структура системного блока и работа узлов inode
Одним
из важнейших элементов системного блока
является определение его операций. Эта
структура определяет набор функций для
управления узлами inodes файловой системы.
Например, inodes могут выделяться с помощью
alloc_inode
и удаляться с помощью
destroy_inode
. Вы можете считывать и
записывать inodes с помощью команд read_inode
и write_inode
и синхронизировать
файловую систему с помощью команды
sync_fs
. Структура super_operations расположена
в ./linux/include/linux/fs.h. В каждой файловой
системе имеются собственные методы
inode, которые реализуют работу и выполняют
общую абстракцию на уровень VFS.
Узлы inode и dentry
Узел
inode представляет объект файловой системы
с уникальным идентификатором. Каждая
файловая система предоставляет методы
преобразования имен файлов в уникальные
идентификаторы inode и затем – в ссылки
на inode. На рисунке 5 показана часть
структуры inode вместе с несколькими
связанными структурами. Обратите
внимание, в частности, на inode_operations
и file_operations
. Каждая из этих структур
ссылается на отдельные операции, которые
могут выполняться с inode. Например,
inode_operations
определяет операции,
которые работают напрямую с inode, а
file_operations
относится к методам,
которые работают с файлами и директориями
(стандартные системные вызовы).
Последние
использованные узлы inodes и записи dentries
хранятся в кэше inode и кэше директорий
соответственно. Обратите внимание, что
каждому inode в кэше inode соответствует
запись dentry в кэше директорий. Структуры
inode
и dentry
определены в
./linux/include/linux/fs.h.
Рисунокк 5. Структура inode и связанные с ней операции
Буферный кэш
За исключением отдельных реализаций файловых систем (которые можно найти в ./linux/fs), в нижней части уровня файловой системы располагается буферный кэш. Здесь хранятся запросы на чтение и запись от отдельных файловых систем и физических устройств (посредством драйверов устройств). Из соображений производительности в Linux предусмотрен кэш запросов, позволяющий не обращаться по каждому запросу к физическому устройству. Вместо этого в нем кэшируются последние использованные буферы (страницы), которые могут быть быстро предоставлены отдельным файловым системам.