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

    Привет, хабраюзер!
    Сегодня я хочу тебя порадовать переводом части статьи за авторством Доусона Энглера, Франса Каашоека и Джеймса О'Тулла-младшего из лаборатории компьютерной науки 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 подводит итоги.

    С оригиналом вы можете ознакомиться тут.
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 16
    • +7
      Эта статья за 95-й год, кстати.
      • 0
        Человека видимо автор минусует? А статья действительно за 95й год.
        • +1
          Автор только глаза продрал, благо живет в более другом часом поясе.
          Ну да, за 95 год. И что?
          • +4
            Ну, например, то, что за 16 с лишним лет экзо-, нано- и микроядра не завоевали мир — что-то да значит.

            Сама по себе статья — мягко говоря, странная — содержит массу напыщенных слов типа «абстракция», «гибкость», «эффективность» и т.д. — но на практике, если заглянуть в оригинал, результат сводится к тому, что «да, мы написали очередную вариацию микроядра, оно вообще, конечно, само по себе тормозное, но для некоторых задач вы можете подключить вот такой-то вот сверхоптимизированный планировщик или менеджер виртуальной памяти и получить мощный рост в несколько раз».

            Все современные операционные системы — гибридные. Модульные варианты всевозможных планировщиков, менеджеров, подсистем безопасности и всевозможная перенастройка частей ядра на лету уже давным давно реальность, но в итоге не таким способом, как пророчили в 95-ом году.

            Современные IT развиваются не совсем так, как то, на что ориентировались в 95-ом. Сейчас в трендах, например, кластеры — т.е. как таковая аппаратная независимость конкретной вычислительной ноды от всех остальных. Если мы оптимизируемся под конкретное приложение, нам по сути не нужна сверхмодульная ОС по частям, нам вполне достаточно вкомпилировать монолитно один конкретный компонент и использовать это ядро на одной из нод кластера. Сейчас в трендах виртуализация — опять же, де факто отдельное выполнение отдельно настроенного ядра.

            Мейнфреймы и прочие гигантские системы, где одна по сути железка с одним ядром обслуживает всех пользователей на все случаи жизни, плавно умирают уже десятки лет.
            • +5
              Ну, например, то, что за 16 с лишним лет экзо-, нано- и микроядра не завоевали мир — что-то да значит.
              В общем случае — ничего не значит, ленивые вычисления, языки, предназначенные для многопроцессорных систем и компиляция в байт-код тоже очень долго пылились на полках.
              • +1
                Для начала, таки да, многие идеи, разработанные относительно давно, начинают применяться только сейчас. Та же самая виртуализация — первая ОС, работающая именно монитором виртуальных машин (то есть основная ОС просто выделяла ресурсы виртуальным машинам, на которых уже работали пользователи), была разработана в дремучем 1979 году (VM/370, А. Танненбаум, «Современные операционный системы»).
                По поводу напыщенности и абстрактности — это перевод только части статьи, о чем я сказал в самом начале. Собственно, только аннотация и введение.
                • +2
                  Прошу прощения за некую резкость, но я в целом всю эту статью представляю, и действительно считаю что она в значительной степени устарела. Если проводить аналогии — да, в принципе, сейчас до сих пор можно кое-что узнать об алгоритмах, скажем, компьютерной графики, по книжке 70-80-х годов, но здоровая часть проблематики и алгоритмов, которая там описана, сейчас уже стали неактуальны из-за здорового шага вперед в аппаратной части, а многое из того, о чем только мечтали и что предрекали — вполне стало реальностью.

                  Если брать конкретно уж теорию про экзоядра — то мне кажется, что не стоит тратить время и переводить именно эту статью. Навскидку — если уж именно переводить — то что-то из более позднего, из района кэмбриджских представлений о Nemesis — там уже по сути отошли от упирания на то, что «экзоядро — это круто, потому что мы дадим каждому процессу свои планировщики/менеджеры — и это очень эффективно». Взамен этого они стали уже упирать на более правильные и честные алгоритмы распределения ресурсов, в том числе построение в районе этого распределения общих для всех типов ресурсов алгоритмов, тем самым автоматически достигая того, что называется «real time OS», автоматически получая виртуальную память, различные алгоритмы вытеснения и т.д. Nemesis предполагалось использовать как сверхсистему для нагруженной работы с multimedia в real-time — т.е. всякие обслуживания эфиров и т.п. С таким подходом мне уже гораздо трудней что-то противопоставить — здесь действительно есть определенное непаханное поле, хотя, с другой стороны, в последние лет 5-10 в этой области рулят GPU и всякие потоково-конвейнерные алгоритмы на них (что по сути тоже разгружает центральный процессор и делает задачу более теоретически красивой балансировки нагрузки на него куда менее актуальной).

                  Я бы предложил вам перевести, например, краткую презентацию Nemesis — это презентация 1998 года (Nemesis как проект загнулся в 1999). Она хороша тем, что очень простым языком, не вдаваясь в сложные технические подробности, показывает идеологию построения последнего (актуального) поколения экзоядерных систем, их приоритеты, сильные и слабые стороны. Ну и, да, там есть картинки — что тоже полезно :)
        • 0
          Ждём продолжения!
          • +3
            «Abstract» переводится как «Аннотация», а не как «Абстракция»…
            • 0
              Спасибо, поправил.
            • 0
              А драйверы? Как я понял, дрова писать в каждом приложении самим?

              Также не понятна область применения подобных ОС.
              • 0
                дрова писать в каждом приложении самим

                Это вряд ли. Обычно в системах такого типа драйвер может быть един на всю систему. Просто с точки зрения ядра это такой же процесс внешнего, пользовательского уровня — как и любая другая библиотека или прикладная программа.
              • +2
                Наши исследования показали, что приложения могут сильно выйграть от того
                «Выйграть»? Издеваетесь? Нет, в самом деле, откуда эта дрянь попёрла? Ладно ещё в комментариях, но в статье!
                • +1
                  Разве только в «выйграть» дело?
                  «заимодействия», «испольщован», «экзоядро должно защищать фреймбуфферов» (вообще перл). Не говоря уж о менее явных ошибках, типа «Что бы предоставить».
                  И это при том, что я статью, собственно, не читал. Ибо читать ее невозможно, по качеству перевода она напоминает результат какого-нибудь генератора текста :(
                  • 0
                    Кажется, я могу Вам помочь развидеть подобные ошибки.
                  • 0
                    >>«экзоядро должно защищать фреймбуфферов» (вообще перл).
                    не надо тут на Perl гнать ;)

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое