免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: oo_ooo
打印 上一主题 下一主题

[内存管理] [求教]页表VS文件表,好纠结... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-28 18:12 |显示全部楼层 |倒序浏览
小菜鸟一枚,有个问题想请教下各位大神:文件表(fd表、file结构表和v-node表这一套东西) 跟VM里面的普通页表是什么关系呢,一直搞不清楚...   
  
我目前的理解是:页表是VM体系的基本单位,进程空间中所有的区域最后都要通过页表来索引和转换,文件地址也不例外,因为文件应该会以MMIO的形式map到虚拟存储系统中的。但是每次碰到文件IO部分的时候又觉得这三种文件表跟页表的形式差异很大,像是独立的体系?
  



具体化为两个问题吧,这两个问题其实是对我目前疑惑的不同表述

问题一:  
   
我要到一个虚拟地址里读一串数据(此数据目前没有被缓存到物理内存中),MMU会根据页表去定位物理地址,它发现页表项中提示这些页尚未被缓存,还在HD上,则此时会触发缺页处理程序,然后内核会去硬盘里调数据进入物理主存。  
   
--- 我目前的疑惑主要是:在这一过程中,文件表项是何时起作用的?unix中,数据均以文件的形式存放在HD上,而HD本质上是一个IO设备,上面文件数据也需要memory map到进程空间才可以被访问,这么看来好像就不需要独立维护一套文件表项了,除非文件表项是页面的补充,在缺页访问HD时才会用到?

问题二:

我对单独的两个部分:基于页机制的虚拟-物理地址存储与转换体系  和  文件系统  理解的都还可以:
  
---前者主要是TLB-cache-Mem-HD,基于分页和页表的机制,中间包括各种策略的调入调出;
---后者主要是fd - file table - vnode - HD上的实际文件;
  
但我还没有把两者之间的关系搞明白,即这两个部分最终都是要到HD上访问文件数据(临时存放在dram中,不放回HD的先不考虑),那这两条路径究竟是怎么协同运作的呢?是补充的关系,还是本来就是同一个访问流程的不同描述?

一直搞不清楚,然后书上和网上的资料貌似也很少直接提到这一块,故求指点迷津,先行谢过~

论坛徽章:
0
2 [报告]
发表于 2014-12-28 19:31 |显示全部楼层
回复 2# 镇水铁牛

谢谢回复,举个例子:

比如刚刚创建了一个新进程,对于进程空间的不同区域(如代码区、数据区)只有页表的映射关系,还没有真正从HD中缓存数据到DRAM中来。此时,新进程开始运行,并发生了缺页,触发缺页处理程序。那么:

A --- 是否在新进程刚刚创建的时候,与之有关联的所有文件就已经被open,相关的文件表项也已经在内核结构中被创立了?

B --- 缺页处理程序是根据进程空间的文件表去索引并从HD读取数据到DRAM中的吗?


   

论坛徽章:
0
3 [报告]
发表于 2014-12-28 20:20 |显示全部楼层
本帖最后由 oo_ooo 于 2014-12-28 20:22 编辑

回复 4# 镇水铁牛

非常感谢铁牛兄的耐心解答,其实我对文件IO本身的flow大概了解,我比较糊涂的是:

A --- 是否在新进程刚刚创建的时候,与之有关联的所有文件就已经被open,相关的文件表项也已经在内核结构中被创立了?
【回复】open是你主动调用的,何来打开所有文件?
【追问】open在这里造成了歧义,其实我想问的是:是否一个新进程刚刚创建的时候,与之有关联的所有文件就已经被打开了(例如放在HD上的一个大程序可执行文件),相关的fd已经在用户区中的descriptor table中分配、而内核区的file table中也已加入对应的表项?

B --- 缺页处理程序是根据进程空间的文件表去索引并从HD读取数据到DRAM中的吗?
【回复】当你去write该fd对应的文件,write的输入参数offset,imapping会根据文件系统的metadata找到该数据对应于该HD的具体的扇区号,IO就是这样交互的。可以先不要纠结于缺页异常。
【追问】比如我read一个fd对应的文件,imapping会根据文件系统的metadata找到该数据对应于该HD的具体的扇区号。那么内核是一边读数据到物理内存中,一边更新对应的页表吗?

下面会去详细的啃代码,不过这段时间有些较紧急的任务,所以还是想先弄清楚一点:wink:

论坛徽章:
0
4 [报告]
发表于 2014-12-28 21:17 |显示全部楼层
回复 6# 镇水铁牛

thanks~
   

论坛徽章:
0
5 [报告]
发表于 2014-12-29 11:00 |显示全部楼层
回复 8# humjb_1983


谢谢humjb_1983的回复,大概搞明白了,是没啥直接联系。

现在我的理解是,可不太精确的把文件表项这套东西看做是VM页表机制的下游 or 后勤部,文件mmap之后,内核/用户代码才能去HD中读入数据,后续数据处理的时候才会涉及到页表机制的范畴~ 不知是否准确

论坛徽章:
0
6 [报告]
发表于 2014-12-29 12:42 |显示全部楼层
回复 10# humjb_1983

got it, 多谢
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP