View
258
Download
0
Category
Preview:
Citation preview
Операционные Системы
3. Архитектура ОС
Брагин Алексей Владимировичaleksey@reactos.org
ИУ9, МГТУ им. Н.Э. Баумана
В этой лекции…
• Системные вызовы
• Архитектура современных ОС
• Виртуализация
• Многопроцессорность
© 2013 Брагин А.В. 2
© 2013 Брагин А.В. 3
Системные вызовы
• Интерфейс между процессом и ядром ОС
– Предоставляет доступ к сервисам СО
– Явный вызов ядра через программное прерывание
– Каждому системному вызову сопоставлен номер
– Системный вызов выполняется в режиме ядра
© 2013 Брагин А.В. 4
Системные вызовы 2
• Системные вызовы – единственная точка входа в ядро для пользовательских программ
• Категории системных вызовов– Управление процессами
– Управление памятью
– Управление файлами
– Управление устройствами
– Коммуникации
© 2013 Брагин А.В. 5
API и системные вызовы
• В ОС обычно присутствует библиотека, которая реализует набор API-функций, инкапсулирующих системные вызовы
– Написана на ЯВУ
– В случае с Unix/Linux это стандартная библиотека языка Си – libc
– В общем случае каждому системному вызову соответствует API-функция, которые используют разработчики ПО
© 2013 Брагин А.В. 6
Стандартизация API
• Были предприняты попытки стандартизировать API– POSIX. Стандарт, реализуемый многими
архитектурами:• Ядра Unix, Linux, Mac OS X, Windows NT, ReactOS
– WinAPI.• Старая реализация (Win16 API) была
стандартизована, как ECMA-234.
• Новая реализация (Win32 API) стала «стандартом де-факто». Стив Балмер в 2010 озвучил цифру 4 миллиона программ под Win32 API.
© 2013 Брагин А.В. 7
Выполнение системного вызова
• Системный вызов определяется номером
– Вызывающий процесс передаёт ядру номер того системного вызова, который ему необходимо выполнить
• В ОС есть таблица указателей на функции, реализующие системные вызовы
• Номер системного вызова – индекс в этой таблице
© 2013 Брагин А.В. 8
Выполнение системного вызова 2
© 2013 Брагин А.В. 9
Режим пользователя
Режим ядра
NtCreateEvent()
Программа
Системный вызов № i
Ядро
Таблица системных
вызовов
NtCreateEvent()i
Библиотека NTDLL
Функция в ядре
Передача параметров
• Как и при вызове обычных подпрограмм, есть три способа передачи параметров– Через регистры
• Параметры сохраняются в регистрах процессора• Очень ограниченное количество
– Через память• Параметры сохраняются в блоке памяти• Функции передаётся указатель на этот блок памяти• Так реализован системный вызов в Linux
– Через стек• Пользовательская программа помещает параметры в стек• Функция-обработчик системного вызова берёт параметры из
стека• Так реализован системный вызов в ReactOS и Windows.
© 2013 Брагин А.В. 10
Современные ОС
– Микроядерная архитектура
– Многопоточность
– Симметричная мультипроцессорность
– Виртуализация
– Распределённые операционные системы
© 2013 Брагин А.В. 11
Архитектура ядра
• Ядро – основной и самый важный компонент ОС
• Различные подходы к проектированию и реализации
– Монолитное ядро
– Слои/уровни
– Микроядро
– Модули ядра
© 2013 Брагин А.В. 12
Монолитное ядро
• Преимущественно операционных системы сейчас используют большое монолитное ядро (большинство Unix-систем, Linux)
• Монолитное ядро содержит– Планирование процессов– Управление файловой системой– Сетевое взаимодействие– Драйверы устройств– Управление памятью и т.д.
• Преимущества– Производительность
• Недостатки– Неустойчивость к сбоям
© 2013 Брагин А.В. 13
Монолитный подход - простейший
• Первые ОС были монолитными
• Нет определённой структуры
• Нет уровней
• Нет разделения на модули
• Вначале были небольшие простые системы
• Пример: MS-DOS– Больше функциональности, меньше места
– Разделения на уровни не было, программы могли работать с оборудованием напрямую
© 2013 Брагин А.В. 14
MS-DOS
© 2013 Брагин А.В. 15
Прикладное ПО
BIOS (драйверы устройств в BIOS)
Драйверы устройств в MS-DOS
Резидентные программы
Монолитный подход - уровни
• Простая неорганизованная структура – это плохо
• Улучшение: ОС разбивается на ряд уровней (слоёв), каждый последующий базируется на предыдущем– Самый нижний уровень – это аппаратное обеспечение
– Самый верхний уровень – это интерфейс пользователя
• Каждый уровень использует только функции (сервисы), предоставляемые нижестоящим уровнем.
• Все, или почти все уровни работают в режиме ядра
• Примеры таких ОС: MULTICS, VAX/VMS
© 2013 Брагин А.В. 16
Простой поуровневый подход
• Используется оригинальным ядром Unix– Небольшое число больших, монолитных слоев
– Нет инкапсуляции, функции и сервисы, предоставляемые на разных уровнях доступны всей системе
– По сути это ядро – набор процедур, которые могут вызвать любые другие процедуры
– Огромное количество функциональности в ядре
• Современные системы более чётко разделены на уровни
© 2013 Брагин А.В. 17
Ядро Unix
© 2013 Брагин А.В. 18
Пользователи
Оболочка, интерпретаторы командной строки, системные библиотеки
Символьный ввод/вывод, блочный ввод/вывод, драйверы терминалов, файловая система, дисковые
драйверы, планировщик, виртуальная память, …
Интерфейс системных вызовов
Интерфейс с аппаратурой
ТерминалыКонтроллеры
дисковФизическая
память
Поуровневый подход
• Если уровни строго разделены– над ними можно независимо работать
– можно независимо заменять
• Например, сетевой стек TCP/IP является примером строго разделения на уровни
• Сложности– Как определить эти слои
– Разделение на уровни возможно только при наличии иерархии вызовов и отсутствии циклических зависимостей
© 2013 Брагин А.В. 19
Поуровневый подход 2
• Циклические зависимости– Например, в драйвере диска
• Драйвер устройства может ожидать завершения операции ввода/вывода, это означает обращение к уровню планировщика времени ЦП
• ЦП может вызывать драйвер устройства для выгрузки и подгрузки процессов
• Чем больше уровней, тем больше возникает подобных ситуаций
• Отход от строгой поуровневой модели и возврат к небольшому числу слоёв с большой функциональностью
© 2013 Брагин А.В. 20
Микроядро
• Микроядро – ядро, содержащее только самые необходимые функции
• Идея: минимизировать ядро и вынести как можно больше функциональности в режим пользователя (т.е. исполнять эту функциональность в виде обычных процессов)
• Многие сервисы становятся пользовательскими процессами:– Драйверы устройств– Файловые системы– Менеджер виртуальной памяти– Оконные системы– Службы безопасности
• Такой подход популяризован ядром Mach («Мак»).• На основе Mach - Mac OS X и GNU Hurd
© 2013 Брагин А.В. 21
Структура микроядра
• Компоненты ОС, являющиеся внешними к микроядру реализуются в виде серверных процессов– Взаимодействие с ними через обмен сообщениями
• Микроядро основывается на механизме обмена сообщениями– Проверяет корректность сообщений– Передаёт их между компонентами– Проверяет, разрешён ли обмен сообщениями
• Предоставляет доступ к оборудованию• Фактически реализует клиент-серверную
архитектуру на одном компьютере
© 2013 Брагин А.В. 22
Микроядро: преимущества
• Унифицированные интерфейсы: процессы могут обмениваться сообщениями, нет разницы между режимом пользователя и ядра, все сервисы предоставляются через обмен сообщениями в клиент-серверной архитектуре
• Расширяемость: Легче расширить, новые сервисы добавляются как новые программы
• Портируемость: На новое оборудование нужно перенести только микроядро
• Надёжность и безопасность: меньше кода выполняется в режиме ядра, ошибки программ в режиме пользователя не влияют на остальную часть системы
© 2013 Брагин А.В. 23
Микроядро: недостатки
• Больше расходов на взаимодействие между системными сервисами– Каждое взаимодействие требует переключения режимов
(переход из режима пользователя в режим ядра и обратно)– Системные сервисы работающие в режиме пользователя –
это процессы, ОС нужно их планировать
• Решение 1: реинтеграция таких сервисов обратно в ядро– Улучшается производительность: меньше переключений,
одно адресное пространство– Такое было сделано в ядре Mach
• Решение 2: сделать ядро ещё меньше –экспериментальные архитектуры (нано-ядра, пико-ядра)
© 2013 Брагин А.В. 24
Микроядро 3
• Минимальная функциональность в микроядре:– Низкоуровневое управление памятью
• Отображение страниц на физическую память
• Все остальные механизмы предоставляются сервисами, работающими в режиме пользователя– Защита адресного пространства
– Механизмы замещения страниц
– Управление виртуальной памятью
– Межпроцессное взаимодействие (IPC)
– Ввод/вывод и обработка прерываний
© 2013 Брагин А.В. 25
Модули ядра
• Многие ОС реализуют поддержку модульности ядра– Например, Linux
• Каждый ключевой компонент – отдельный модуль• Взаимодействие через определенные интерфейсы• Загружаются по требованию
• Модули – нечто среднее между поуровневым и микроядерным подходом– Удобно для разработки– Модули в режиме ядра, меньше затраты на
взаимодействие– Компромисс ради производительности
© 2013 Брагин А.В. 26
Модульный подход
• Операционная система Mac OS X– Гибридный подход: ядро Mach (микроядро) комбинированное с BSD
ядром– Ядро BSD: Предоставляет поддержку интерфейса командной строки, сеть,
файловую систему, POSIX API и потоки– Ядро Mach: управление памятью, RPC, IPC, обмен сообщениями
© 2013 Брагин А.В. 27
BSD
Mach
Среда приложенийСервисы коммуникаций
Ядро
Виртуализация
• Отдельная большая тема
• Сейчас виртуализация есть практически везде
– планшет с Android
– Телефон с Java
– Веб-сервер
• Рассмотрим ключевые понятия в виртуализации
© 2013 Брагин А.В. 28
Виртуальные машины
• Впервые коммерчески доступны в мейнфреймах IBM в 1972 году
• Виртуальная машина – дальнейшее развитие поуровнего подхода– Создаёт виртуальное аппаратное окружение
(процессор, память, ввод/вывод), реализованное программно
– Работает как приложение в операционной системе– Виртуализация позволяет одному ПК или серверу
одновременно выполнять несколько ОС или несколько сессий одной ОС на одной платформе
– Таким образом ПК может выполнять множество различных программ, работающих на различных ОС
© 2013 Брагин А.В. 29
Виртуальные машины 2
© 2013 Брагин А.В. 30
Ядро Ядро Ядро
Поддержка виртуальных машин
Аппаратное обеспечение
ВМ1 ВМ2 ВМ3
Процессы Процессы Процессы
Ядро
Аппаратное обеспечение
Процессы
Многопроцессорность
• Улучшает производительность за счёт введения истинного параллелизма выполнения программ
• Симметричная мультипроцессорность– Два или больше процессоров
– Процессоры используют одну общую память и устройства ввода/вывода
– Общий набор инструкций
– ОС поддерживает архитектуру SMP при планировании, синхронизации
© 2013 Брагин А.В. 31
Преимущества SMP
• Производительность– На каждом процессоре может работать один
или больше процессов
• Доступность– Отказ одного процессора не приведёт к отказу
всей системы
• Расширяемость– Увеличение производительности за счёт
добавления процессоров
© 2013 Брагин А.В. 32
Изменения в архитектуре ОС
• Многопроцессорная ОС должна предоставлять всё тоже, что и однопроцессорная
• Плюс учитывать сложности многопроцессорности• Ключевые вопросы
– Реентерабельность ядра: Один и тот же код может выполняться одновременно несколькими процессорами
– Планирование: Процессы планируются на разных процессорах– Синхронизация: Истинный параллелизм выполнения процессов и
доступ к общим ресурсам (память, ввод/вывод) требуют эффективной синхронизации
– Управление памятью: Общая физическая память – нужно управлять этим ресурсом (механизмы замещения страниц)
– Надёжность и устойчивость к сбоям: Если один процессор отказывает, задачи надо расределить на другие.
© 2013 Брагин А.В. 33
Многоядерные процессоры
• Процессор содержит несколько вычислительных ядер
– Параллелизм в рамках одного процессора
– Каждое ядро – по сути отдельный процессор
• Преимущества
– Несколько процессоров в одном чипе существенно увеличивает производительность
– Введение различных уровней кэш-памяти
© 2013 Брагин А.В. 34
Распределенные ОС
• Распределенные операционные системы предоставляют
– Единое пространство общей памяти
– Унифицированные средства доступа
• Очевидно, что по скорости доступа к ресурсам они медленнее, чем однопроцессорные и SMP системы
© 2013 Брагин А.В. 35
Recommended