2017-04-13 72 views
0

让我们拿一个硬盘驱动器/网络接口。它由多个进程共享。现在多个进程可能会向硬盘驱动器发出并发命令来读取数据。当数据可用时,内核如何知道哪些进程已经准备好了数据?操作系统和硬盘驱动器之间是否存在一些协议?即与准备好的数据一起返回的一些元数据?操作系统 - 操作系统如何将就绪设备数据映射到相应的进程

+0

'操作系统和硬盘驱动器之间是否有一些协议。即与准备好的数据一起返回的一些元数据?'通常,是的,因为驱动器本身可能具有可以考虑的缓冲并且同时服务于多个请求。 – ThingyWotsit

回答

1

当涉及到特定于每个进程的数据时(例如,访问从硬盘驱动器上的文件系统或接收网络中打开的文件),它通常使用锁定机制进行序列化。 “协议”(将正确检索的数据分配给请求进程)是或多或少的驱动程序或内核部分特定的 - 例如在不同的情况下完成。网络代码和虚拟文件系统代码。

这在Kroah-Hartman,Rubini,Corbet的Linux Device Drivers一书中称为“并发性和竞争条件”的章节中有很好的描述。你可以看看这里:https://www.safaribooksonline.com/library/view/linux-device-drivers/0596005903/ch05.html