IO 写操作可以比进程寿命更长吗?

IO 写操作可以比进程寿命更长吗?

据我所知,当进程写入文件时,它会启动系统调用。在所需的信息中,它需要一个指向用户空间中的缓冲区的指针,其中填充了要写入的数据。

考虑一个场景,其中有一个进程生成两个线程。一个线程执行系统调用写入 10MB。当操作系统正在处理 IO 请求时,另一个线程执行无效的内存访问,从而触发分段错误。在这种情况下写请求会发生什么?特别是,我可以保证写操作不会发生或者在进程内存释放之前完成?如果 io 请求只是一个 64 位整数,答案会改变吗?

答案1

目前,文件系统上的操作是不可中断的——网络文件系统除外。

TASK_KILLABLE[LWN.net,2008]。

对于传统的基于块的文件系统,您可能会预测您的保证将会得到满足。我不认为TASK_KILLABLE它在网络文件系统之外被广泛采用。然而,如果没有充分的理由,我不想假设情况总是如此。

如果应用程序有可能在网络文件系统上运行,则很难说有强有力的保证。 (一般来说,例如注意NFS3 并未遵循 POSIX 文件系统的所有期望)。

存储技术仍在不断发展。例如,如果您根据 Linux 块层的架构假设文件系统将以某种方式工作,那么将来当您的应用程序在 Linux 上运行时,您可能会感到惊讶基于字节寻址内存的文件系统

相关内容