ФЭНДОМ


Предисловие Править

Традиционные операционный системы, предоставляя интерфейсы и реализации абстракций (таких, как межпроцессное взаимодействие и виртуальная память), ограничивают производительность, гибкость и функциональность приложений. Архитектура экзоядра решает эту проблему, предоставляя прикладному уровню возможность управлять ресурсами компьютера. Архитектура экзоядра включает в себя небольшое ядро и библиотеку пользовательского уровня(LibOS). Ядро через низкоуровневый интерфейс предоставляет все аппаратные ресурсы библиотекам пользовательского уровня. Библиотеки пользовательского уровня используют этот интерфейс для объявления системных объектов и политик. Такое разделение защиты ресурсов от управления ими позволяет специфически для приложения настраивать традиционные абстракции операционной системы путём расширения, специализации или даже замены библиотек.

Мы реализовали прототип экзоядерной операционной системы. Измерения показали, что большинство примитивных операций ядра (таких, как обработка исключений и безопасная передача управления) выполняются 10—100 раз быстрее, чем в Ultrix, зрелой UNIX-подобной операционной системе с монолитным ядром. В дополнение этого мы показали, что экзоядро позволяет приложениям управлять аппаратными ресурсами путём, недоступным в традиционных операционных системах. Например, виртуальная память и межпроцессное взаимодействие определены в библиотеке пользовательского уровня. Измерения показали, что примитивы виртуальной памяти и межпроцессного взаимодействия, определённые в библиотеке пользовательского уровня, быстрее в 5—40 раз, чем примитивы, выполняющие ту же работу в Ultrix. В сравнении с реализациями—достояниями науки, описанными в литературе, прототип экзоядерной системы по меньшей мере в 5 раз быстрее при выполнении операций вроде выборки исключений и межпроцессного взаимодействия.

Введение Править

Операционные системы определяют интерфейс между приложениями и аппаратными ресурсами. К несчастью, этот интерфейс может сильно ограничить производительность и свободу приложений. Традиционно операционные системы скрывают информацию об аппаратных ресурсах за высокоуровневыми абстракциями, такими как процессы, секции, адресные пространства и межпроцессное взаимодействие. Эти абстракции составляют виртуальную машину, на которой выполняются приложения. Реализация виртуальной машины не может быть заменена или модифицирована недоверенными приложениями. Закрепление реализации данных абстракций за ядром имеет следующие недостатки:

  • это лишает приложения проблемно-зависимой оптимизации;
  • это усложняет внесение изменений в реализации существующих абстракций;
  • это лишает гибкости разработчиков приложений, так как новые абстракции могут быть описаны лишь путём неудобной эмуляции поверх существующих (если это вообще возможно).

Мы верим, что данные проблемы могут быть разрешены путём предоставления прикладному уровню возможности управлять аппаратными ресурсами. Поэтому мы спроектировали новую архитектуру операционной системы — экзоядро, в которой такие абстракции, как виртуальная память и межпроцессное взаимодействие полностью реализованы на уровне недоверенных приложений. В такой архитектуре минимальное ядро, которое мы назвали экзоядром, надёжно разделяет аппаратные ресурсы. Библиотеки пользовательского уровня работают поверх интерфейса экзоядра, реализуя высокоуровневые абстракции. Разработчик приложения выбирает библиотеки или реализует собственные. Новые реализации библиотек пользовательского уровня регистрируются путём простой перекомпоновки исполняемого файла приложения. Существование подобных приложений может дать существенное преимущество, предоставляя больше контроля над тем, каким образом используются аппаратные ресурсы. Appel и Li [5] сообщают, что высокая цена общих примитивов для работы с виртуальной памятью снижают производительность постоянных хранилищ, сборщиков мусора и систем общей памяти. Cao et al. [10] сообщает, что контроль прикладного уровня над операциями файлового кэша может уменьшить время работы приложения на 45%. Harty and Cheriton [26] и Krueger et al. [30] показывают, как определяемая приложением политика виртуальной памяти может увеличить производительность приложения. Stonebraker [47] доказывает неподходящие решения в реализации системных секций, которые могут иметь драматичные последствия для производительности баз данных. Thekkath и Levi [50] показывают, что исключения могут быть обработаны с большей скоростью путём передачи их обработки приложениям. Чтобы предоставить приложениям контроль над аппаратными ресурсами, экзоядро определяет низкоуровневый интерфейс. Архитектура экзоядра разработана с учётом одного простого старого замечания: чем ниже уровень примитива, тем более эффективно он может быть реализован и тем больше возможностей он предоставляет разработчикам высокоуровневых абстракций.

Чтобы предоставить низкоуровневый (насколько это возможно) интерфейс (в идеале такой, как аппаратный), разработчик экзоядра должен решить единственную задачу: отделить защиту от управления. Для примера, экзоядро должно защищать кадровый буфер, не имея представления об оконных системах, а также предохранять диски, ничего не зная о файловых системах. Один из методов состоит в предоставлении каждому приложению своей собственной виртуальной машины [17]. Как будет сказано в разделе 8, виртуальные машины могут иметь несколько штрафов в производительности. Следовательно, экзоядро использует различные методы: экспорт аппаратных ресурсов вместо их эмуляции, что может быть реализовано просто и эффективно.

Экзоядро использует три технологии безопасного экспорта ресурсов. Во-первых, используя защищённые связи, приложения могут безопасно связываться с аппратными ресурсами и обрабатывать события. Во-вторых, используя видимые ревокации, приложения могут участвовать в ревокации ресурсов. В-третьих, используя протокол отмены (abort protocol), экзоядро может насильно оборвать защищённые связи «несговорчивого» приложения. Мы реализовали прототип экзоядерной системы, базирующейся на защищённых связях, видимых ревокациях и протоколе отмены. В прототип системы входит экзоядро (Aegis) и недоверительная библиотека пользовательского уровня (ExOS). Мы используем эту систему для демонстрации нескольких важных свойств экзоядерной архитектуры:

  • экзоядра можно сделать эффективными путём ограничения числа простых примитивов, которые они предоставляют;
  • низкоуровневое безопасное разделение аппаратных ресурсов может быть предоставлено с небольшими потерями;
  • традиционные абстракции, такие как виртуальная память и межпроцессное взаимодействие, могут быть эффективно реализованы на прикладном уровне, где они могут быть расширены, специализированы или заменены;
  • приложения могут создавать абстракции специального назначения, приспособленные под их функциональные и скоростные нужды.

На практике наш прототип экзоядерной системы предоставляет приложениям большую гибкость и лучшую производительность, чем монолитные и микроядерные системы. Низкоуровневый интерфейс Aegis позволяет ПО прикладного уровня, такого как ExOS, очень эффективно манипулировать ресурсами. Защищённая передача управления Aegis по меньшей мере в 7 раз быстрее, чем лучшая заявленная реализация [33]. Выборка исключений Aegis в 5 раз быстрее, чем лучшая заявленная реализация [50]. На идентичном оборудовании Aegis обрабатывает исключения и передает управление примерно на два порядка быстрее, чем Ultrix 4.2, зрелая монолитная система. Aegis также предоставляет ExOS (а также другому ПО прикладного уровня) гибкость, которая недоступна основанным на микроядре приложениям. Например, виртуальная память реализована на прикладном уровне, где она может быть тесно интегрирована с распределёнными системами памяти и сборщиками мусора. Эффективный протокол передачи управления Aegis позволяет приложениям строить широкий набор эффективных примитивов межпроцессного взаимодействия, меняя производительность на продвинутую функциональность. В противоположность, микроядерные системы, такие как Amoeba, Chorus, Mach и V, не позволяют недоверенным приложениям определять специализированные примитивы межпроцессного взаимодействия, потому как виртуальная память и сервисы доставки сообщений реализованы в ядре и в доверенных серверах. Аналогично, многие другие абстракции, такие как структуры каталога страниц и абстракция процесса, в микроядерной архитектуре не могут быть изменены. Наконец, в микроядерной архитектуре большинство аппаратных ресурсов, таких как сеть, экран и диск, инкапсулированы в тяжеловесные серверы, которые нельзя обойти или приспособить для нужд приложения. Такие тяжеловесные серверы можно рассматривать как фиксированные подсистемы ядра, которые запущены в пространстве пользователя.

Данный документ концентрируется на дизайне экзоядерной архитектуры и на том, каким образом она может быть реализована безопасно и эффективно. В разделе 2 более детально рассматривается конкретная экзоядерная система. Раздел 3 отвечает на вопросы которые возникают при разработке экзоядра. В разделе 4 приводится обзор состояния нашего прототипа и объясняется наша экспериментальная методика. Разделы 5 и 6 представляют реализацию и подводят итог тестов производительности Aegis и ExOS. Раздел 7 рассказывает о экспериментах, которые демонстрируют гибкость экзоядерной архитектуры. Раздел 8 подводит итог проделанной работе, а раздел 9 завершает документ.

Цели экзоядраПравить

Традиционно операционные системы централизуют управление ресурсами путем введения набора абстракций, которые не могут быть специализированы, расширены или заменены. Независимо от того, реализуются ли они ядром или доверенными серверами пользовательского уровня (как в микроядерных системах), эти абстракции реализуются привилегированным ПО и должны использоваться остальными приложениями, следовательно абстракции не могут быть изменены недоверенному ПО. Обычно абстракции включают процессы, файлы, адресные пространства, межпроцессное взаимодействие. В данном разделе мы рассмотрим общие проблемы, возникающие при реализации этих абстракций, и покажем, как экзоядерная архитектура решает такие проблемы.

Цена статических высокоуровневых абстракцийПравить

Существенное наблюдение об абстракциях в традиционных операционных системах состоит в том, что они чрезмерно общие. Традиционные операционные системы пытаются удовлетворить потребностям, общим для всех приложений. Как уже было подмечено Lampson и Sproul [32], Anderson et Al. [4], Massalin и PO [36], общие реализации абстракций заставляют приложения терять производительность за средства, которые приложениям не нужны. Эта проблема становится еще более важной с учетом взрывного роста производительности аппаратного обеспечения и огромного роста разнообразия программной базы. Мы уверены, что запрет на модификацию реализаций абстракций может понизить производительность, повысить сложность, а также ограничить функциональность прикладных программ. Фиксированные высокоуровневые абстракции снижают производительность приложений, так как нет единого способа абстракции аппаратных ресурсов, который был бы лучшим для всех приложений. Реализуя абстракции, операционная система вынуждена выбирать между поддержкой редких или плотных адресных пространств интенсивной нагрузки на чтение, либо на запись и т.д. Любой выбор лишает производительности какой либо класс приложений. Например, реляционная база данных и сборщики мусора порой имеют предсказуемые алгоритмы доступа к памяти, и их поизводительность страдает, когда применяется общая стратегия замещения страниц, такая как LRU (дольше всего не использовавшаяся страница). Увеличения в производительности при использовании политик, ориентированных на данное приложение, довольно надежны и постоянны. Cao et al. [10] измерил, что управляемое приложением кэширование файлов может снизить время работы приложения более чем на 45%.

Фиксированные высокоуровневые абстракции скрывают информацию об оборудовании от приложений прикладного уровня. Например, большинство современных систем не предоставляют прямой доступ прикладному уровню к исключениям, прерываниям таймера и дисковому вводу/выводу. К несчастью, сокрытие этой информации делает сложным или даже невозможным для приложений реализацию собственных абстракций управления ресурсами. Например, разработчики баз данных должны эмулировать произвольный доступ к хранилищу записей поверх файловой системы. Другой пример: реализация легковесных потоков поверх тяжеловесных процессов обычно вынуждает идти на компромисс между корректностью и производительностью, так как операционная система скрывает обращения к отсутствующим страницам и прерывания таймера [4]. В подобных случаях сложно получить хорошую производительность от высокоуровневых абстракций, поэтому сложность приложений заметно возрастает.

Фиксированные высокоуровневые абстракции ограничивают функциональность приложений из-за того, что имеется лишь один интерфейс между приложениями и аппаратными ресурсами. Из-за того что все приложения должны разделять единственный набор абстракций, изменения в интерфейс абстракций вносятся редко, порой не вносятся вообще. Этим обьясняется то, почему лишь малая часть хороших идей, разработанных в последнее десятилетие, адаптированы для широкого использования: много ли операционных систем поддерживают активизации планировщика [4], составную защиту областей в пределах одного адресного пространства [11], эффективные IPC [33], или эффективные и гибкие примитивы виртуальной памяти [5, 26, 30]?

Экзоядра: Заключительный аргумент.Править

Заключительный аргумент относится как к низкоуровневому ПО операционной системы, так и к низкоуровневым коммуникационным протоколам. Приложениям лучше чем операционной системе известно, каковы должны быть цели политик управления ресурсами, следовательно, приложениям нужно предоставить как можно больше контроля над этими политиками. Наше решение позволяет прикладному уровню реализовывать собственные абстракции управления ресурсами.

Чтобы предоставить прикладному уровню максимальные возможности по управлению ресурсами, экзоядерная архитектура состоит из тонкой прослойки экзоядра, которое безопасно разделяет и экспортирует аппаратные ресурсы через набор низкоуровневых примитивов. Библиотека пользовательского уровня использует низкоуровневый интерфейс экзоядра и реализует абстракции более высокого уровня. Оно может определить специфические реализации, которые лучшим образом удовлетворяют целям производительности и функциональности приложений. (Для краткости, мы иногда ссылаемся на "библиотеку пользовательского уровня" как на "приложение"). Такая структура позволяет расширять, специализировать и заменять абстракции. Например, структуры таблицы страниц могут изменяться в зависимости от библиотеки пользовательского уровня. Приложение вправе выбирать библиотеку, в которой реализация таблицы страниц лучше всего подходит его нуждам. Для лучшего понимания, никакая другая безопасная архитектура операционной системы не предоставляет столько полезной свободы приложениям.

Этот документ показывает, что экзоядерная архитектура - это эффективный путь решения проблем, перечиленных в разделе 2.1. Большая часть этих проблем решается простым перемещением реализации абстракций на прикладной уровень. Таким образом, конфликты между нуждами приложений и доступными абстракциями решаются без вмешательства в архитектуру ядра. Кроме того, безопасное разделение не требует сложных алгоритмов; по большей части нужна лишь таблица для отслеживания прав. Поэтому реализация экзоядра может быть простой. Простота ядра повышает надежность и снижает нагрузку, предлагает небольшой набор ресурсов и быструю адаптацию к новым требованиям (напрмер, сеть со скоростью 1 гигабит). В дополнение, так же как и в RISC-архитектуре, простота экзоядерных операций позволяет реализовать их очень эффективно.

Библиотека пользовательского уровняПравить

Реализация абстракций в библиотеке уровня пользователя может быть более простой и специализированной чем подобная реализация в ядре. Отчасти из-за того, что библиотеке пользовательского уровня не нужно заботиться о разделении ресурсов между соревнующимися приложениями с очень разными требованиями. К тому же, поскольку экзоядро считает библиотеку пользовательского уровня недоверенной, она свободно может доверять приложениям. Например, если приложение передает неверные аргументы библиотеке, последствия затронут лишь данное приложение. Наконец, Экзоядерная система снижает количество переходов между различными уровнями привилегий, так как большая часть операционной системы выполняется в пространстве пользователя.

