为什么 Linux 可以同时兼容 x86 和 ARM ,一个操作系统不是只能对应特定的硬件系统吗?

Linux能同时兼容x8 6 和ARM,不是用一份代码骗所有硬件。
说白了,靠的是分层、抽象和模块化。

x8 6 和ARM指令集不一样。
x8 6 复杂,ARM精简。
但Linux核心功能(比如管进程、管内存)不直接碰硬件指令。
上层用C/C++写,编译器负责翻译成对应机器码。
open()函数调用,用户程序看到的接口一样,内核内部会根据架构选对实现。

Linux内核分用户空间和内核空间。
用户空间跑应用,靠系统调用跟内核打交道,不直接碰硬件。
内核空间直接跑CPU,管硬件。
内核里,通用的东西(比如调度算法)和架构特定的东西(比如中断处理)分开了。
通用部分跨平台用,特定部分针对架构实现。

硬件抽象层(HAL)是关键。
通用内核代码理论上随便跑。
架构特定代码处理硬件相关操作。
CPU启动、中断处理、内存管理、设备驱动,这些都要针对具体CPU写。
进程上下文切换,x8 6 和ARM写法不一样,但逻辑类似。
代码放arch/x8 6 和arch/arm目录下,内核根据架构自动用对的那部分。

交叉编译工具链支持。
比如用x8 6 电脑编译ARM版Linux,工具链把C代码转成ARM指令。
源代码里,架构相关东西分目录放,编译时选目标架构。

不是一份代码走天下。
核心代码通用,架构特定代码单独维护。
ARM能普及,靠社区和厂商不断给LinuxARM版添砖加瓦。

说白了,Linux靠分层架构、硬件抽象层、交叉编译和模块化设计实现跨平台。
你自己看。

arm vs AArch64 vs amd64 vs x86_64 vs x86:有什么区别? | Linux 中国

上次帮朋友装机,他纠结选啥CPU,我直接把ARM和x8 6 给他捋明白了。
这事儿吧,说起来简单,但真要搞清楚里头门道,还真得花点功夫。

先说x8 6 ,这玩意儿得从英特尔说起。
2 000年前后,英特尔搞出来x8 6 架构,后来AMD跟着玩,搞出了x8 6 _6 4 ,就是现在电脑上最常见的6 4 位架构。
为啥叫x8 6 ?其实是x8 6 的扩展版,早期CPU指令集都是3 2 位的,后面才扩到6 4 位。
x8 6 _6 4 的好处是兼容性好,老软件跑新系统基本没问题,但缺点是设计复杂,指令集庞大。
我上次看资料说,x8 6 指令集有几百条指令,比ARM还多。

再来说ARM,这架构跟x8 6 完全不同。
1 9 9 0年左右,ARM公司就搞出来了,重点是能效高。
不像x8 6 追求功能全,ARM设计时就想着怎么省电省芯。
现在你手机里那个四核八核的芯片,大部分都是ARM架构授权给高通、三星、苹果用的。
苹果搞的AArch6 4 (也叫arm6 4 )就是ARM的6 4 位版本,2 02 0年苹果自研的M系列芯片,完全就是ARM架构的,性能炸裂。
我有个朋友玩树莓派,那也是ARM架构的,特别适合搞嵌入式开发。

然后是RISC-V,这玩意儿是2 01 0年左右才冒出来的,完全开源的。
设计理念是越简单越好,指令集精简,硬件实现成本低。
不像x8 6 和ARM有庞大生态,RISC-V现在还在推广期,但发展很快。
比如华为的鲲鹏服务器用的就是RISC-V,强调自主可控。
我最近看文章说,国内很多大学现在都把RISC-V列入课程,估计是看准了这趋势。

最后说说PowerPC,这架构以前挺火,苹果早期Mac用的就是PPC,IBM的Power系列服务器也是。
现在苹果早不用了,但IBM还在用。
PowerPC特点是支持大端和小端字节序,兼容性不错。
不过现在市场占有率小了,主要在特定领域用。

总结一下:x8 6 最常见,但复杂耗电;ARM主攻移动端,省电高效;RISC-V是新兴力量,开源好但生态还在建;PowerPC现在基本是小众了。
选CPU得看场景,搞服务器可能选x8 6 或RISC-V,做手机平板肯定是ARM,玩嵌入式RISC-V不错,苹果那种追求极致性能的就用自研架构。
反正你看着办吧,这事儿真不是一两句话能说清楚的。

你知道X86架构与ARM架构的区别吗?

哎呦,说起来 X8 6 和 ARM 呃,这两个架构啊,差异可大了去了,得说说。

先说 X8 6 吧,这玩意儿是 Intel 发明的,咱们叫它复杂指令集计算机,CISC 嘛。
它就像个万能的厨师,什么菜都能做,指令多,操作复杂,比如内存访问啊,算术运算啊,这些它都能干。
不过,这厨师做菜慢,得慢慢炖,功耗也高,一般得几十瓦到上百瓦,电脑、服务器啊,这些大块头都喜欢它。

再来说 ARM,这是 ARM 公司搞的,精简指令集计算机,RISC 嘛。
它就像个快手厨师,做菜快,不过菜式简单,但能快做出来。
ARM 指令少,功耗低,特别适合那些对电敏感的地方,比如手机、平板,还有各种小玩意儿。

应用领域嘛,X8 6 适合那些需要高性能的地方,比如个人电脑、工作站,还有服务器,它擅长处理复杂任务,运行大型软件。
ARM 嘛,它主要在移动设备上,还有各种嵌入式系统,比如你家的智能电视啊,都是它的地盘。

软件兼容性嘛,X8 6 有丰富的软件生态,Windows、Linux、macOS 都支持,用的人多,软件多。
ARM 在移动操作系统上挺不错,比如 Android 和 iOS,但在桌面操作系统上就差了点,兼容性一般。

图片嘛,我就不发了,不过,你想象一下,X8 6 就是个大厨,ARM 就是个快手,各自有各自的长处,对吧?