免费注册 查看新帖 |

Chinaunix

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

[文件系统] 请教linux文件读写问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-08 12:08 |只看该作者 |倒序浏览


设进程A现在要读取磁盘上的一个文件中的一页A,由于预读会读入两页到缓冲区,然后由进程A从缓冲区拷贝页A到进程A自己的缓冲区,并释放缓冲区的页A,是这样吗?

若是这样,则有两个问题:
1、        假设进程B也要读取页A,则还要从磁盘读取一回,岂不是效率低下。
2、        假设进程A要写页A,首先在缓冲区中找,找不到则又要从磁盘读取,岂不是浪费。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-01-08 12:29 |只看该作者
回复 1# hongyueer
设进程A现在要读取磁盘上的一个文件中的一页A,由于预读会读入两页到缓冲区,然后由进程A从缓冲区拷贝页A到进程A自己的缓冲区,并释放缓冲区的页A,是这样吗?

若是这样,则有两个问题:
1、        假设进程B也要读取页A,则还要从磁盘读取一回,岂不是效率低下。
2、        假设进程A要写页A,首先在缓冲区中找,找不到则又要从磁盘读取,岂不是浪费。


pagecache是全局的,就是说A读了一个文件的一页,这个时候这一页被放到pagecache中。当B也去读的时候,就可以从pagecache中读取了。pagecache一般不会主动移除,除非通过posix接口显示的移除或者内存空间不足进行移除等。



   

论坛徽章:
0
3 [报告]
发表于 2013-01-08 15:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2013-01-08 16:25 |只看该作者
首先谢谢一楼的解释,但是,那么就是说读入的页在pagecache中,不删除,那么进程是直接使用pagecache呢,还是拷贝到自己的进程空间呢?如果要是拷贝的话,那就有两份了。如果不拷贝,两个进程同时打开一个文件就有点混乱了。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
5 [报告]
发表于 2013-01-08 23:03 |只看该作者
先搞清楚讨论的是read,write还是mmap。

read,write只是在用户态内存与page cache间传输数据,何来两份文件的说法?

mmap直接把page cache暴露在进程地址空间。至于为什么多个进程间不会混乱,man mmap,关键词private map, shared map, copy on write。

论坛徽章:
0
6 [报告]
发表于 2013-01-08 23:25 |只看该作者
不管是读和写,都是与pagecache打交道,写数据的submit和读写数据时是否为脏也不冲突,page lcok和bh lock会保障这些问题。

论坛徽章:
0
7 [报告]
发表于 2013-01-09 09:35 |只看该作者
我的意思就是如果有两个进程读同一个文件的同一页(以只读方式打开),那么对于这两个进程来说,这一页映射到同一个物理地址,还是不同的物理地址?
如果是以读写方式打开又如何呢?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
8 [报告]
发表于 2013-01-09 10:29 |只看该作者
回复 7# hongyueer
我的意思就是如果有两个进程读同一个文件的同一页(以只读方式打开),那么对于这两个进程来说,这一页映射到同一个物理地址,还是不同的物理地址?


两个进程同时读一个文件的page的时候,两个进程的不同的虚拟地址指向同一个物理地址。


   

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
9 [报告]
发表于 2013-01-09 10:44 |只看该作者
本帖最后由 T-Bagwell 于 2013-01-09 10:46 编辑

一般不用O_DIRECT应该是用pagecache的
两个进程操作的如果是一个文件,那就是相同的文件了

论坛徽章:
0
10 [报告]
发表于 2013-01-09 16:45 |只看该作者
独到的的顶顶顶顶顶顶顶顶顶顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP