Vkernel
vkernel — парадигма виртуализации операционной системы, в которой код ядра компилируется для выполнения в пользовательском пространстве, что, в частности, облегчает отладку компонентов ядра, а также реализует функции общей виртуализации и изоляции ресурсов системы. Данная концепция используется в системе DragonFly BSD начиная с ветки 1.7, впервые представленной в сентябре 2006 года и официально выпущенной в стабильной ветке с DragonFly BSD 1.8 в январе 2007 года[1][2].
Общие сведения
| vkernel | |
|---|---|
| Тип | виртуализация на уровне ОС, виртуализированное пространство ядра |
| Автор | Мэттью Диллон |
| Разработчик | DragonFly BSD |
| Написана на | C |
| Операционная система | DragonFly BSD |
| Первый выпуск | 30 января 2007 |
| Репозиторий | http://bxr.su/d/sys/dev/virtual/vkernel/, http://bxr.su/d/sys/vm/vm_vmspace.c |
| Лицензия | BSD |
| Сайт | mdoc.su/d/vkernel.7 |
Функционал
Долгосрочной целью развития vkernel, помимо упрощения разработки ядра, является обеспечение поддержки интернет-связанных кластеров без ущерба для локальной безопасности[3][4].
Похожие подходы реализованы и в других операционных системах: в Linux аналогичной концепцией виртуализации является user-mode Linux[5][6], а в NetBSD с лета 2007 года изначальным направлением инфраструктуры стал rump kernel[7].
Virtual kernel практически противоположна подходу unikernel: в vkernel компоненты ядра выполняются в пользовательском пространстве для облегчения разработки и отладки, поддерживаемые обычным ядром ОС, тогда как в unikernel компоненты уровня user space работают непосредственно в режиме ядра ради повышения производительности, напрямую на «железе» или виртуализационной платформе. Тем не менее обе технологии позволяют создавать изолированные и виртуализированные среды с минимальными накладными расходами. Вместе с тем rump kernel в NetBSD, изначально предназначенный для запуска компонентов ядра в user space, впоследствии переключился и на нишу unikernel («anykernel»-подход для поддержки обоих стилей).
Принцип vkernel отличается от FreeBSD jail: jail обеспечивает только изоляцию ресурсов и не позволяет проводить разработку или тестирование новых возможностей ядра в пользовательском пространстве, поскольку все jail-разделы используют общее ядро[6]. Тем не менее в DragonFly BSD поддержка jail также реализована[6].
В DragonFly BSD vkernel позиционируется как полноценная вычислительная архитектура, сравнимая с i386 или amd64, и может быть использована для портирования DragonFly BSD на новые аппаратные архитектуры[8].
Поддержка vkernel в DragonFly осуществляется через специализированные системные вызовы, предназначенные для управления виртуальным адресным пространством (vmspace, например vmspace_create() и др.)[9][10], а также расширения к существующим вызовам, таким как mmap и madvise (например, mcontrol)[9][11][12].