Unikernel — это компьютерная программа, статически связанная с кодом операционной системы , от которого она зависит. Unikernels создаются с помощью специализированного компилятора , который идентифицирует службы операционной системы, используемые программой, и связывает их с одной или несколькими библиотеками операционных систем , которые их предоставляют. Такая программа не требует отдельной операционной системы и может работать в качестве гостя гипервизора . [1]
Одноядерная архитектура основана на концепциях, разработанных Exokernel и Nemesis в конце 1990-х годов.
В библиотечной операционной системе границы защиты смещаются на самые нижние аппаратные уровни, что приводит к:
Архитектура библиотечной ОС имеет ряд преимуществ и недостатков по сравнению с традиционными конструкциями ОС. Одним из преимуществ является то, что, поскольку существует только одно адресное пространство, нет необходимости повторять смену привилегий для перемещения данных между пространством пользователя и пространством ядра. Следовательно, библиотечная ОС может обеспечить повышенную производительность, предоставляя прямой доступ к оборудованию без необходимости перехода между пользовательским режимом и режимом ядра (в традиционном ядре этот переход состоит из одной инструкции TRAP [2] и не является тем же самым, что и переключение контекста. [3] ). Повышение производительности может быть достигнуто за счет устранения необходимости копировать данные между пространством пользователя и пространством ядра, хотя это также возможно с помощью драйверов устройств с нулевым копированием в традиционных операционных системах.
Недостаток заключается в том, что из-за отсутствия разделения попытка параллельного запуска нескольких приложений в библиотечной ОС, но с сильной изоляцией ресурсов, может стать сложной. [4] Кроме того, требуются драйверы устройств для конкретного оборудования, на котором работает ОС библиотеки. Поскольку оборудование быстро меняется, возникает необходимость регулярно переписывать драйверы, чтобы оставаться в курсе последних событий.
Виртуализация ОС может устранить некоторые из этих недостатков обычного оборудования. Современный гипервизор предоставляет виртуальным машинам процессорное время и строго изолированные виртуальные устройства. Библиотечной ОС, работающей как виртуальная машина, требуется только реализовать драйверы для этих стабильных виртуальных аппаратных устройств, и она может зависеть от гипервизора для управления реальным физическим оборудованием. Однако библиотеки протоколов по-прежнему необходимы для замены служб традиционной операционной системы. Создание этих библиотек протоколов — это основная часть работы при реализации современной библиотечной ОС. [1] Кроме того, использование гипервизора может снова привести к снижению производительности при переключении между одноядерным ядром и гипервизором, а также при передаче данных на виртуальные устройства гипервизора и обратно.
Уменьшая объем развертываемого кода, юникеры обязательно уменьшают вероятную поверхность атаки и, следовательно, улучшают свойства безопасности. [5] [6]
Пример клиента обмена сообщениями на основе одноядерного ядра имеет размер примерно 4% от размера эквивалентной базы кода, использующей Linux. [7]
Благодаря характеру их конструкции можно выполнять оптимизацию всей системы, включая драйверы устройств и логику приложений, тем самым улучшая специализацию. [8] [9] Например, готовые приложения, такие как nginx, SQLite и Redis, работающие через одноядерное ядро, показали повышение производительности в 1,7–2,7 раза. [10]
Unikernels регулярно загружаются очень быстро, успевая реагировать на входящие запросы до истечения времени ожидания запросов. [11] [12] [13]
Unikernels подходят для создания систем, которые следуют сервис-ориентированной или микросервисной архитектуре программного обеспечения.
Высокая степень специализации означает, что юникеры непригодны для многопользовательских вычислений общего назначения, для которых используются традиционные операционные системы. Добавление дополнительных функций или изменение скомпилированного одноядра обычно невозможно, вместо этого подход заключается в компиляции и развертывании нового одноядра с желаемыми изменениями.
. . . почти все системные вызовы вызываются из программ на языке C путем вызова библиотечной процедуры. . . Библиотечная процедура. . . выполняет инструкцию TRAP для переключения из пользовательского режима в режим ядра и начала выполнения. . .
{{cite book}}
: |journal=
игнорируется ( помощь )