Go 编写的跑在 x86 裸机上的 unikernel

2020-10-11 22:40:25 +08:00
 icexin

github 地址 https://github.com/icexin/eggos

这是一个使用 Go 编写的运行于 x86 机器的 unikernel,全部用 go 编写(除了 bootloader 和一些汇编)

Go 的 runtime 提供了一些基本的操作系统抽象,goroutine 对应进程,channel 对应进程间通信,另外 go 有自己的虚拟内存管理,所以萌生了在裸机上运行 Go 程序的想法。

实际证明,Go 有操作硬件资源的能力,得益于 Go 可控的内存布局,以及不需要虚拟机直接翻译硬件指令的能力,还有类 C 的语法。这些都让 Go 编写运行于裸机的程序有了可能。

然而也有一些挑战,Go 在很多指令里面打桩来进行协程调度以及内存 GC,在一些不能重入的地方,如中断处理和系统调用,都带来了一些麻烦。

功能 list

一些快照

支持 http get 的 js 解释器

nes 模拟器

欢迎学习交流!

3633 次点击
所在节点    Go 编程语言
22 条回复
icexin
2020-10-18 19:13:17 +08:00
@pythonee 开发的时候用的 qemu,最终用 grub 引导在我自己的台式机上跑
icexin
2020-10-18 19:14:41 +08:00
虽然现在的 cpu 都是 64 位的,但如果没有显式开启 64 位,是可以运行于传统的 32 位保护模式下的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX