注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Tsecer的回音岛

Tsecer的博客

 
 
 

日志

 
 

内存管理(3)---块设备缓冲和文件缓冲独立性验证  

2012-01-16 22:28:43|  分类: Linux内核 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、块读取和文件读取
在前一篇文章的最后,说明了通过/dev/hda1直接访问块设备使用的缓冲区和通过/path/to/file/in/block访问文件并不共享页面缓冲,假设两者中通过一种途径修改了这个设备某个块的内容,然后另一方使用的还是自己缓冲的、未更新的页面内容,此时就会出现不一致。当然这个东西可能只有我们这些无聊的geek会关心考虑这个问题,事实上没有人这么使用。但是作为一种现象,我还是想验证一下这个不一致,所谓“光说不练假把式”就是这个意思。
二、通过文件修改之后看块设备未更新
这里的方法就是首先先各自通过文件和块设备访问设备中的某一个块,从而迫使内核将这个块的内容读入各自的页面缓冲中,然后通过文件系统修改这个文件的内容,之后再通过块设备来读取相同块,由于块设备和文件使用的是独立的页面缓冲,所以块设备访问的是没有更新的内容。
[root@Harry boot]# cat incon.txt
hello
[root@Harry boot]# stat incon.txt
  File: `incon.txt'
  Size: 6             Blocks: 4          IO Block: 1024   regular file        ext2文件系统中每个块大小为1024字节
Device: 801h/2049d    Inode: 34          Links: 1                             该文件分配的inode编号为34
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2012-01-16 22:03:04.000000000 +0800
Modify: 2012-01-16 21:59:20.000000000 +0800
Change: 2012-01-16 21:59:20.000000000 +0800
[root@Harry boot]# debugfs -R 'bmap <34>  0' /dev/sda1         通过debugfs查看34号inode使用的块编号为11782
debugfs 1.41.9 (22-Aug-2009)
11782
[root@Harry boot]# echo tsecer>>incon.txt                            向文件中追加内容。
[root@Harry boot]# debugfs -R 'bmap <34>  0' /dev/sda1      inode使用的块编号没有变化
debugfs 1.41.9 (22-Aug-2009)
11782
[root@Harry boot]# echo world>>incon.txt                             再次追加内容
[root@Harry boot]# hexdump -Cvs 12064768  /dev/sda1 | more    通过块设备查看文件内容没有变化,这里的参数12064768=11782×1024
00b81800  68 65 6c 6c 6f 0a 74 73  65 63 65 72 0a 00 00 00  |hello.tsecer....|
[root@Harry boot]# cat incon.txt  通过文件系统查看文件内容已经变化
hello
tsecer
world
[root@Harry boot]# hexdump -Cvs 12064768  /dev/sda1 | more 经过一段时间再次查看这个块设备的数据,可以看到其内容已经变化
00b81800  68 65 6c 6c 6f 0a 74 73  65 63 65 72 0a 77 6f 72  |hello.tsecer.wor|
00b81810  6c 64 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |ld..............|
三、扯淡
这个现象感觉好像有问题,但是文件系统当时设计的时候就没有准备让用户态程序通过块设备来准确的获得其中的数据,而是主要为了让文件系统进行自己的元数据操作?总之,非到不得已的时候,还是应该乖乖的用文件操作,直接操作块设备的扇区可能会出现不一致的问题,但是这个时间应该不会太久,等内核把脏页面定期冲刷到设备上就好了。
  评论这张
 
阅读(547)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017