Библиотеки уровня пользователя могут предоставить требуемые переносимость и совместимость. Приложения которые напрямую используют интерфейс экзоядра не могут быть переносимыми, так как интерфейс включает аппаратно-зависимую информацию. ПРиложения использующие библиотеки пользовательского уровня, реализующих стандартные интерфейсы (например POSIX), будут переносимыми между любыми системами, которые предоставляют похожий интерфейс. ПРиложения которые выполняются на экзоядре могут свободно заменять библиотеки пользовательского уровня, не имея никаких специальных привилегий. Это упрощает добавление и разработку новых стандартов и средств. Мы ожидаем, что большинство приложений будут использовать массу доступных библиотек пользовательского уровня, реализующих популярные интерфейсы. Лишь дизайнеры серьезных приложений будут разрабатывать библиотеки удовлетворяющие их нуждам. Библиотеки уровня пользователя можно сделать переносимыми путем разработки низкоуровневой прослойки с машинно-независимым интерфейсом.

Модульность может сильно упростить расширение или специализацию библиотек уровня пользователя. Методы обьектно-ориентированного программирования, перегрузка и наследование, позволяют создавать полезные реализации системных сервисов, которые легко специализировать и расширять, как это сделано в библиотеке VM++ [30]. Для снижения затрат дискового пространства под хранение библиотек, в готовой экзоядерной системе должны применяться поддержка общих библиотек и динамическое связывание.

Как и в микроядерных системах, экзоядро предоставляет совместимость сверху вниз тремя методами: первый - эмулируя операционную систему и программы на двоичном уровне; второй - реализуя уровень аппаратной абстракции поверх экзоядра; и третий - реализуя абстракции операционной системы поверх экзоядра.

Дизайн экзоядраПравить

Основное требование к экзоядру - дать максимум свободы библиотекам пользовательского уровня в управлении ресурсами, обеспечивая стабильность. Ошибка в одной библиотеке пользовательского уровня не повлияет на работу других библиотек. Чтобы удовлетворить этому требованию, экзоядро разделяет защиту от управления через низкоуровневый интерфейс.

Разделяя защиту и управление, экзоядро выполняет три важные задачи: (1) отслеживает чьей собственностью является любой ресурс, (2) гарантирует стабильность, охраняя использование ресурсов, (3) отменяя доступ к ресурсам. Чтобы выполнить эти задачи, ядро использует три метода. Во-первых, используя безопасные связи, библиотеки пользовательского уровня могут безопасно соединяться с ресурсами компьютера. Во-вторых, видимые ревокации позволяют библиотекам пользовательского уровня участвовать в процессе ревокации ресурсов. В-третьих, протокол отмены позволяет экзоядру насильно нарушать безопасные связи несговорчивых приложений. В этом разделе мы перечислим основные принципы построения экзоядерной архитектуры. Затем мы детально рассмотрим три метода которые мы используем для разделения защиты и управления.

Принципы построения Править

Экзоядро определяет детали интерфейса, используемого библиотекой пользовательского уровня для захвата, освобождения и использования аппаратно-зависимых ресурсов.

Этот раздел формулирует некоторые принципы, которыми мы руководствовались, добиваясь максимальной степени управления ресурсами библиотекой пользовательского уровня.

Безопасное представление ресурсов. Основной принцип экзоядра заключается в том, что ядро должно предоставлять безопасные низкоуровневые примитивы, позволяющие получать доступ к аппаратным ресурсам настолько непосредственно, насколько это возможно. Разработчик экзоядра поэтому стремится безопасно экспортировать все привилегированные инструкции, аппаратные возможности прямого доступа к памяти и прочие аппаратные ресурсы.

Перевод выполнил beef

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.