一步一步的慢慢来!
sync() fsync() fdatasync()
上一篇 /
下一篇 2008-04-25 23:47:06
/ 个人分类:LINUX之路
如果文件是用 O_SYNC 或 O_DSYNC 打开的,那么每次写操作会在写回磁盘之前产生为了刷新磁盘的数据。如果写操作产生了新的磁盘分配(文件在被扩展而不是覆盖现存的页面),那么该次写操作也会产生一个相应的 JFS 日志写入。
在实存和磁盘中的强制同步内容产生于多种途径:
一个应用程序为一个特定的文件调用 fsync() 函数。这样就引起所有包含修改过的数据的页面都要被写入磁盘。写操作在 fsync() 调用返回程序后结束。
一个应用程序调用一次 sync() 函数。这样就引起所有包含修改过的数据的文件页面要被调度以便写入磁盘。写操作不必在sync() 调用返回程序后结束。
用户可以输入 sync 命令,该命令轮流执行 sync() 调用。同样,有些写操作可能在用户被提示输入(或者下条在 shell 脚本中处理的命令)时还没有完成。
/usr/sbin/syncd 守护程序在正常间隔内执行了一次 sync() 调用,通常为每 60 秒。这就确保了系统没有积累大量只有在易失性内存中存在的数据。
sync 操作除了消耗了很小的 CPU,它还具有许多效应:
1.它引起写操作成堆化,而不是分散的。
2.它引起至少 28 KB 的系统数据要被写入,即使在 sync 操作以前没有 I/O 活动。
3.它加速了磁盘写入数据的速度,战胜了 write-behind 算法。这个效应大多数情况下,在程序在每次写操作后执行一次 fsync() 调用时十分明显。
4.当 sync() 或者 fsync() 调用发生,日志记录被写入 JFS 日志记录设备以便表明被修改了的数据已被提交到磁盘。
导入论坛
收藏
分享给好友
管理
举报
TAG:
sync