汇编 – 超越抽象的好奇心:字节码是如何执行的?设备驱动程序如何工作?

我在* nix上看到的所有内容都是硬件上的一组抽象,但我很好奇硬件是如何工作的.
我已经在汇编中进行了编程,但这仍然只是一组抽象.

处理器如何理解汇编操作码(如字节码)?
设备驱动程序如何工作(在较低级别(抽象)进行解释)?

哇….巨大的问题!在根本级,处理器可以通过特殊指令与硬件通信,例如, IN和OUT到x86硬件上的I / O端口和/或某种形式的内存映射I / O区域.

然后,不同的硬件具有关于如何通过这些信道进行通信的非常不同的协议/规则,并且如果不遵循这些规则,通常可能会失败.一个示例是输出设备每秒只能处理有限数量的传输,因此驱动程序需要在尝试传输任何内容之前检查硬件是否准备好发送更多数据.您通常还需要确保没有并发尝试访问同一设备,这是操作系统不允许用户模式程序在任何时候直接访问硬件的众多理由之一.

为什么不看看Linux源代码来满足您的好奇心?

Linux kernel drivers

请注意,其中大部分是用C语言编写的,而不是汇编语言.没有严格的要求使用汇编语言编写设备驱动程序,只要您有可用于与硬件通信的指令(在C中是正确的,但在某些更高级别的语言中可能不正确).

相关文章
相关标签/搜索