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



操作系统里面经常说的一个功能用「软件实现」还是用「硬件实现」,其本质区别是什么? 第1页

  

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

本质区别就是字面意思。

软件实现:就是用操作系统驱动等软件代码,以CPU操纵的方式去实现某个功能。
硬件实现:就是用操作系统直接访问硬件寄存器的方式去实现某个功能。

举例:

1、IP包的校验值:可以用软件实现,软件算好了以后,填充到报文的指定位置;也可以用硬件实现,网卡的内置电路负责填充校验值。不仅仅是计算,校验的过程也同样可以由软件或者硬件实现。

2、闪存存储:硬件实现,就是我们看到的U盘,SSD这类存储设备,flash的块重映射,写平衡,缓存等,都是由硬件的主控来实现的。软件实现,这种普通人用的就比较少了,一般在嵌入式的开发板上比较常见,某些板子为了解决成本,会把裸片(SPI/NAND)直接焊在板子上,这种情况下,就需要软件自己编写代码完成块重映射、写平衡等功能。当然如果懒得做,直接操作裸片也是可以的,就是寿命会短一些。

以上是两种比较典型的软件实现和硬件实现的区别。

但是,多数情况下,软件和硬件都需要互相辅助才能完成相应的工作。比如,对于IP报文校验,即使使用硬件实现,软件也需要设置相关的寄存器;对于闪存存储来说,确实不用直接操作闪存了,但还是要发送SCSI/SATA命令才行。

区别就是字面意思,没啥本质不本质的,软件和硬件,脱离了对方都无法工作。


user avatar   feng-dong 网友的相关建议: 
      

当我们讨论一个功能是用软件实现还是用硬件实现时,我们究竟关注的是什么?

先举一个极端的例子。我们都知道「加法」和「乘法」肯定是用硬件实现的。这不废话么?可是你平时听到过有人强调这点吗?没有。因为「加法」和「乘法」的应用非常普遍。普遍应用的东西,你做 CPU 的不去直接实现是不是傻?分分钟被竞争对手干屁。
有了「加法」和「乘法」你就可以组合了。比如说 a * a + b。咦,你突然说了,做硬件的,能不能给我的 a * a + b 做个硬件电路,肯定快啊。做硬件的说,你 tm 谁啊?要我给你的破公式做硬件电路。
可是有没有做硬件的同意的时候呢?有啊,比如
a * b + c * d + e * f,
数学家说了这个东西用处多,叫 dot product of (a, c, e) and (b, d, f)。做硬件的就在「加法」和「乘法」之外单独做一套更快电路。可是和「加法」和「乘法」不同,还是很多人用不到 dot product,所以做硬件的就没能和做语言的商量好,没能把 dot product 做成 higher level language 的一部分那么好用。
有一部分人不好好学习,该用 dot product 的时候就用「加法」和「乘法」凑合一下。
还有一部分人,知道怎么用 dot product。可是自己写算法的时候,不知道把本来可以写成 dot product 的部分写出来,而是把算法写成了根本没用 dot product 的形式。
结果那些会把算法写成 dot product,又会调用硬件 dot product 的人就跳出来说了,我这个算法是「硬件实现」的。

user avatar   pansz 网友的相关建议: 
      

开局一张图,剩下全靠猜?这个没法评价。

从软件的角度虽然我能想出两三种导致这个现象的原因,但非正式发布的产品出现任何问题都是常见现象。盲人摸象的评价没有必要。

跟11代没差别,这个肯定是违背常识的,要知道11代i9只有16线程,12代i9有24线程,24线程超越16线程并不需要多么高超的优化技巧。

调度优化的主要难题是当我们只需要少量线程运作的时候究竟把这个线程安排在哪个核心。

然而,对于全核心全线程同时计算的场景来说,反正都是全核心上场,根本不需要什么优化,谁来都是全核心工作。

如果这个软件能把所有核心用满的话,没道理性能不变。所以肯定有某个环节出了问题。正式版本再说吧。




  

相关话题

  如何用一段简单的代码讲述一个悲伤的故事? 
  Prezi 相比 PowerPoint 有什么优缺点? 
  在有能够转化为C、C++、Java的第四代语言Raptor的情况下,为什么还需要C等程序设计语言? 
  Python和C语言哪个更容易学,感觉学了C语言有点难,只学过C语言的大学生很迷茫? 
  C语言中while(a=10);和while(a==10);有什么区别? 
  为什么C语言100*1.05=104? 
  C、C++、Java、JavaScript、PHP、Python、Ruby 这些语言分别主要用来开发什么? 
  华为宣布捐赠 openEuler 欧拉开源操作系统,这意味着什么? 
  新买了笔记本电脑后,需要进行哪些基本的设置和下载? 
  c++中超出char、int范围的整数怎么存储? 

前一个讨论
如果有一个月球那么大的天体撞击地球,地球人有什么解决方案?
下一个讨论
C++ 中,std::atomic 是真正的「原子」吗?





© 2024-05-23 - tinynew.org. All Rights Reserved.
© 2024-05-23 - tinynew.org. 保留所有权利