为什么像C这样的编程语言在OS开发中占据优势
发表时间:2023-09-20 18:01:04
文章来源:炫佑科技
浏览次数:154
菏泽炫佑科技
为什么像C这样的编程语言在OS开发中占据优势
本文编译自官方博客上的一篇文章:《OS in Go?Why Not?》,探讨了为什么像 C 这样的编程语言在 OS 开发中具有优势,以及 Go 是否可以用来编写 OS。 此外,还提到了使用Go开发操作系统的可行性、局限性以及目前的成果。
操作系统 (OS) 是计算机系统的心脏和灵魂。 它管理计算机的硬件和软件资源,并为用户提供与计算机交互的方式。 传统上,C、C等语言因其低开销和“接近机器代码”的特性而被用来开发操作系统。
但 Go 等高级语言的兴起引入了一些功能,这些功能可能使开发操作系统等复杂软件变得更加容易。 例如,类型安全、错误处理和并发性在开发操作系统时应该是有益的。
因此,使用Go这样的高级语言来开发操作系统应该是一个自然的选择,但为什么没有成功的案例呢?
操作系统由不同的组件组成,这些组件负责不同的功能,并且可以用不同的编程语言编写。
操作系统的核心是内核(),它负责与硬件交互——几乎总是用C或汇编语言编写。 至于面向用户的组件,例如 GUI 应用程序,它们可以用任何语言编写。
例如,使用Java编写用户级组件,例如GUI框架和系统应用程序(相机、电话等)。 相应地,其核心是用C和汇编语言编写的; 底层系统组件 - 库,是用 C++ 编写的。
C语言“称霸”内核的主要原因:
作为高级语言,Go 提供了许多理想的功能。 在这方面,它似乎是开发操作系统的绝佳选择:
但是,虽然 Go 提供了理想的功能,使操作系统开发人员的生活变得更轻松为什么像C这样的编程语言在OS开发中占据优势,但它也有一些局限性。
作为一种垃圾收集语言,Go 并不真正适合操作系统开发。 用 Go 编写内核意味着小心地绕过 Go 的垃圾收集。 正如论坛中的开发人员所提到的,鼠标延迟可能是由于中断处理程序分配内存触发垃圾收集而引起的。
此外,Go 需要大量人才来执行,这意味着它不能直接在硬件上运行。 虽然 Go 可以编译为在裸机上运行,但与几乎可以在任何架构上运行的 C 相比,它只支持少量架构。
总的来说,用Go开发一个不“玩具般”的操作系统几乎是不可能的。 尤其是支持在多种架构上运行、支持不同的设备(如显卡或网卡)以及遵守POSIX标准,极具挑战性。
*后,让我们看一个探索使用 Go 进行操作系统开发的案例研究。
它是一个用Go开发的操作系统,运行在64位X86架构上。 它使用修改后的 Go 1.10 运行时实现软件开发,添加更多汇编代码来处理系统调用和中断处理程序的启动和进入/退出。
为用户进程提供POSIX接口,支持fork、exec等。它实现了支持核心POSIX文件系统调用的文件系统。 实现了用 Go 编写的 Intel PCI 以太网网卡的 TCP/IP 堆栈和驱动程序。 使用POSIX接口,许多Linux C程序可以在不修改源代码的情况下运行。
但是,缺少许多功能,例如调度优先级、交换页面或磁盘,以及用户、访问控制列表和地址空间随机化等安全功能。
相关链接: