免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2758 | 回复: 10

[文件系统] 求问:address space 的 owner问题 [复制链接]

论坛徽章:
0
发表于 2013-09-03 12:27 |显示全部楼层
举个例子

/dev/hda
/dev/hda1
/dev/hda2

/dev/hda2 上面有文件file1, file2

当打开 file1, file2的时候,会分别建立file1 和file2的 address space 对象吗 ?
还是说 对于块设备文件/dev/hda2 只存在唯一的一个address space对象,当打开file1 file2的时候让这两个文件的inode的i_mapping 直接指向
块设备文件/dev/hda2的address space 对象 ?

对于/dev/hda1 /dev/hda2 他们应该都有自己的请求队列,对于/dev/hda有自己的请求队列吗?

论坛徽章:
0
发表于 2013-09-03 15:27 |显示全部楼层
我觉得是一个file一个 address space
因为一个file对应一个inode结构,inode里面好像有一个指针指向address space

论坛徽章:
0
发表于 2013-09-03 15:34 |显示全部楼层
zhuwentao0612 发表于 2013-09-03 15:27
我觉得是一个file一个 address space
因为一个file对应一个inode结构,inode里面好像有一个指针指向addres ...


对啊, 就是因为inode里面是一个指针,所以很多inode里面的指针指向的是同一个 address space 结构

论坛徽章:
0
发表于 2013-09-03 23:32 |显示全部楼层
块设备文件有自己的address_space  文件系统上的普通文件的address_space有具体的文件系统提供

论坛徽章:
0
发表于 2013-09-04 10:23 |显示全部楼层
cnlostain 发表于 2013-09-03 23:32
块设备文件有自己的address_space  文件系统上的普通文件的address_space有具体的文件系统提供


谢谢你的回复!
我们回到开始的例子: 比如/dev/hda2 上面安装了ext2文件系统,也就是说 /dev/hda2上面的所有文件共享一个 address space对象吗?这个address space 对象是在什么时候建立起来的呢???

论坛徽章:
0
发表于 2013-09-04 11:03 |显示全部楼层
这个我也很好奇,关注!
runrun_snail 发表于 2013-09-04 10:23
谢谢你的回复!
我们回到开始的例子: 比如/dev/hda2 上面安装了ext2文件系统,也就是说 /dev/hda2上面 ...

论坛徽章:
0
发表于 2013-09-04 14:48 |显示全部楼层

个人理解:

struct address_space {
        struct inode            *host;          /* owner: inode, block_device */
        ...

open一个文件的时候 做的方法映射,这个address_space与具体的inode相关联, 在address_space当中又有address_space_operations来去描述具体的页读写/迁移等方法,对应页缓冲io实现,由具体的文件系统实现(ext/nfs/btrfs等)

在open /dev/sda1 和 open /dev/sda1承载文件系统(假设/dev/sda1挂在/home/tmp下 open /home/tmp/1打开一个普通文件)上的一个具体的文件 建立的映射是不同的,在open 设备文件的时候建立的是special的inode



论坛徽章:
0
发表于 2013-09-04 15:19 |显示全部楼层
cnlostain 发表于 2013-09-04 14:48
个人理解:

struct address_space {


关于你说 打开一个设备文件时,建立的inode结构的i_mapping会指向一个 special的address space对象,我觉得应该是这样的。
但是一直没找到文字方面的资料 ,代码方面也没看到。。。
哥们可以给点提示吗?

还有一个问题就是 按你那个例子 /dev/sda1承载文件系统(假设/dev/sda1挂在/home/tmp下 )

open /home/tmp/1 和 open /home/tmp/2 这两个文件的时候,他们各自的inode的i_mapping 指向的是同一个address space对象吗?

论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
发表于 2013-09-04 16:04 |显示全部楼层
address_space 我认为用来维持disk和内存关系的结构.
涉及到address_space的文件有两种:device file和 存在disk image的file.  这两种的情况有所不同。
address_space可用于描述page cache, swapper cache.
/dev/hda1和/dev/hda2都是同一个设备hda的两个分区. 一个IO设备一个request queue.
请阅读ULK第14,15,17章.

论坛徽章:
0
发表于 2013-09-04 16:19 |显示全部楼层
kiongf 发表于 2013-09-04 16:04
address_space 我认为用来维持disk和内存关系的结构.
涉及到address_space的文件有两种:device file和 存 ...


ULK 14 15 17 肯定看过了。。。
计算机的东西我觉得看那种文字的东西看懂了,根本就不是真的懂, 就是一些空理论而已。
只有书上的理论跟实际的代码结合起来才行。

“address_space可用于描述page cache, swapper cache.”

你的这个回复可能在很高很抽象的层次回答了我的问题,但我还没到那个高度。。。
所以我的问题很简单, /home/tmp/1 和 open /home/tmp/2 这两个文件他们各自的inode的i_mapping 指向的address space是什么时候建立的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP