编写操作系统选用那个语言比较好

某项目组需要在Windows操作系统平台上用C++语言编写应用构件,该项目组宜选用( )作为构件标准。

创建一个不连接标准库的Rust可执行文件,将是我们迈出的第一步。无需底层操作系统的支撑,这将能让在裸机()上运行Rust代码成为现实。

要编写一个操作系统内核,我们需要不基于任何操作系统特性的代码。这意味着我们不能使用线程、文件、堆内存、网络、随机数、标准输出,或其它任何需要操作系统抽象和特定硬件的特性;这其实讲得通,因为我们正在编写自己的操作系统和硬件驱动。

实现这一点,意味着我们不能使用的大部分;但还有很多Rust特性是我们依然可以使用的。比如说,我们可以使用、、、、、,当然还有。这些功能让我们能够编写表达性强、高层抽象的操作系统,而无需操心和。

为了用Rust编写一个操作系统内核,我们需要创建一个独立于操作系统的可执行程序。这样的可执行程序常被称作独立式可执行程序(freestanding executable)或裸机程序(bare-metal executable)。

在这篇文章里,我们将逐步地创建一个独立式可执行程序,并且详细解释为什么每个步骤都是必须的。如果读者只对最终的代码感兴趣,可以跳转到本篇文章的小结部分。

译者:洛佳 华中科技大学
转载请注明出处,商业转载请联系原作者

在默认情况下,所有的Rust(crate)都会链接标准库(),而标准库依赖于操作系统功能,如线程、文件系统、网络。标准库还与Rust的C语言标准库实现库(libc)相关联,它也是和操作系统紧密交互的。既然我们的计划是编写自己的操作系统,我们就可以不使用任何与操作系统相关的库——因此我们必须禁用标准库自动引用(automatic inclusion)。使用可以实现这一点。

我们可以从创建一个新的cargo项目开始。最简单的办法是使用下面的命令:

在这里我把项目命名为blog_os,当然读者也可以选择自己的项目名称。这里,cargo默认为我们添加了--bin选项,说明我们将要创建一个可执行文件(而不是一个库);cargo还为我们添加了--edition 2018标签,指明项目的包要使用Rust的2018版次()。当我们执行这行指令的时候,cargo为我们创建的目录结构如下:

选用任意一个裸机目标来编译。比如对thumbv7em-none-eabihf,我们使用以下命令:

要注意的是,现在我们的代码只是一个Rust编写的独立式可执行程序的一个例子。运行这个二进制程序还需要很多准备,比如在_start函数之前需要一个已经预加载完毕的栈。所以为了真正运行这样的程序,我们还有很多事情需要做。

下一篇文章要做的事情基于我们这篇文章的成果,它将详细讲述编写一个最小的操作系统内核需要的步骤:如何配置特定的编译目标,如何将可执行程序与引导程序拼接,以及如何把一些特定的字符串打印到屏幕上。

我要回帖

更多关于 运维开发用什么语言 的文章

 

随机推荐