Специализированное ядро
Из Википедии, бесплатной энциклопедии
Специализированное ядро (unikernel) — это тип компьютерной программы, которая статически скомпонована с кодом используемой ей функциональности в операционной системе.
Такие ядра создаются с помощью специализированного компилятора, который находит используемые прикладной программой сервисы операционной системы, и статически связывает их с их реализациями в соотвествующих системных библиотеках.
Такая программа не требует отдельной операционной системы и может работать в качестве «гостя» гипервизора[1].
Архитектура специализированного ядра основана на идеях конца 1990-х годов: концепциях экзоядра и операционной системы Nemesis.
Архитектура
[править | править код]В подобной «библиотечной операционной системе» границы безопасности смещены к самым нижним, аппаратным уровням, что приводит к:
- набору библиотек работы с оборудованием или реализации сетевых протоколов;
- набору правил контроля доступа и изоляции на уровне приложений.
У «библиотечной ОС» есть преимущества и недостатки по сравнению с традиционной архитектурой операционных систем. Например, т.к. используется единое адресное пространство, нет необходимости в постоянной проверке прав при перемещении данных между пользовательским пространством и ядром, и тем самым улучшается производительность за счет прямого доступа к аппаратным ресурсам. В традиционных операционных системах этот переход требует некоторой операции прерывания TRAP[2], более ресурсоемкой, чем обычное переключение контекста. Устранение копирования данных между пользовательским пространством и ядром системы, также может улучшить производительность, хотя это возможно и в традиционных операционных системах с «zero-copy» драйверами устройств.
С другой стороны, отсутствие такого разделения в «библиотечной ОС» может усложнить работу нескольких параллельно запущенных приложений при сильно изолированных ресурсах[3]. К тому же, потребуются драйвера устройств для используемого «библиотечной ОС» оборудования, а из-за постоянной эволюции аппаратного окружения требуется постоянно их адаптировать.
Виртуализация ОС частично решает эти проблемы на стандартном оборудовании. Современный гипервизор предоставляет виртуальным машинам время ЦП и сильно изолированные виртуальные устройства. «Библиотечной ОС» запущенной в виде виртуальной машины, нужны только стабильные драйверы для этих виртуальных устройств, а реальным физическим оборудованием управляет гипервизор. Однако все еще нужны библиотеки протоколов, чтобы заменить службы традиционной ОС, и создание таких библиотек — основная работа при внедрении современной библиотечной ОС[1]. Кроме того, зависимость от гипервизора вводит накладные расходы при переключении между специализированным ядром и гипервизором, а также при передаче данных в виртуальные устройства.
Уменьшение используемого кода сокращает поверхность атаки и улучшает информационную безопасность [4][5][6]. Например, размер клиента мессенджера может быть всего 4% от аналогичной реализации на Linux[7].
Также, при статической компиляции и компоновке, можно выполнить глобальную оптимизацию всей системы, включая драйверы устройств и логику приложений, улучшая специализацию[8][9][10].
Например, таким образом собранные nginx, SQLite и Redis показали повышение производительности в 1,7-2,7 раз[11].
Специализированные ядра могут запускаться настолько быстро, что успевают обработать входящие запрос, в отличие от традиционных систем, где требуется загрузить ядро и сервисы для готовности к обслуживанию[12][13][14].
Использование специализированных ядер хорошо подходит для систем использующих сервис-ориентированную архитектуру или микросервисы[15][16][17]. С другой стороны, из-за высокой степени специализации, такие ядра не подходят для многопользовательского вычислений общего назначения, для которых обычно используют традиционные операционные системы. Добавление дополнительной функциональности или изменение уже скомпилированного специализированного ядра обычно невозможно, вместо этого собирается и развертывается новое ядро с требуемыми изменениями.
См. также
[править | править код]Ссылки
[править | править код]- ↑ 1 2 Unikernels: Rise of the Virtual Library Operating System . Дата обращения: 31 августа 2015.
- ↑ Tanenbaum, Andrew S. Modern Operating Systems. — 3rd. — Prentice Hall, 2008. — P. 50–51. — «. . . nearly all system calls [are] invoked from C programs by calling a library procedure . . . The library procedure . . . executes a TRAP instruction to switch from user mode to kernel mode and start execution . . .». — ISBN 978-0-13-600663-3.
- ↑ Chia-Che, Tsai. Cooperation and security isolation of library OSes for multi-process applications // Proceedings of the Ninth European Conference on Computer Systems / Tsai Chia-Che, Kumar-Saurabh Arora, Nehal Bandi … [и др.]. — 2014. — P. 1–14. — ISBN 9781450327046. — doi:10.1145/2592798.2592812.
- ↑ Why Unikernels Can Improve Internet Security (апрель 2015). Дата обращения: 31 августа 2015.
- ↑ Madhavapeddy, Anil; Mortier, Richard; Charalampos, Rotsos; Scott, David; Singh, Balraj; Gazagnaire, Thomas; Smith, Steven; Hand, Steven; Crowcroft, Jon (March 2013). Unikernels: Library Operating Systems for the Cloud (PDF). SIGPLAN Notices (ASPLOS 13). 48 (4): 461. doi:10.1145/2499368.2451167.
- ↑ Как сделать контейнеры еще более изолированными: обзор контейнерных sandbox-технологий
- ↑ Kaloper-Meršinjak, David; Mehnert, Hannes; Madhavapeddy, Anil; Sewell, Peter (2015). Not-Quite-So-Broken TLS: Lessons in Re-Engineering a Security Protocol Specification and Implementation. Proceedings of the 24th USENIX Security Symposium (USENIX Security 15).
- ↑ Thibault, Samuel; Deegan, Tim (2008). Improving Performance by Embedding HPC Applications in Lightweight Xen Domains (PDF). 2nd Workshop on System-level Virtualization for High Performance Computing (HPCVIRT'08). doi:10.1145/1435452.1435454.
- ↑ Madhavapeddy, Anil; Mortier, Richard; Sohan, Ripduman; Gazagnaire, Thomas; Hand, Steven; Deegan, Tim; McAuley, Derek; Crowcroft, Jon (2010). Turning Down the LAMP: Software Specialisation for the Cloud (PDF). Proceedings of the 2nd USENIX Conference on Hot Topics in Cloud Computing.
- ↑ Martins, Joao. Enabling fast, dynamic network processing with clickOS // Proceedings of the second ACM SIGCOMM workshop on Hot topics in software defined networking / Joao Martins, Ahmed Mohamed, Costin Raiciu … [и др.]. — 2013. — P. 67–72. — ISBN 9781450321785. — doi:10.1145/2491185.2491195.
- ↑ Kuenzer, Simon. Unikraft: fast, specialized unikernels the easy way // Proceedings of the Sixteenth European Conference on Computer Systems : [англ.] / Simon Kuenzer, Vlad-Andrei Bădoiu, Hugo Lefeuvre … [et al.]. — Online Event United Kingdom : ACM, 2021-04-21. — P. 376–394. — ISBN 978-1-4503-8334-9. — doi:10.1145/3447786.3456248.
- ↑ Just-in-Time Summoning of Unikernels (v0.2) . Magnus Skjegstad. Дата обращения: 30 августа 2015.
- ↑ Zerg . Zerg — an instance per request demo. Дата обращения: 30 августа 2015.
- ↑ Madhavapeddy, Anil; Leonard, Thomas; Skjegstad, Magnus; Gazagnaire, Thomas; Sheets, David; Scott, David; Mortier, Richard; Chaudhry, Amir; Singh, Balraj; Ludlam, Jon; Crowcroft, Jon; Leslie, Ian (2015). Jitsu: Just-In-Time Summoning of Unikernels (PDF). The 12th USENIX Conference on Networked Systems Design and Implementation (NSDI). ISBN 978-1-931971-218.
- ↑ Есть ли альтернатива контейнерам?
- ↑ Первый прототип: Unikernels как этап в эволюции Linux
- ↑ Модули, монолиты и микросервисы