a_random_user Asked: 2019-07-03 02:42:09 +0800 CST2019-07-03 02:42:09 +0800 CST 2019-07-03 02:42:09 +0800 CST 一个 IO 写操作可以比一个进程更长寿? 772 据我所知,当进程写入文件时,它会启动系统调用。在所需的信息中,它需要一个指向用户空间缓冲区的指针,其中填充了要写入的数据。 考虑一个场景,其中有一个进程产生两个线程。一个线程执行系统调用以写入 10MB。另一个线程执行触发分段错误的无效内存访问,而操作系统正在处理 IO 请求。在这种情况下写请求会发生什么?特别是,我保证写操作不会发生或在进程内存释放之前完成?如果 io 请求只是一个 64 位整数,答案会改变吗? linux io 1 个回答 Voted Best Answer sourcejedi 2019-07-03T03:20:00+08:002019-07-03T03:20:00+08:00 目前,文件系统上的操作是不可中断的——网络文件系统除外。 见TASK_KILLABLE[LWN.net, 2008]。 对于传统的基于块的文件系统,您可能会预测会满足您的保证。我不相信TASK_KILLABLE在网络文件系统之外被广泛采用。但是,我不想假设这种情况总是如此,没有充分的理由。 如果应用程序有可能在网络文件系统上运行,那么很难说有强有力的保证。(一般来说,例如注意NFS3 并不遵循 POSIX 文件系统的所有期望)。 存储技术仍在不断发展。例如,如果您根据 Linux 块层的架构假设文件系统将以某种方式工作,那么当您的应用程序在基于字节寻址内存的文件系统上运行时,您可能会感到惊讶。
目前,文件系统上的操作是不可中断的——网络文件系统除外。
见
TASK_KILLABLE
[LWN.net, 2008]。对于传统的基于块的文件系统,您可能会预测会满足您的保证。我不相信
TASK_KILLABLE
在网络文件系统之外被广泛采用。但是,我不想假设这种情况总是如此,没有充分的理由。如果应用程序有可能在网络文件系统上运行,那么很难说有强有力的保证。(一般来说,例如注意NFS3 并不遵循 POSIX 文件系统的所有期望)。
存储技术仍在不断发展。例如,如果您根据 Linux 块层的架构假设文件系统将以某种方式工作,那么当您的应用程序在基于字节寻址内存的文件系统上运行时,您可能会感到惊讶。