我对软件如何与硬件交互感到困惑,尽管我已经参加了计算机组织课程。
我在哪里可以找到来自Linux或BSD等操作系统的代码,甚至可以从C中找到允许抽象硬件的代码。
我是否有任何好的材料可以阅读以完全理解硬件和软件的相互作用。
答案 0 :(得分:2)
从C到装配到机器代码再到逻辑电路的一个伟大的(虽然昂贵的)介绍是计算系统简介:来自位和&通往C& C的大门超越耶鲁派特。这本书真的帮助我理解事物是如何相互建立的以及计算机硬件如何工作的。
答案 1 :(得分:2)
我发现这个讲座非常令人惊讶: http://video.google.com/videoplay?docid=7654043762021156507#
答案 2 :(得分:1)
好吧,您可以从www.kernel.org获取Linux源代码,从http://cvsweb.netbsd.org/获取NetBSD源代码,但这些内核包含超过一百万行代码;不是很好的介绍性材料。
这是一个想法:阅读Wikipedia's list of computer system emulators并找到一个看起来很有趣的,在您拥有的平台上工作,并附带示例代码和独立程序。写一些独立的代码。
您可以在真正的PC上执行此操作,但这是一个较慢的过程,调试次数较少,可见性较低。
答案 3 :(得分:1)
绝大多数最常见的抽象是通过device driver,一个软件组件,负责直接处理硬件并为操作系统提供标准接口。通常,o / s接口具有init(),uninit(),start_io(),handle_interrupt()以及一些控制和状态函数等功能。
设备驱动程序非常了解设备以及设备的硬件接口。例如,典型的磁盘接口在某处有五个左右的顺序存储器位置,它们构成了控制器的接口。第一个通常是状态和控制寄存器。也就是说,读取返回一个指示是否正忙于执行命令的位;另一位表示它是否具有可用的扩展状态信息。写入“CSR”(通常为TLAified,控制状态寄存器)会启动诸如“向磁盘控制器发送命令”,“从磁盘控制器读取扩展状态”等命令。另一个寄存器接受命令代码(复位,读取数据,写入数据等)。其他寄存器通常是地址指针,指示计算机的物理内存空间在哪里传输数据或从中传输数据。
警告:尝试阅读设备驱动程序以弄清楚计算机系统的工作原理就像试图通过研究树苗的根源来弄清楚森林是如何工作的。它是许多重要组成部分之一,但要遵循它所处的位置,最终你会看到整个画面。
答案 4 :(得分:0)
任何操作系统内核,例如,uhm,Linux或* BSD内核。