跨操作系统的代码为什么不兼容

原问题

所谓的跨平台究竟是什么?

汇编是硬件的语言,而相同的硬件既可以装linux,也可以装windows,那么同样一段汇编程序,在两种操作系统下分别编译成可执行文件(把优化什么的关了);不同操作系统下的可执行文件格式可能不同,但既然硬件相同,那这两份可执行文件是不是在某种意义下同构?

回答

简单点说,操作系统相当于你代码跑时指令要链接的lib, 你的一些符号链接不到,你还跑鸡毛。此外还会帮你处理加载,否则你在arm 板上去跑跑无os的程序,你都要自己设定load。此外,像单片机那样,一次一般跑一个task,其实系统的作用无非就是个lib,各种功能的封装,好多就是裸跑当然不需要os。但是现在很多处理器是多任务的,要搞定不同task互相切,task running时,来了中断怎么办,说实在,你的代码确实只和cpu指令集有关,但是你的代码是残废的,必须依赖os提供的基础库才能跑起来,你在写裸板程序时都是自己做这些事,甚至省电,给cpu降频这些,但是有了系统,你不用什么都写,关注自己的业务就行了,os帮你提供机制,你只需要告诉我干啥,告诉我策略就行了,这不是软件工业的核心,机制策略分离吗?你看linus自己写linux时最开始就是在386上跑了一个调度程序。然后写个内存管理,简单的io框架和驱动框架,这就是个os了。

我告诉你现代软件怎么搞的,抽象一层干净的,在所有系统上这些函数都要实现,然后最后这些实现调用的部分,在单独隔离一个目录出来把platform dependent的代码单独拎出来,一般没有太多,然后移植就是重新根据新的系统实现这些代码,其实就是把这些代码定向到操作系统提供的服务里。

有些软件好移植,有些移植真有不可能的,涉及到了重写很多系统基础设施,比如dtrace,一直都没移植成功过。

猜你喜欢

转载自www.cnblogs.com/guokr321/p/10149853.html