本质区别就是字面意思。
软件实现:就是用操作系统驱动等软件代码,以CPU操纵的方式去实现某个功能。
硬件实现:就是用操作系统直接访问硬件寄存器的方式去实现某个功能。
举例:
1、IP包的校验值:可以用软件实现,软件算好了以后,填充到报文的指定位置;也可以用硬件实现,网卡的内置电路负责填充校验值。不仅仅是计算,校验的过程也同样可以由软件或者硬件实现。
2、闪存存储:硬件实现,就是我们看到的U盘,SSD这类存储设备,flash的块重映射,写平衡,缓存等,都是由硬件的主控来实现的。软件实现,这种普通人用的就比较少了,一般在嵌入式的开发板上比较常见,某些板子为了解决成本,会把裸片(SPI/NAND)直接焊在板子上,这种情况下,就需要软件自己编写代码完成块重映射、写平衡等功能。当然如果懒得做,直接操作裸片也是可以的,就是寿命会短一些。
以上是两种比较典型的软件实现和硬件实现的区别。
但是,多数情况下,软件和硬件都需要互相辅助才能完成相应的工作。比如,对于IP报文校验,即使使用硬件实现,软件也需要设置相关的寄存器;对于闪存存储来说,确实不用直接操作闪存了,但还是要发送SCSI/SATA命令才行。
区别就是字面意思,没啥本质不本质的,软件和硬件,脱离了对方都无法工作。
当我们讨论一个功能是用软件实现还是用硬件实现时,我们究竟关注的是什么?
先举一个极端的例子。我们都知道「加法」和「乘法」肯定是用硬件实现的。这不废话么?可是你平时听到过有人强调这点吗?没有。因为「加法」和「乘法」的应用非常普遍。普遍应用的东西,你做 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 的人就跳出来说了,我这个算法是「硬件实现」的。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有