内核如何实现文件访问的同步技术

内核如何实现文件访问的同步技术

我读到内核在访问文件时实现了同步机制。例如,如果我们尝试同时使用read()或从不同的进程写入或读取文件系统中的文件,内核将防止竞争条件。write()

具体是如何实施的?我在编写代码时使用过互斥体和信号量,这可以防止不同的线程或进程同时执行代码的某一部分。

在这种情况下,我假设内核应该仅在多个进程或线程尝试读取或写入同一文件描述符时实现一种锁定机制,而不是任何时候read()或被write()调用,这可能适用于任何文件描述符。如何实现这一目标?

答案1

Linux内核中文件系统的锁定规则是内核文档中有描述,详尽但可能难以理解,如果您还不熟悉 VFS 代码。

大多数文件操作都是使用 inode 上的锁来同步的,i_rwsem。这个锁通常不是直接操作的,而是通过多种锁定功能。您可以通过搜索inode_lockin来查看它们在 Ext4 中的使用情况ext4/file.c

有些操作还使用锁struct filef_lock;看llseek例如。

相关内容