L4 — это семейство микроядер второго поколения , используемых для реализации различных типов операционных систем (ОС), в основном для Unix-подобных систем , совместимых с интерфейсом переносимых операционных систем ( POSIX ).
L4, как и его предшественник микроядро L3, был создан немецким ученым-компьютерщиком Йохеном Лидтке в ответ на низкую производительность более ранних ОС на основе микроядра. Лидтке считал, что система, изначально разработанная для высокой производительности, а не для других целей, может создать микроядро практического применения. Его оригинальная реализация в вручную закодированном коде языка ассемблера Intel i386 в 1993 году привлекла внимание, будучи в 20 раз быстрее, чем Mach . [1] Последующая публикация два года спустя [2] была признана настолько влиятельной, что выиграла премию ACM SIGOPS Hall of Fame Award 2015. С момента своего появления L4 разрабатывался как кроссплатформенный и для улучшения безопасности , изоляции и надежности .
Были различные повторные реализации оригинального двоичного интерфейса приложения ядра L4 (ABI) и его последователей, включая L4Ka::Pistachio (реализован Лидтке и его студентами в Технологическом институте Карлсруэ ), L4/MIPS ( Университет Нового Южного Уэльса (UNSW)), Fiasco ( Дрезденский технический университет (TU Dresden)). По этой причине название L4 было обобщено и больше не относится только к оригинальной реализации Лидтке. Теперь оно применяется ко всему семейству микроядер , включая интерфейс ядра L4 и его различные версии.
L4 широко используется. Один вариант, OKL4 от Open Kernel Labs , поставляется в миллиардах мобильных устройств. [3] [4]
Уточняя общую идею микроядра , Лидтке утверждает :
Концепция допускается внутри микроядра только в том случае, если ее перемещение за пределы ядра, т. е. разрешение конкурирующих реализаций, помешает реализации требуемой функциональности системы. [2]
В этом духе микроядро L4 предоставляет несколько базовых механизмов: адресные пространства (абстрагирование таблиц страниц и обеспечение защиты памяти), потоки и планирование (абстрагирование выполнения и обеспечение временной защиты) и межпроцессное взаимодействие (для контролируемого взаимодействия через границы изоляции).
Операционная система на основе микроядра, например L4, предоставляет службы в качестве серверов в пользовательском пространстве , которые монолитные ядра , например Linux или микроядра старого поколения, включают внутри себя. Например, для реализации безопасной Unix-подобной системы серверы должны предоставлять управление правами, которое Mach включил в ядро.
Низкая производительность микроядер первого поколения, таких как Mach , заставила ряд разработчиков пересмотреть всю концепцию микроядра в середине 1990-х годов. Концепция асинхронной внутриядерной буферизации процесса связи , используемая в Mach, оказалась одной из главных причин его низкой производительности. Это побудило разработчиков операционных систем на базе Mach переместить некоторые критичные ко времени компоненты, такие как файловые системы или драйверы, обратно в ядро. [ необходима цитата ] Хотя это несколько улучшило проблемы с производительностью, это явно нарушает концепцию минимальности настоящего микроядра (и сводит на нет их основные преимущества).
Подробный анализ узкого места Mach показал, что, помимо прочего, его рабочий набор слишком велик: код IPC демонстрирует плохую пространственную локальность; то есть он приводит к слишком большому количеству промахов кэша , большинство из которых происходят в ядре. [2] Этот анализ привел к принципу, согласно которому эффективное микроядро должно быть достаточно малым, чтобы большая часть критического для производительности кода помещалась в кэш (первого уровня) (предпочтительно небольшую часть указанного кэша).
Йохен Лидтке намеревался доказать, что хорошо спроектированный более тонкий уровень межпроцессного взаимодействия (IPC) с тщательным вниманием к производительности и машинно-специфическому (в отличие от кроссплатформенного программного обеспечения ) дизайну может дать большие реальные улучшения производительности. Вместо сложной системы IPC Маха, его микроядро L3 просто передало сообщение без дополнительных накладных расходов. Определение и реализация требуемых политик безопасности считались обязанностями серверов пользовательского пространства . Роль ядра заключалась только в предоставлении необходимого механизма, позволяющего серверам пользовательского уровня применять политики. L3, разработанная в 1988 году, зарекомендовала себя как безопасная и надежная операционная система , которая использовалась в течение многих лет, например, Technischer Überwachungsverein (Ассоциация технического надзора). [ необходима цитата ]
После некоторого опыта использования L3 Лидтке пришел к выводу, что несколько других концепций Mach также были неуместны. Упростив концепции микроядра еще больше, он разработал первое ядро L4, которое было в первую очередь разработано для высокой производительности. Чтобы максимизировать производительность, все ядро было написано на языке ассемблера , и его IPC был в 20 раз быстрее, чем у Mach. [1] Такое резкое увеличение производительности является редким событием в операционных системах, и работа Лидтке инициировала новые реализации L4 и работу над системами на основе L4 в ряде университетов и исследовательских институтов, включая IBM , где Лидтке начал работать в 1996 году, TU Dresden и UNSW. В исследовательском центре имени Томаса Дж. Уотсона IBM Лидтке и его коллеги продолжили исследования L4 и систем на основе микроядра в целом, особенно ОС Sawmill. [5]
В 1999 году Лидтке возглавил группу системной архитектуры в Университете Карлсруэ , где продолжил исследования микроядерных систем. В качестве доказательства концепции того, что высокопроизводительное микроядро может быть также создано на языке более высокого уровня, группа разработала L4Ka::Hazelnut , версию ядра на C++ , которая работала на машинах на базе IA-32 и ARM . Усилия увенчались успехом, производительность все еще была приемлемой, и с ее выпуском версии ядер на чистом ассемблере были фактически прекращены.
Параллельно с разработкой L4Ka::Hazelnut, в 1998 году группа операционных систем TUD:OS Технического университета Дрездена начала разрабатывать собственную реализацию интерфейса ядра L4 на языке C++, названную L4/Fiasco. В отличие от L4Ka::Hazelnut, которая не допускает параллелизма в ядре, и ее преемника L4Ka::Pistachio, который допускает прерывания в ядре только в определенных точках вытеснения, L4/Fiasco был полностью вытесняемым (за исключением чрезвычайно коротких атомарных операций) для достижения низкой задержки прерывания . Это считалось необходимым, поскольку L4/Fiasco используется в качестве основы DROPS, [6] операционной системы с возможностью жестких вычислений в реальном времени , также разработанной в Техническом университете Дрездена. Однако сложности полностью вытесняемой конструкции побудили более поздние версии Fiasco вернуться к традиционному подходу L4, заключающемуся в запуске ядра с отключенными прерываниями, за исключением ограниченного числа точек вытеснения.
Вплоть до выпуска L4Ka::Pistachio и более новых версий Fiasco все микроядра L4 были изначально тесно связаны с базовой архитектурой ЦП. Следующим крупным сдвигом в разработке L4 стала разработка кроссплатформенного (независимого от платформы) интерфейса прикладного программирования ( API ), который по-прежнему сохранял высокие характеристики производительности, несмотря на более высокий уровень переносимости. Хотя базовые концепции ядра были теми же, новый API предоставил много существенных изменений по сравнению с предыдущими версиями L4, включая лучшую поддержку многопроцессорных систем, более свободные связи между потоками и адресными пространствами и введение блоков управления потоками на уровне пользователя (UTCB) и виртуальных регистров. После выпуска нового API L4 (версии X.2, также известной как версия 4) в начале 2001 года Группа системной архитектуры в Университете Карлсруэ реализовала новое ядро, L4Ka::Pistachio , полностью с нуля, теперь с упором как на высокую производительность, так и на переносимость. Оно было выпущено под двухпунктной лицензией BSD . [7]
Микроядро L4/Fiasco также значительно улучшилось за эти годы. Теперь оно поддерживает несколько аппаратных платформ от x86 до AMD64 и несколько платформ ARM. В частности, версия Fiasco (Fiasco-UX) может работать как приложение пользовательского уровня на Linux.
L4/Fiasco реализует несколько расширений API L4v2. Exception IPC позволяет ядру отправлять исключения ЦП в приложения-обработчики пользовательского уровня. С помощью чужих потоков можно осуществлять детальный контроль над системными вызовами. Добавлены UTCB в стиле X.2. Кроме того, Fiasco содержит механизмы для управления правами связи и использованием ресурсов на уровне ядра. В Fiasco разработан набор базовых служб пользовательского уровня (названных L4Env), которые, среди прочего, используются для паравиртуализации текущей версии Linux (4.19 по состоянию на май 2019 г. [обновлять]) (названной L 4 Linux ).
Разработка также велась в Университете Нового Южного Уэльса (UNSW), где разработчики реализовали L4 на нескольких 64-битных платформах. Их работа привела к появлению L4/MIPS и L4/Alpha , в результате чего оригинальная версия Лидтке была ретроспективно названа L4/x86 . Как и оригинальные ядра Лидтке, ядра UNSW (написанные на смеси ассемблера и C) были непереносимыми и каждое реализовывалось с нуля. С выпуском высокопереносимого L4Ka::Pistachio группа UNSW отказалась от своих собственных ядер в пользу создания высоконастроенных портов L4Ka::Pistachio, включая самую быструю из когда-либо зарегистрированных реализацию передачи сообщений (36 циклов на архитектуре Itanium ). [8] Группа также продемонстрировала, что драйверы устройств могут работать одинаково хорошо как на уровне пользователя, так и в ядре, [9] и разработала Wombat , высокопереносимую версию Linux на L4, которая работает на процессорах x86 , ARM и MIPS . На процессорах XScale затраты на переключение контекста Wombat до 50 раз ниже, чем в родном Linux. [10]
Позже группа UNSW, теперь в NICTA (ранее National ICT Australia, Ltd .), разветвила L4Ka::Pistachio в новую версию L4 под названием NICTA::L4-embedded . Она предназначалась для использования в коммерческих встраиваемых системах , и, следовательно, компромиссы реализации были в пользу малого размера памяти и снижения сложности. API был изменен, чтобы сделать почти все системные вызовы достаточно короткими, чтобы им не требовались точки прерывания, чтобы обеспечить высокую скорость реагирования в реальном времени. [11]
В ноябре 2005 года NICTA объявила [12] , что Qualcomm развертывает версию NICTA L4 на своих чипсетах Mobile Station Modem . Это привело к использованию L4 в мобильных телефонах , продаваемых с конца 2006 года. В августе 2006 года лидер ERTOS и профессор UNSW Гернот Хейзер выделил компанию под названием Open Kernel Labs (OK Labs) для поддержки коммерческих пользователей L4 и дальнейшей разработки L4 для коммерческого использования под торговой маркой OKL4 в тесном сотрудничестве с NICTA. OKL4 μKernel Version 2.1, выпущенная в апреле 2008 года, была первой общедоступной версией L4, которая включала безопасность на основе возможностей . OKL4 μKernel 3.0, выпущенная в октябре 2008 года, была последней версией OKL4 μKernel с открытым исходным кодом. Более поздние версии имеют закрытый исходный код и основаны на переписывании для поддержки собственного варианта гипервизора под названием OKL4 Microvisor . OK Labs также распространяла паравиртуализированный Linux под названием OK:Linux, потомка Wombat, и паравиртуализированные версии SymbianOS и Android . OK Labs также приобрела права на seL4 у NICTA.
Поставки OKL4 превысили 1,5 млрд в начале 2012 года, [4] в основном на чипах беспроводных модемов Qualcomm. Другие развертывания включают автомобильные информационно-развлекательные системы. [13]
Процессоры серии Apple A , начиная с A7 , содержат сопроцессор Secure Enclave , работающий под управлением операционной системы L4 [14], называемой sepOS (Secure Enclave Processor OS), основанной на встроенном ядре L4, разработанном в NICTA в 2006 году. [15] В результате L4 поставляется на всех современных устройствах Apple, включая Mac с Apple Silicon . Только в 2015 году общие поставки iPhone оценивались в 310 миллионов. [16]
В 2006 году группа NICTA начала проектирование с нуля микроядра третьего поколения , названного seL4, с целью создания основы для высокозащищенных и надежных систем, подходящих для удовлетворения требований безопасности, таких как Common Criteria и выше. С самого начала разработка была направлена на формальную проверку ядра. Чтобы облегчить выполнение иногда противоречивых требований производительности и проверки, команда использовала программный процесс middle-out, начинающийся с исполняемой спецификации, написанной на языке Haskell . [17] seL4 использует управление доступом безопасности на основе возможностей для обеспечения формального обоснования доступности объектов.
Формальное доказательство функциональной корректности было завершено в 2009 году. [18] Доказательство гарантирует, что реализация ядра соответствует его спецификации, и подразумевает, что в нем нет ошибок реализации, таких как взаимоблокировки , лайвлокировки , переполнения буфера , арифметические исключения или использование неинициализированных переменных . seL4 считается первым в истории ядром операционной системы общего назначения, которое было проверено. [18] Работа над seL4 получила премию ACM SIGOPS Hall of Fame Award 2019.
seL4 использует новый подход к управлению ресурсами ядра, [19] экспортируя управление ресурсами ядра на уровень пользователя и подвергая их тому же контролю доступа на основе возможностей, что и пользовательские ресурсы. Эта модель, которая также была принята Barrelfish , упрощает рассуждения о свойствах изоляции и стала средством для последующих доказательств того, что seL4 обеспечивает основные свойства безопасности целостности и конфиденциальности. [20] Команда NICTA также доказала правильность перевода с языка программирования C в исполняемый машинный код , выведя компилятор из доверенной вычислительной базы seL4. [21] Это подразумевает, что доказательства безопасности высокого уровня справедливы для исполняемого файла ядра. seL4 также является первым опубликованным ядром ОС защищенного режима с полным и надежным анализом времени выполнения в худшем случае (WCET), что является предпосылкой для его использования в жестких вычислениях в реальном времени . [20]
29 июля 2014 года NICTA и General Dynamics C4 Systems объявили, что seL4 с доказательствами end-to-end теперь выпущен под лицензиями с открытым исходным кодом . [22] Исходный код ядра и доказательства лицензированы в соответствии с лицензией GNU General Public License версии 2 (GPLv2), а большинство библиотек и инструментов находятся под 2-м пунктом BSD . В апреле 2020 года было объявлено, что под эгидой Linux Foundation был создан фонд seL4 для ускорения разработки и развертывания seL4. [23]
Исследователи утверждают, что стоимость формальной проверки программного обеспечения ниже стоимости разработки традиционного «высоконадежного» программного обеспечения, несмотря на предоставление гораздо более надежных результатов. [24] В частности, стоимость одной строки кода во время разработки seL4 оценивалась примерно в 400 долларов США по сравнению с 1000 долларов США для традиционных высоконадежных систем. [25]
В рамках программы Агентства перспективных исследовательских проектов обороны ( DARPA ) по созданию высоконадежных кибервоенных систем (HACMS) NICTA совместно с партнерами по проекту Rockwell Collins , Galois Inc, Университетом Миннесоты и Boeing разработали высоконадежный беспилотник с использованием seL4, а также другие инструменты и программное обеспечение для обеспечения безопасности, с запланированной передачей технологии на опционально пилотируемый автономный вертолет Boeing AH-6 Unmanned Little Bird, разрабатываемый Boeing. Заключительная демонстрация технологии HACMS состоялась в Стерлинге, штат Вирджиния, в апреле 2017 года. [26] DARPA также финансировала несколько контрактов на инновационные исследования малого бизнеса (SBIR), связанных с seL4, в рамках программы, начатой Джоном Лончбери . Малые предприятия, получившие SBIR, связанный с seL4, включали: DornerWorks, Techshot, Wearable Inc, Real Time Innovations и Critical Technologies. [27]
В октябре 2023 года компания Nio Inc. объявила, что их операционные системы SkyOS на базе seL4 будут использоваться в массовых электромобилях с 2024 года. [28]
В 2023 году seL4 выиграл премию ACM Software System Award .
Osker, ОС, написанная на Haskell , была нацелена на спецификацию L4; хотя этот проект был сосредоточен в основном на использовании функционального языка программирования для разработки ОС, а не на исследовании микроядра. [29]
RedoxOS [30] — это операционная система на основе Rust, которая также вдохновлена seL4 и использует микроядро.
CodeZero [31] — микроядро L4 для встраиваемых систем с фокусом на виртуализацию и реализацию собственных служб ОС. Существует версия с лицензией GPL , [32] и версия, которая была повторно лицензирована B Labs Ltd., приобретенной Nvidia , как закрытая исходная версия и разветвлена в 2010 году. [33] [34]
Микроядро F9 [35] , лицензированная BSD реализация L4, предназначено для процессоров ARM Cortex-M для глубоко встраиваемых устройств с защитой памяти.
Архитектура виртуализации ОС NOVA [36] — это исследовательский проект, направленный на создание безопасной и эффективной среды виртуализации [37] [38] с небольшой доверенной вычислительной базой. NOVA состоит из микрогипервизора, гипервизора уровня пользователя ( монитора виртуальной машины ) и непривилегированной компонентной многосерверной пользовательской среды, работающей на нем под названием NUL. NOVA работает на многоядерных системах на базе ARMv8-A и x86.
WrmOS [39] — операционная система реального времени на базе микроядра L4. Имеет собственные реализации ядра, стандартных библиотек и сетевого стека, поддерживающие архитектуры ARM, SPARC, x86 и x86-64. На WrmOS работает паравиртуализированное ядро Linux (w4linux [40] ).
Helios — это микроядро, созданное на основе seL4. [41] Оно является частью операционной системы Ares, поддерживает x86-64 и aarch64 и по состоянию на февраль 2023 года все еще находится в стадии активной разработки. [42]
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на ноябрь 2024 г. ( ссылка )