Как стать автором
Обновить

Экзоядро: архитектура операционной системы управления ресурсами на уровне приложений

Время на прочтение 6 мин
Количество просмотров 12K
Привет, хабраюзер!
Сегодня я хочу тебя порадовать переводом части статьи за авторством Доусона Энглера, Франса Каашоека и Джеймса О'Тулла-младшего из лаборатории компьютерной науки M.I.T. (Dawson R. Engler, M. Frans Kaashoek, James O'Toole Jr., M.I.T. Laboratory of Computer Science) про экзоядерные операционные системы. Сама статья довольно объемная, так что переводить я ее буду по частям, если, конечно, вам будет интересно.

Аннотация


Традиционные операционные системы ограничивают производительность, гибкость и функцинальность приложений, используя фиксированные интерфейсы и предоставляя такие абстракции операционной системы, как межпроцессное взаимодействие и виртуальная память. Архитектура экзодерных операционных систем решает эти проблемы, переводя вопросы управления аппартными ресурсами на уровень приложений. При использовании такой архитектуры маленькое ядро ОС безопасно передает все аппаратные ресурсы недоверенной библиотеке операционной системы через низкоуровневые интерфейсы. Библиотека операционной системы Эта библиотека реализует системные объекты и политики. Отделение защиты аппаратных ресурсов от управления ими позволяет реализовать зависимые от потребностей приложения абстракции операционной системы, расширяя, специализируя, или даже заменяя системные библиотеки.
Мы сделали прототип экзоядерной операционной системы. Исследования показывают, что самые простые операции, такие как перехват исключений или передача управления выполняются от 10 до 100 раз быстрее, по сравнению с Ultrix, абсолютно монолитной версией UNIX. Кроме того, мы продемонстрировали, что экзоядро позволяет приложениям управлять машинными ресурсами таким образом, который просто недопустим в традиционных операционных системах. К примеру, виртуальная память и межпроцессное взаимодействие были реализованы с помощью библиотек уровня приложений. Исследования показывают, что примитивы виртуальной памяти и межпроцессного заимодействия уровня пользователя работают от 5 до 40 раз быстрее, чем аналогичные примитивы уровня ядра ОС Ultrix. Сравнивая с данными, приведенными в литературе, прототип экзоядерной системы как минимум в 5 раз быстрее традиционных операционных систем решает такие задачи, как перехват исключений и межпроцессное взаимодействие.

1. Введение


