百科问答小站 logo
百科问答小站 font logo



操作系统能不能继续分两部分:硬件相关和硬件无关?并且让驱动只依赖硬件相关部分而不依赖操作系统? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

其实这就是一个非技术问题

先拆分成两种情况:

一种是同一种操作系统升级的情况:比如从WIN2000升级到WINXP,升级到WIN7,升级到WIN10.

任何一个设计的比较好的操作系统,都会有一个硬件抽象层(HAL),驱动几乎都不会直接操作硬件,所以如果HAL的变化不大,那么从WIN2000升级到WIN7,有一些驱动是可以正常工作的。

WIN10被人骂的比较多,一个原因是WIN10的HAL层变化太大,很多驱动都要重写,我写的一个东西,在WIN10 2004版本上工作的比较好,在WIN10 20H2上就有一些问题。


另外一种情况是期望不同操作系统使用同样代码的情况:比如希望Linux和Windows使用同一套二进制驱动。

技术方面的原因很简单,就是两个操作系统的HAL层完全不同(暂时不谈二进制文件格式的问题)。

那能不能设计成相同的?答案是不能,原因有很多:

1. 不同操作系统发展路线不一样,Linux是从学习UNIX的设计发展而来,Windows则是另外一个独立的设计(并且WIN2K和WIN9x也不是同一个发展路线),这就意味着他们的原始设计差异非常大。写代码的人都知道,对于一个庞大的架构来说,修改某一个模块很容易,但整个架构推倒重来,基本不可能,厂商没有那么多人力去做这件事(但也有人做了,后面会说)。

Linux里,一切皆文件的思路贯穿于内核设计,但Windows的核心设计不是文件,就这一个区别,会让驱动设计有巨大的差异。

2. 有一些设计,是存在专利保护的,换句话说,你想让两个不同的操作系统完全一样,对不起,这是违法的。Linux有很长一段时间不能光明正大的支持NTFS/exFAT,说到底还是这方面的风险。

既然费力又不讨好,那么厂商这么做的意义在哪?


当然,题主既然想到了,肯定有别人也能想到,而且也有人这么做了。

比如WSL1,这个就是微软搞出来的,兼容Linux的,但又不是Linux的内核,刚出来的时候一片叫好,结果呢,微软发现这玩意收益不到,到WSL2的时候,微软就不再独立开发兼容Linux的内核了,直接搞虚拟机多好,厂商也要考虑成本的。

在一些小众领域(嵌入式),这种情况特别普遍,VxWorks一直以来是嵌入式(工控、自动化、军工、航空航天)领域里使用率比较高的操作系统,这方面国内也有很多公司在做国产化,国产化的一个很重要指标就是:兼容VxWorks API甚至是二进制。

看到了吧,能做,有人做了,收益不高,负担太大。

所以,不是技术问题




  

相关话题

  Linux C++ 服务器端这条线怎么走?一年半能做出什么? 
  学习 Linux 有哪些好处? 
  Linux大神都是怎么记住这么多命令的? 
  C语言编写时,将参数传递跨越多个函数的方式是否是妥当的? 
  为何中国有相当一部分 Windows 用户不愿意用 Windows 10? 
  做 FPGA 创业容易被抄袭吗? 
  如何评价Linux 内核核心成员Theodore Ts'o被 Sage Sharp 指控为强奸辩护者? 
  鸿蒙系统到底是不是安卓系统? 
  内存(DRAM)的连续读写速度和随机读写速度是一样的吗? 
  mmap 内存映射,是越过了操作系统,直接通过内存访问文件吗? 

前一个讨论
关于malloc返回值的问题?
下一个讨论
为什么Linux下要把创建进程分为fork()和exec()(一系列函数)两个函数来处理?





© 2024-09-19 - tinynew.org. All Rights Reserved.
© 2024-09-19 - tinynew.org. 保留所有权利