百科问答小站 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 上的傻瓜式桌面? 
  为什么Linux上的软件不需要“安装”& 为什么很多软件不做成“绿色软件”? 
  如何看待CentOS 8将于2021年结束支持? 
  C盘分区很大没事吗? 
  显卡驱动安装成功,但是设备管理器里面显卡还是黄色感叹号,这怎么办?求大佬们指点? 
  Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势? 
  在 linux 中,用 c 语言如何判断 yum 源是否配置好? 
  用数据线连接手机和电脑后,可以在手机上访问电脑硬盘中的文件吗? 
  Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗? 

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





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利