Виртуальная архитектура ядра ( vkernel ) — это парадигма виртуализации операционной системы , в которой код ядра может быть скомпилирован для запуска в пользовательском пространстве , например, для облегчения отладки различных компонентов уровня ядра, [3] [4] [5] в дополнение к универсальной виртуализации и разделению системных ресурсов . Она используется DragonFly BSD в своей реализации vkernel с DragonFly 1.7, [2] впервые представленной в сентябре 2006 года , [3] [6] и впервые выпущенной в стабильной ветке с DragonFly 1.8 в январе 2007 года . [1] [7] [8] [9]
Долгосрочная цель, помимо упрощения разработки ядра, заключается в том, чтобы упростить поддержку подключенных к Интернету компьютерных кластеров без ущерба для локальной безопасности . [3] [4]
Похожие концепции существуют и в других операционных системах; в Linux похожая концепция виртуализации известна как Linux пользовательского режима ; [10] [7] тогда как в NetBSD с лета 2007 года она стала первоначальным фокусом инфраструктуры ядра rump . [11]
Концепция виртуального ядра почти полностью противоположна концепции unikernel — с vkernel компоненты ядра запускаются в пользовательском пространстве для упрощения разработки и отладки ядра, поддерживаемые обычным ядром операционной системы; тогда как с unikernel компоненты уровня пользовательского пространства запускаются непосредственно в пространстве ядра для дополнительной производительности, поддерживаемой baremetal оборудованием или стеком виртуализации оборудования. Однако и vkernel, и unikernel могут использоваться для аналогичных задач, например, для автономного программного обеспечения в виртуализированной среде с низкими накладными расходами. Фактически, ядро rump NetBSD , изначально ориентированное на запуск компонентов ядра в пользовательском пространстве, с тех пор также перешло в пространство unikernel (после прозвища anykernel за поддержку обеих парадигм).
Концепция vkernel отличается от тюрьмы FreeBSD тем, что тюрьма предназначена только для изоляции ресурсов и не может использоваться для разработки и тестирования новых функций ядра в пользовательском пространстве, поскольку каждая тюрьма использует одно и то же ядро. [7] (Однако в DragonFly также есть поддержка тюрьмы FreeBSD . [7] )
В DragonFly vkernel можно рассматривать как первоклассную компьютерную архитектуру , сравнимую с i386 или amd64, и, по словам Мэтью Диллона, сделанным около 2007 года, его можно использовать в качестве отправной точки для портирования DragonFly BSD на новые архитектуры. [12]
Vkernel от DragonFly поддерживается ядром хоста посредством новых системных вызовов , которые помогают управлять адресным пространством виртуальной памяти ( vmspace ) — vmspace_create()
и др., [3] [9] [13], а также расширений для нескольких существующих системных вызовов, таких как mmap
's madvise
— mcontrol
. [9] [14] [15]
UML запускает ядро Linux как процесс пользовательского пространства, аналогичный виртуальным ядрам DragonFly BSD… позволяет выполнять быстрый цикл перекомпиляции-перезапуска и может легко отлаживаться с помощью стандартного gdb.
Знакомство с RUMPs — исполняемыми метапрограммами пользовательского пространства