普通开发商应该知道多少裸机?

时间:2009-12-07 10:15:25

标签: hardware bare-metal

前几天让我感到震惊的是,我对我期望运行软件的硬件几乎一无所知。我已经做了大约5年的开发,但自从我离开大学以来,我没有考虑过硬件理论/设计。我甚至不再自己制造自己的机器了,因为老实说,我宁愿付出额外的一些钱,让Comp Sci辍学让我在店里建造它。

虽然很好地理解幕后发生的事情的基础知识显然很重要,但它被抽象为远离我们的开发人员,我们真的不需要关注Programmed I/O的复杂性。或Memory-Mapped I/O等,..

或者我们呢?

请注意,我在这里谈论的是你每天的LOB开发人员而不是专门的裸机人。

那么,定义'平均'你将如何,但总体而言,一个称职的程序员应该有多深才能潜水?

5 个答案:

答案 0 :(得分:9)

这取决于你的发展水平。

  1. 如果您为嵌入式系统开发,这意味着很多硬件知识(接近EE级别)。
    • 如果你在一些专业领域,比如游戏的低级3D图形编程,你应该知道特定图形卡的细节。
    • 如果您正在使用网络或桌面应用程序,可能不是那么多。
  2. 但在所有的发展中,你可能应该知道基本面。如,

    1. von-Neumann架构的瓶颈在哪里?
      • CPU缓存如何工作(在多线程中很重要)。
      • 如何在单处理器多处理器CPU上进行OS调度(同样,在多线程中很重要)。
      • IO的工作方式以及写入文件的原因并不一定意味着您的数据会立即持久存在。
      • IO速度有多慢以及大多数数据库应用程序为何受IO限制。
      • 为什么网络比IO(甚至更多的无线网络)更慢,更不可靠。
    2. 另一方面,我不认为了解内存映射IO的具体情况,或者知道NAND和NOR闪存之间的区别对于普通的*(桌面/网络)开发人员来说非常重要。即使是对现代CPU体系结构的了解也可能是一门科学本身,看看它们在过去几年中有多复杂,更不用说code emitted by modern compilers is becoming more difficult to predict了(文章链接显示它现在更难了)在低级优化时超越编译器)。几十年前,它类似于汽车修理工更容易,今天并不是很多人会试图自己修理汽车。

      **“平均”的定义可能会有所不同。*

答案 1 :(得分:3)

当然可以在不了解底层硬件的情况下完成任务。但是,如果知道缓存如何工作以及特定目标机器上的哪些操作快/慢,将有助于您在设计软件时做出更好的设计决策。

就个人而言,我认为知道我每天至少花10个小时工作的机器非常满意;)

然后又为什么要平均?

答案 2 :(得分:3)

我觉得能够理解编译器发出的汇编语言非常有用,在我的例子中是C ++。在考虑优化和解决困难调试问题等问题时,这非常有用。

答案 3 :(得分:2)

在许多情况下,您不知道程序将运行哪种硬件,因此过多地关注一台机器的某些特定细节是没有意义的。用户可能会在64Bit RISC硬件上的虚拟机中运行Win32可执行文件。除非您确定知道目标硬件,否则最好使用操作系统和标准库提供的抽象,并按预期使用它们。相信构建操作系统,编译器和库的人员可以正常工作。

答案 4 :(得分:1)

操作系统开发人员为了抽象底层物理世界而做得很好。他们的目的是为普通开发人员提供许多硬件的通用接口,这样他就可以专注于应用程序并开发可移植,易于维护和能够优化操作系统更新的代码。

因此,对于普通开发人员制作平均应用程序,我认为最好不要问太多关于硬件的问题。