gpt4 book ai didi

Linux 系统调用写入 : Does the kernel guarantee data write sequence?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:18 25 4
gpt4 key购买 nike

我知道内核保证,如果没有中断,一定大小(据说是 PIPE_BUF,4096 字节)的数据被原子写入,这意味着其他进程正在尝试读取 block 。

但我一直在想,如果我向存储设备写入更多数据 block (例如“abc...[x 字节]...xyz”),在内核执行操作期间,将内核先写 abc,再写 xyz?

如果不是,那么在写入操作完成之前,其他一些进程可能会碰巧读取“*...[x bytes]...xyz”。我认为,这对许多应用程序来说无疑是一场灾难。

有人知道实现吗,或者,我在哪里可以找到内核源代码中的答案?

期待您的回复!谢谢!

[更新2011.11.12]

我查看了源代码,但我无法完全理解它。我发现了调用链“write -> vfs_write -> do_sync_write [loops] -> generic_file_aio_write [inode_mutex] -> __generic_file_aio_write -> .. -> generic_perform_write -> .. -> __copy_from_user(to, from, n)

__copy_from_user 是一个宏/函数,用依赖于体系结构的 asm 代码实现,我现在无法理解它们。但我认为编码人员会按照我们大多数人的想法去做...

希望得到进一步的说明~

最佳答案

数据可能不会按照您写入的顺序物理刷新到磁盘,因此如果机器在写入过程中崩溃,您可能在系统后看到没有“abc”的“xyz” Boot 备份。但假设机器保持运行,内核将确保所有写入都以正确的顺序发生。

关于Linux 系统调用写入 : Does the kernel guarantee data write sequence?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8092203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com