计算机程序在本质上往往完全不同。你可以有一个微不足道的“你好世界!” 例如,您还可以拥有一个成熟的操作系统。
具有“作为扩展机器的操作系统”和“作为资源管理器的操作系统”的经典定义(来自 Tanenbaum)的操作系统需要提供很多东西。
当操作系统需要充当资源管理器时,它只是在底层机器的基础上运行,控制其功能,如启动、中断、I/O、安全模式等。虽然我们无法查看 Windows 的源代码来查看这些方面有什么区别,我们可以看看它的一个开源竞争对手,它已经在 x86 和 ARM 架构上运行 - Linux!
在 Linux 上,对不同架构的支持位于arch目录中。例如,我们有x86和ARM目录以及许多其他目录。我相信即使检查那里的目录名称也会提示您所需的工作(启动、电源、内存管理等)
ARM 和 x86 世界之间存在很大差异。在 x86 中,几乎所有东西都是标准化的(听说过兼容 IBM PC吗?),许多供应商都在构建架构的克隆。相反,在 ARM 生态系统中,ARM 公司本身只是一个 IP 提供商,每个供应商之间都有细微到很大的差异(只需检查 arch 文件夹中以 mach 开头的子目录名称 - 用于机器,或 plat - 用于平台) . 对于 ARM,在UEFI的最新开发尚未广泛实施之前,您没有 BIOS 之类的东西(我并不是说 BIOS 是好还是坏,只是一个例子)。
对于操作系统的“扩展机器”角色,它使 Windows 成为现在的样子,移植应该相对容易一些。这主要是关于调用硬盘分区“c:”等功能 - 具有只读或隐藏等文件权限,并保持 Win32 API 等核心 API 大部分功能。再一次,这不是直截了当的。
我期待 MS 严格定义 Windows 可以在什么样的 ARM 机器上运行,与非常开放的 Linux 世界相比,可以在什么样的外围设备上运行,以确保质量和上市速度。
这是我能想象到的两大问题,但是每转一圈都会出现一些小问题,比如;ARM 是 32 位 RISC 架构,char 是无符号的,即使是最近的高端 ARM 内核也不支持整数除法(性能?),所有那些 Windows 代码认为理所当然的小东西可能会咬他们回来......