- 论坛徽章:
- 0
|
问题一:
如读一个磁盘文件file1时,分为如下两步:(1)首先要读包含file1 inode结点的磁盘块;(2)读file1的内容;
那么
(1)中读的内容放在块高速缓存中,其树根是与块设备相关的bdev文件系统中索引节点的address_space对象?
address_space 是文件物理“内容”的 连续内存的逻辑体现。
。。。我没看懂你问题。
inode和本身存储空间 和 inode描述空间 不一样 。
inode本身的空间应该由 buffer head 描述,属于文件的metadata
inode描述对应的address_space 就是文件内容。
(2)中读的内容放在页高速缓存中,其树根是file1 inode对象的address_space中?
看上面。
树根是啥东西?
问题二:
ULK3 P610
“下面是内核创建缓冲区页的两种普通情况:”
(1)当读或写的文件页在磁盘块中不相邻时。发生这种情况是因为文件系统为文件分配了非连续的块,或因为文件中”洞“。
(2)当访问一个单独的磁盘块时(例如,当读超级块或索引节点块时)。
“当读或写的文件页在磁盘块中不相邻时。”这一句不太理解,能否给解释一下?文件页是个什么概念?
我感觉我上面的问题应该回答你了。
文件在内存中是连续的(address_space) 在磁盘中不一定连续 。怎么实现?没啥魔法 文件系统的作者要 搞定他,自己实现readpage function 提取一个文件1或者n个page的内容 到指定page就好了。
所以在pagecache启动 的时候。 你读写文件都是先添完善addressspace 往里面加page ,然后在填充 page内容 。 组成连续的内容。
问题三:
通过dd if=/dev/sda1 of=/tmp/file1 count=1024 blocksize=1M,这样读sda1时,读到的内容也放在bdev文件系统中块设备文件的高速缓存吗?
运行之后如果内存够用。 所有的内容都在 pagecache里面
“bdev文件系统中块设备文件的高速缓存” 这个概念不对。
pagecache就是个 表。 可以包含多个bdev设备 。。。。
|
|