任何人都可以解释使用BSD read()write()操作在/ dev节点上执行的读/写操作如何到达HDD。
是通过文件系统还是直接通过设备驱动程序进行交互....
答案 0 :(得分:1)
它直接与设备驱动程序交互。一些操作系统(不确定OS X)会使用缓冲区缓存,但有些会绕过它。在某些情况下,它甚至取决于设备节点。例如,OS X有/ dev / disk *以及/ dev / rdisk *,其中rdisk *设备节点是原始访问。
答案 1 :(得分:1)
例如,请采取以下案例。你打开虚构的/ dev / bd设备,这是一个硬盘驱动器。内核为了服务系统调用请求,首先尝试查找与/ dev / bd路径关联的inode。在它成功之后,它已被确定,inode的类型是什么,刚才已经读过。在我们的例子中,inode的类型将是BLOCK-SPECIFIC。此时,内核知道此inode表示驱动程序(特定于块的设备的驱动程序)。每个设备都有一个(major_id,minor_id)对关联,它们识别不同的设备。在inode中,可以找到它,并且内核确切知道哪个驱动程序可以为请求提供服务。并且取决于请求,将调用驱动程序的相应功能(例如读取)。