裸金属 Bare Metal
裸金属 Bare Metal
裸金属听起来很酷!在计算机科学中,裸金属 (bare metal) 或裸机 (bare machine) 是直接在逻辑硬件上执行指令而无需操作系统的计算机。现代操作系统走过了不同的阶段,从最初级到现今复杂、高敏捷并提供多种服务的系统。在可编程计算机开发出来到操作系统发展之前的这段时间,一系列指令直接在计算机硬件上通过机器语言执行,而不需要经过系统软件层。这种方式工作的设备就是现代操作系统的前身裸机。现如今,它通常在嵌入式系统或需要低时滞的情景下出现,而常规的软件则运行在操作系统上。
优点
对于一个给定的应用,大部分情况下,在裸金属上运行会更快,使用更少的内存,因此更加节能。这是因为操作系统像其他程序一样,运行时需要执行时间、内存空间。比如可以在裸金属上直接访问输入输出等硬件资源,而在一个操作系统中,则需要一系列的子过程调用 (比如 Linux
中的系统调用),这会消耗运行时间与运行内存。
缺点
对于一个给定的应用,让它能够在裸金属上成功运行,实现的工作量与复杂度会更高。因为操作系统提供的服务需要重新实现,这些服务可能是:
- 系统启动
- 内存管理
- 中断处理
- 任务调度
- 外设管理
- 错误管理
调试一个裸金属程序是困难的,因为:
- 没有软件错误提示或故障管理,除非它们被实现
- 没有标准输出,除非它被实现
- 程序执行的位置与程序写入的位置是不同的,因此目标硬件可能是一个仿真器/模拟器或一个外部设备。这要求必须设置一个方式来将裸金属程序载入到目标,让程序开始执行,并访问目标资源
裸金属程序开发通常使用贴近硬件的语言,比如 Rust
、C++
、C
汇编语言甚至是少量的机器码。这就意味着裸金属程序可移植性是不高的。
例子
早期计算机
早期计算机,比如 PDP-11
,允许开发者以机器码载入程序到 RAM
。程序运行的结果可以使用光展示,或写入到磁带。
嵌入式系统
裸金属程序在嵌入式系统中还是经常可以看到的,微控制器或微处理器直接启动去执行一个大型简单的软件,而无需载入操作系统。这种嵌入式软件在结构上可能有很大不同,最简单的形式可能只是一个 main
死循环,调用子程序来对输入进行响应,执行动作,写输出。
发展
对裸金属的使用为操作系统的发展铺下道路。比如,对下面内容的需求:
- 输入设备来便利地输入代码或数据
- 输入设备,比如键盘被创建
比如,载入 PDP-11
的程序是通过使用前面板的拨码开关实现的。键盘相较于这种输入方式,显然是极为先进的。显然,它能够更快速键入代码或数据。
- 输出设备,比如显示器
- 快速、廉价的辅助存储设备来存储程序到非易失存储设备
- 高级开发语言,以及将这种高级语言转换成对应机器码的转换机制
- 链接器用于连接库模块,这种库可以是由系统提供,也可以由用户自己实现
- 将可执行内容从辅助存储设备载入到
RAM
中的一种载入机制 - 合适的
I/O
设备