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