免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1685 | 回复: 3
打印 上一主题 下一主题

[文件系统] 关于写文件缓冲页一致问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-15 11:09 |只看该作者 |倒序浏览
看毛德操书上册595页说:写文件时首先根据写入位置计算出写入位置所在块号,然后在缓冲区找对应的缓冲块,找到后看其内容是否与设备上一致,若不一致,则先读入从而使得一致,然后开始写文件。
问题:假设进程B刚刚写过文件S的缓冲块100,尚未同步到磁盘,现在进程A也要写文件S的缓冲块100,他发现不一致,于是从磁盘读入,这不是把B写的内容丢失了吗?
      同样,如果是自己刚刚写过,写过的内容还没有同步到磁盘,自己又写一次,也会丢失上次写的内容啊。
      为什么要从磁盘读入呢,内存中的才是最新的啊?

请教大家,给予指点啊,谢谢。

论坛徽章:
0
2 [报告]
发表于 2013-01-15 13:03 |只看该作者
本帖最后由 frogsu 于 2013-01-15 13:13 编辑
hongyueer 发表于 2013-01-15 11:09
看毛德操书上册595页说:写文件时首先根据写入位置计算出写入位置所在块号,然后在缓冲区找对应的缓冲块,找 ...


感觉你所描述了这个现象应该这样分析:首先进程B要将一段数据写入磁盘中,它必须将被写入的页通过buffers映射到文件的逻辑块和磁盘的逻辑块,并且进行判断将要写入范围内的与磁盘逻辑块内容不一致的块读入缓存页;然后将用户数据拷贝到该页中,提交需写入磁盘的缓存页,并将该页中待写入的块置Uptodate,说明缓存页中的相应块与磁盘逻辑块内容一致; 最后等待会该该页的写更新的完成。如果在这过程中有A进程也进行了写,这就存在了写冲突的问题了。但内核应该会有一种机制例如页的锁机制等先保证A进程的完成。然后,让B进程进行与A相同的写操作过程,即应该在进程A操作与B进程操作之间肯定会有个sync动作。

论坛徽章:
0
3 [报告]
发表于 2013-01-16 18:46 |只看该作者
hongyueer 发表于 2013-01-15 11:09
看毛德操书上册595页说:写文件时首先根据写入位置计算出写入位置所在块号,然后在缓冲区找对应的缓冲块,找 ...

这两天看了内存相关的书,感觉上次的回答不太对,首先按照你的说法:“进程B刚刚写过文件S的缓冲块100,尚未同步到磁盘” ,那么这个缓冲块100存在肯定存在于cache里面。由于进程A也要写文件S的缓冲块100,这时会发生缺页异常,但块100已经在cache里面了,就会直接从cache里取,应该是直接修改了块100的内容,覆盖了B的修改,而不是从磁盘读入,把B写的内容丢失。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
4 [报告]
发表于 2013-01-16 19:02 |只看该作者
楼上两楼, 应该都是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP