电子产业一站式赋能平台

PCB联盟网

搜索
查看: 33|回复: 0
收起左侧

为什么不用Golang开发操作系统?C/C++真的不可替代吗?

[复制链接]

864

主题

864

帖子

8156

积分

高级会员

Rank: 5Rank: 5

积分
8156
发表于 2024-3-5 08:30:00 | 显示全部楼层 |阅读模式
来自公众号:OSC开源社区本文整理自 GoLand 官方博客的一篇文章:《OS in Go? Why Not?》,探讨了为什么像 C 这样的编程语言在 OS 开发中占据优势,以及是否可以使用 Go 编写 OS。此外还提到了用 Go 开发操作系统的可行性、局限性,以及目前的部分成果。操作系统 (OS) 是计算机系统的心脏和灵魂,它管理着计算机的硬件和软件资源,并为用户提供与计算机交互的方式。传统上,C 和 Assembly 等语言因其低开销和 “接近机器码” 的特性而被用于开发操作系统。但诸如 Go 等高级语言的兴起引入了一些特性,这些特性或许可以使开发操作系统等复杂软件变得更加容易。例如,类型安全、错误处理和并发性在开发操作系统时应该是有益的。因此,采用像 Go 这样的高级语言来开发操作系统理应是自然选择,但为什么并没有成功的案例?操作系统由不同的组件构成,它们负责不同的功能,可以使用不同的编程语言编写。操作系统的核心是内核 (Kernel),它负责与硬件交互 —— 几乎都是采用 C 或汇编语言编写。至于面向用户的组件(例如 GUI 应用程序),可以采用任何语言编写。例如,Android 采用 Java 编写用户层的组件,如 GUI 框架和系统应用程序(相机、电话等)。相对应的,其内核采用 C 和汇编语言编写;底层系统组件 —— 库,则是用 C++ 编写。C 语言 “统治” 内核的主要原因:可直接管理内存- ?- D  `' k" S8 ?! T( P
缺少抽象
0 N8 V* x) x$ {* v3 X/ U& t, @( a无需依赖运行时
1 ?! a% E5 G9 D" j可移植性# |7 N. c6 ]1 w4 g
Go 作为高级语言提供了许多令人满意的特性。从这方面来看,它似乎可以成为开发操作系统的绝佳选择:某些类型的错误在高级语言中出现的可能性要小得多" K1 ~3 u- [2 L: I; F
并发性:在高级语言中处理并发更容易,因为几乎每种高级语言都内置处理并发所需的机制
$ V, b# A, E( |* r类型安全:防止像 C 的宽松类型强制执行
( u& d$ Q# M3 N1 k4 N
不过尽管 Go 提供了令人满意的特性,可以让操作系统开发者的工作更轻松,但它也有一些局限性。作为一种具有垃圾回收功能的语言,Go 并不真正适合操作系统开发。使用 Go 编写内核意味着需要小心翼翼地绕过 Go 的垃圾收集。正如 Reddit 论坛中开发者提到的,鼠标滞后可能是因为中断处理程序分配了触发垃圾回收的内存。此外,Go 还需要大量的 runtime 才能执行,这意味着它不能直接在硬件上运行。尽管 TinyGo 可以将 Go 编译为在裸机上运行,但与 C 相比,它只支持少量的架构,而 C 几乎可以在任何架构上运行。总的来说,使用 Go 开发一个不是 “玩具性质” 的操作系统几乎是不可能。尤其是要求支持在多种架构上运行、支持不同设备(如显卡或网卡),并符合 POSIX 标准,这更是极具挑战性。最后看一下探索用 Go 开发操作系统的案例。Biscuit 是一个用 Go 开发的操作系统,运行在 64 位 X86 架构上。它使用经过修改的 Go 1.10 运行时实现,其中添加了更多汇编代码来处理系统调用和中断处理程序的引导和进入 / 退出。
& s' n5 g6 _; F, T' h# [$ a# p

zur21g5sovk64067746901.png

zur21g5sovk64067746901.png

9 K4 {. r9 f2 ?, A' E- hBiscuit 为用户进程提供 POSIX 接口,支持 fork、exec 等。它实现了支持核心 POSIX 文件系统调用的文件系统。Biscuit 为用 Go 编写的 Intel PCI-Express 以太网 NIC 实现了 TCP/IP 堆栈和驱动程序。使用 POSIX 接口,Biscuit 可以在不修改源代码的情况下运行许多 Linux C 程序。然而,Biscuit 缺少许多功能,例如调度优先级、换出页面或磁盘,以及安全功能,例如用户、访问控制列表和地址空间随机化。相关链接:https://blog.jetbrains.com/go/2023/05/16/os-in-go-why-not/
6 {8 v* ?& A# b$ O* k5 y5 E7 q* b编程资源&影视资源分享近期发现了一份 20T各类编程/影视/学习资源的腾讯文档,其中除了互联网编程学习资源外,还有不少影视资源,分享给各位:6 Y6 _/ W& p; D) J# Q1 |

. A) o# a! A$ M$ z

1xxc2lsf5le64067747001.png

1xxc2lsf5le64067747001.png

( }( `: \: ]9 Y9 E9 H) Q1 Q5 f1 u: l- ]3 G$ b) {% ]2 I" F/ E3 ?" Y" M) E' `

bb2dp1fpu3j64067747102.png

bb2dp1fpu3j64067747102.png

5 _6 Y  N/ N6 G( v% X
# E9 ~. i' E* _3 }# c. S6 X

w2gd3uk0rgq64067747202.png

w2gd3uk0rgq64067747202.png

1 ]6 h: C  o8 r# U5 ~! ]4 _; x& P: A资源链接:https://docs.qq.com/sheet/DY3VPVklVaFFMcUZ4?tab=9h5afr  (右键复制到浏览器地址栏打开),或者点击文末「阅读原文」也可查看。( Y  t. b: O/ I7 L( J# Z
欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些好用工具、白嫖福利、各类资源以及工作体验,还有一些内推机会。; v4 _, B5 G( u+ D8 J& R5 o. |: d7 ?

43gr2uk05n064067747302.png

43gr2uk05n064067747302.png

2 ~+ ?+ e, l3 F/ l8 d; ~5 V4 Q6 n+ ^加个微信,打开另一扇窗
, g+ b9 p  ]3 b

ozycpwfho0l64067747402.gif

ozycpwfho0l64067747402.gif
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表