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

这个来自知乎的一个提问,我不喜欢知乎,就把自己的所有答案都删了,贴在这里。

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

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值