Операционные системы определяют интерфейс между приложениями и аппаратныи ресурсами. К сожалению, жестко определенные интерфейсы могут существенно снизить производительность, а так же удобство разработки приложений. Традиционно, операционные системы прячут информацию о машинных ресурсах за такими высокоуровневыми абстракциями, как процессы, файлы, адресное пространство и межпроцессное взаимодействие. Такие абстракции, по сути, определяют виртуальную машину, внутри которой и выполняется приложение — они не могут быть заменены или модифицированны недоверенными приложениями. Жесткое определение подобных абстракций является неудовлетворительным по трем основным причинам: это лишает приложения преимуществ доменно-зависимой оптимизации (domain-specific optimization), это не позволяет вносить изменения в существующие реализации абстракций, и это снижает гибкость при разработке приложений, так как новые абстракции могут быть реализованы только с использованием существующих (если это вообще возможно).
Мы верим, что эти проблемы могут быть решены, если перенести управление ресурсами на уровень приложений, т.е. сделать его недоверенным. Что бы доказать это, мы разработали новую архитектуру ядра, экзоядро, в которой такие традиционные абстракции операционной системы, как виртуальная память (VM), межпроцессное взаимодействие (IPC) реализованы на уровне приложений недоверенным приграммным обеспечением. При использовании этой архитектуры, минимальное ядро безопасно мультиплексирует доступные аппаратные ресурсы. Библиотеки операционной системы, работающие выше инфраструктуры экзоядра, реализуют высокоуровневые абстракции. Авторы приложений выбирают нужные им библиотеки, или пишут свои собственные. Использование новых библиотек реализуется простым связыванием исполняемых файлов.
Наши исследования показали, что приложения могут сильно выйграть от того, что появится механизм контроля над тем, как реализованы абстракции, управляющие аппаратными ресурсами. Apple и Ли [5] доказывают, что существующие примитивы общего назначения, реализующие доступ к виртуальной памяти, снижают производительность сборщиков мусора и систем с распределнной общей памятью. Цао (Cao) [10] говорит о том, что перевод на уровень приложений контроля над кэшированием файлов может снизить время работы приложений на 45%. Хартли и Черитон [26] и Крюгер [30] показывают, что приложение-зависимые политик виртуальной памяти могут увеличить скорость исполнения приложений. Стоунбрейкер [47] доказывает, что неподходящие решения при реализации файловых систем могут существенно повлиять на произволительность баз данных. Тэккот и Леви [50] показывают, что исключения могут обрабатываться на порядок быстрее, если перенести обработку сигналов на уровень приложений.
Что бы предоставить приложениям контроль над аппаратными ресурсами, экзоядро определяет низкоуровневый интерфейс. Архитектура экзоядра основана на одном старом и простом наблюдении: чем ниже уровень примитива, тем более эффективно он может быть испольщован, и тем больше свободны он предоставляет для реализации высокоуровневых абстракций.
Что бы реализовать как можно более низкоуровневый интерфейс (в идеале — аппаратный интерфейс), архитекторы экзоядра поставили перед собой одну цель: отделить защиту от управления. К примеру, экзоядро должно защищать фреймбуфферов (framebuffers), не зная про оконную систему, и защищать диск, не имея представления о файловой системе. Одним из решений является предоставить каждому приложению свою собственную виртуальную машину. Как мы покажем далее в разделе 8, виртуальные машины могут снизить производительность. К тому же, экзоядро не эмулирует аппаратные ресурсы, а предоставляет их, что позволяет использовать эффективное и простое решение. Экзоядро предоставляет три способа безопасного предоставления ресурсов. Во-первых, это безопасное связывание — приложения могут быть безопасно связаны с аппаратными ресурами, и обрабатывать события. Во-вторых, видимое обнуление ресурсов (visible resource revocation) И в третьих, используя протокол отмены, экзоядро может разорвать связь между неправильно работающим приложением и аппаратными ресурсами.
Мы разработали прототип экзоядерной системы, базирующийся на безопасном связывании, видимом обнудении ресурсов и протоколе отмены. Он содержит в себе экзоядро (Aegis), и недоверенные библиотеки операционной системы (ExOS). Мы используем эту систему, что бы продемонстрировать несколько важных свойств экзоядерной архитектуры:
  • экзоядра могут быть очень эффективными, благодаря малому количеству примитивов, которые необходимо реализовать;
  • низкоуровневое безопасное мультиплексирование ресурсов может предоставляться с очень малой задержкой;
  • традиционные абстракции, такие как VM и IPC, могут быть эффективно реализованы на уровне приложений, где они могут быть расширены, специализированы, или заменены;
  • приложения могут создавать более специализированные реализации абстракций, в зависимости от своих потребностей.

На практике, наш прототип экзоядерной системы предоставляет большую гибкость при разработке приложений, а так же обеспечивает большую производительность, чем системы с монолитным или микроядром. Низкоуровневый интерфейс ядра Aegis позволяет программному обеспечению уровня приложений более эффективно использовать ресурсы. Защищенная передача управления ядра Aegis почти в 7 раз быстрее, чем любая из заявленных реализаций. Перехват исключений происходит в пять раз быстрее.
Так же наше ядро предоставляет ExOS (и всему прочему ПО, работающему на уровне приложений) гибкость, недоступную в микроядерных системах. К примеру, VM, реализованная на уровне приложений, может легко быть интегрирована с системой распределнной общей памятью и сборщиками мусора. Протокол передачи управления, применяемый в Aegis, позволяет приложениям реализовывать большое количество примитивов IPC, выбирая между производительностью и удобством применения. К примеру, такие микроядерные системы, как Amoeba [48], Chorus [43], Mach [2], V [15], не позволяют недоверенным приложениям реализовывать примитивы IPC, так как виртуальная память и сервисы передачи сообщений реализованы в ядре доверенными серверами. Так же, такие абстракции, как структура таблицы страниц памяти, абстракции процессов, не могут быть модифицированы в микроядре. В конце концов, множество аппаратных ресурсов, таких как сеть, система вывода информации, жесткие диски, инкапсулированы в тяжеловесные сервера которые не могут быть обойдены, или оптимизированы для нужд приложений. Такие тяжеловесные сервера, по сути, являются подсистемами ядра, работающими на уровне приложений.
Эта статья сфокусирована на архитектуре и дизайне экзоядра, а так же на там, как оно может быть безопасно и эффективно реализовано. Вторая часть описывает экзоядро более детально. В третьей происходит обсуждение тех проблем, с которыми мы столкнулись при разработке дизайна и архитектуры. В четвертой мы описываем, в каком состоянии находится прототип, и как мы производили тестирование. Части 5 и 6 представляют реализацию. Седьмая часть содержит отчет об эксперименте, в котором мы демонстрируем гибкость экзоядерной архитектуры. Часть 8 описывает проделанную работу, а часть 9 подводит итоги.

С оригиналом вы можете ознакомиться тут.
Теги:
Хабы:
+23
Комментарии 16
Комментарии Комментарии 16

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн