我是unikernel和
的新手
http://searchitoperations.techtarget.com/definition/unikernel
https://en.wikipedia.org/wiki/Unikernel
链接关于unikernel的简要介绍,但我无法理解:
一个。当unikernel更好用吗?
湾在代码大小方面,它如何比Microkernel小?
答案 0 :(得分:2)
在一行中,(应用程序+ unikernel)称为在虚拟机管理程序(云)上运行的工作负载相当于在嵌入式环境中在裸机上运行的独立应用程序。
当应用程序(工作负载)不使用大多数操作系统时,云中的内核更好设备驱动服务。
Unikernel仅使用内核的已使用功能编译,并具有微内核中必需的功能,因此大小很小。
答案 1 :(得分:0)
术语“ unikernel”和“ microkernel”含义不同,并不是您需要选择的两个真正的两个对立或两个选择:
“微内核”是一个较旧的术语,是内核 design 的一种,与 monolithic 内核形成对比。顾名思义,在单片内核中,整个内核是一个程序,它实现了用户应用程序所需的内核API(例如Unix系统调用,线程,进程,文件系统等)。与此相反,在微内核设计中,我们有一个“微内核”,这是一个很小的内核,它实现了一个小的API(例如,执行,权限和消息传递的线程的非常基本的概念),并且位于它之上更大一部分的内核,实现了应用程序所需的完整API-实际的文件系统,行为类似于Unix进程的进程,系统调用等。在1990年代初期,学术界认识到编写单片内核已变得太难且容易出错,而微内核是未来的发展方向,但后来出现了Linux(单片内核),使这一结论成为笑话。 。今天,您不应该根据使用微内核还是单片内核来选择内核。这是用户很少关心的实现细节。
“ unikernel”是一个较新的概念。传统内核以能够在同一台物理计算机上复用许多不同的用户和应用程序而感到自豪。 1974年有关Unix的著名论文被称为“ UNIX分时系统”,因为分时(即,复用多个用户和应用程序)是OS的最重要目标之一。但是,如今,专注于虚拟机而不是物理机,有一种不同的方式(即虚拟机管理程序)可以将物理机拆分为不同的虚拟机。因此,每个虚拟机通常只运行一个属于单个所有者的应用程序。这提供了运行精简内核的机会,该内核不需要支持传统内核支持的许多功能:无需支持不同用户之间的隔离;无需支持数千个驱动程序(所有已知的虚拟机管理程序都需要一小部分);无需支持不同进程之间的隔离。
整理所有不必要的内容将使内核更小,这对于快速部署新VM,降低内存使用量以及提高性能具有极大的好处。例如,您可能听说过,最近对Linux内核进行了修补,以修复当代CPU中的“ Meltdown”漏洞。该修补程序减慢了Linux上的系统调用和上下文切换的速度,因此需要此修补程序,因为如果没有此修补程序,则一个进程可以读取其他进程的内存。但是,如果我们知道没有其他进程-VM上仅运行一个应用程序-我们不在乎。因此,unikernel无需通过崩溃解决方法来降低自身速度。系统调用可以像函数调用一样快,上下文切换可以更快,等等。
例如OSv之类的某些unikernel做到了以上所述,并提供了一个内核,该内核向应用程序模仿了传统内核(即Linux),但是没有不受支持的功能,例如多个用户或多个隔离的进程(尽管非隔离的线程) 受支持)。其他unikernel进一步寻求精简内核,并为每个应用程序提供不同的内核构建,其中包括该特定应用程序所需的特定功能。例如,要运行TCP应用程序,可以使用仅支持TCP协议但不支持UDP的内核。您可以将其视为内核和应用程序链接在一起以形成一个统一的内核应用程序,该应用程序直接在虚拟机管理程序上运行。
何时以及为什么使用Unikernel(上述任何变体)是一个悬而未决的问题。当然,如果只考虑使用少量磁盘或内存,那么考虑使用Unikernel是一个不错的选择。如果您担心安全性并计划审核代码,那么unikernel的审核代码要少得多。在需要快速启动的应用程序中(例如,实现“功能即服务”),unikernel允许非常快速的启动,大大少于1秒,因为启动执行的“通用”内容少得多,并且专注于您的应用程序的真正用途需要。这些示例还可以告诉您何时不应该考虑使用unikernel:如果您的应用程序无论如何都要使用大量的磁盘和内存(例如,数据库应用程序),那么减少内核的大小将无济于事。如果您的应用程序运行了几个小时,则快速启动并不重要。如果您的应用程序使用很多OS功能,那么我上面描述的许多更专门的unikernel可能无法提供您应用程序所需的所有功能。
答案 2 :(得分:0)
Unikernel是简单的单个应用程序操作系统。无需在Linux unikernels上部署我们的软件,而是从我们的应用程序中创建一个操作系统,然后仅运行该应用程序-别无其他。
由于只运行一个应用程序,因此没有用户名/密码或进入应用程序的概念。传统上,Unikernel一直难以使用,因为它们过去通常需要专家级的系统知识。
更多信息:https://bootsity.com/php/running-php-unikernels-on-google-cloud