【发布时间】:2013-09-18 14:27:59
【问题描述】:
考虑一个实现 open()、read()、write()、close()、unlocked_ioctl() 和 mmap() 的 linux 设备驱动程序。
现在,假设多个(或相同)进程同时打开同一个设备 (/dev/device)。
这些文件操作是否以任何方式保证是原子的 w.r.t.或者 open()、read()、write()、close() 中的每一个都应该使用互斥锁,以便它们的一对在更改(例如,缓冲区数据)的过程中不会抢占它们(通过同一个inode)?
如果内核保证它们彼此之间的原子性,并且如果每个操作都找到并保持缓冲区/硬件处于一致状态,则应该没有必要。
请把我引向一些参考资料(如果你知道的话)。
谢谢。
编辑:它在其中一个 cmets 中,但我找到的最佳参考在这里:
http://www.makelinux.net/ldd3/chp-6-sect-6
它还展示了缓解问题的策略,通过限制单个用户、创建副本、强制用户等待等方式。
【问题讨论】:
-
此链接已失效 :(: makelinux.net/ldd3/chp-6-sect-6
-
链接失效
标签: linux file-io kernel race-condition