在 x86 光核上运行的 Go unikernel
Go 的运行时提供了一些基本的操作系统抽象。Goroutine 对应于进程,而 channel 对应于进程间通信。此外,Go 还具有自己的虚拟内存管理,因此在裸机上运行 Go 程序的想法就此诞生。
事实证明,Go具有操纵硬件资源的能力,这要归功于Go可控的内存布局、无需虚拟机即可直接翻译硬件指令,以及类似C的语法。这些都使Go能够编写在裸机上运行的程序。然而,也存在一些挑战。Go在执行协程调度和内存GC时需要堆叠许多指令,这在一些无法递归的地方带来了麻烦,例如中断处理和系统调用。
总的来说,用 Go 编写内核是一段非常有趣的经历。一方面,它让我深入了解了 Go 的运行时。另一方面,它还提供了一个在裸机上使用 C 语言以外的编程语言来编写操作系统内核的尝试。
暂无开放 Issues,或尚未同步最近议题。