什么是页回写,直接说,不太好理解,那就稍后再说,现在先来看一下,通过write()写数据,数据需要经历哪些步骤,最终才保存到硬盘上。
假设:当我们在应用里调用write(),写一个hello的数据,那么数据首先会被保存到linux系统的一个缓存区里,最后再经由缓存区写入到硬盘。
这时,大家可能会产生如下一些疑问,那我挨个来回答
为什么数据不直接保存到硬盘?
对于非计算机专业,不懂系统原理的人来说,可能会觉得中间加了一个缓冲区有点多此一举,事实上完全不是你想的那样。
由于本身的设计原因,硬盘接收数据的速度非常慢,有多慢呢,就跟蜗牛爬一样,有些朋友可能会想,为什么不设计快些呢?
哎,没办法啊,由于当前科技,以及材料的限制,能有这么快已经算不错了。所以,当你在调用write()时,不要缓存区,直接将数据写入到硬盘,这就会造成调用write()后,会等很久,write()调用才结束,因为硬盘接收的速度很慢,所以write()要等到硬盘接收完全部的数据才能返回。加了缓存区就不一样了。由于缓存区在内存,而内存接收数据的速度堪比火箭。所以write()可以很快的将数据先写完,然后实现快速调用返回。看到这里,我们终于明白了,原来write()写的数据并不是直接写入到硬盘上的,而是先写到缓存区里,过一段时间后,由Linux系统自动帮你把缓存区的数据写入到硬盘。
什么是页回写?
将缓存区的数据保存到硬盘的过程就是页回写。有些较真的朋友,可能会有疑问?为什么叫页回写,叫回写不是更贴切。页是一个用于描述空间大小的专业名词,通常是4kb,而上图中的缓存区是属于页的一部分,所以当你明白这一点后,叫页回写也挺贴切。
Linux系统什么时候将缓存区里的数据保存到硬盘上
linux系统会为每一个缓存区都设定一个存活时间,这个时候可能是几毫秒,几纳秒,时间一到,就会将缓存区的数据保存到硬盘上。
页回写可能会带来的问题?
由于数据会先保存到缓存区里,所以当你电脑突然断电,那么这个数据可能就会造成丢失,可见想要快,总是要付出代价的,这也是为什么电脑高手叫我们关电脑时,不要强制关闭电脑,应该点击系统的关机菜单,让系统慢慢的关闭,因为系统在关闭时,会优先的把缓存区的数据先保存到硬盘上,避免数据丢失,你强制关闭了,数据可能就不见了。