操作系统|为什么操作系统不能屏蔽底层的架构,为应用软件提供一个统一的运行环境呢?

操作系统|为什么操作系统不能屏蔽底层的架构,为应用软件提供一个统一的运行环境呢?

文章图片

操作系统|为什么操作系统不能屏蔽底层的架构,为应用软件提供一个统一的运行环境呢?



有两个问题 , 第一个是cpu架构的区别在于机器码的区别 , 所以如果要保证一致的运行环境的话 , 一般有四个方案:一个是虚拟机 , 比如java依赖的是jvm虚拟机 , 缺点是速度慢 。 第二个是multiarch的可执行程序 , 比如ubuntu就出过一个版本 , 缺点是每个应用自己要编译多遍 , exe的体积增大n倍 , ios也是这么干的 。



第三个方案是操作系统级提供运行时指令转换方案 , 缺点是非对标架构的速度会慢一点 , 同时操作系统底层是需要有明确对标架构的 , 不是什么架构都支持 , macos就是这么干的 , 平稳从ppc架构过度到了x86架构 , 也包括现在arm架构也有一部分是这么做的 。




第四个是cpu设计的时候就支持 , 代表是高通的某些版本arm芯片 , 以及中国的龙芯 , 但是一般情况下世不能直接进行实时切换的 , 需要操作系统底层做特别设计 。 这些只是你看到第一个问题 , 估计你还不知道还有更加恶心的问题就是不同架构上操作系统的各类特化 , 往往会打破你的美好设想 , 所以ubuntu放弃了第二个方案 。

【操作系统|为什么操作系统不能屏蔽底层的架构,为应用软件提供一个统一的运行环境呢?】

因为很可能从bootloader开始 , 就一路一个坑 , 远不是你觉得的那么简单