LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1015|回复: 1

磁盘驱动程序 & 磁盘设备文件

[复制链接]
发表于 2005-9-9 14:29:16 | 显示全部楼层 |阅读模式
在《Linux内核源代码情景分析》一书中文件系统章节中,读到如下的话:

段落1:
“从磁盘驱动程序的角度看,则整个介质只是一个由若干记录块组成的一维阵列(记录块数组)......当文件系统层要从磁盘上读出一个索引节点时,要根据索引节点号和超级块中提供的信息,计算出这个索引节点在磁盘上的哪一个记录块以及在此记录块中的相对位移。然后,通过磁盘驱动程序读入这个记录块,再根据相对位移找到这个节点......从磁盘读一个特定文件的内容(数据)则要麻烦一点。先要读入该文件的索引节点,然后根据索引节点中提供的信息将数据在文件中的位移换算成磁盘上的记录块号,再通过磁盘驱动程序从磁盘上读入”

段落2:
“作为‘设备文件’的磁盘......只是将磁盘看成一个巨大的线性存储空间(字节数组)。当从作为设备文件的磁盘读出时,只要将数据在此文件中的位移换算成磁盘上的记录块号,就可以通过磁盘驱动程序读入了。”

段落1比较好理解,它实际讲述的是从磁盘读取一个文件大概过程。段落2是作为对比,写在段落1之后的一段话,我不太理解,因为虽然我了解在Linux/Unix下一切都是文件,包括设备。对设备可以使用文件接口open,read,write,ioctl等等,但小弟可能见识有点短浅,并没有见到针对磁盘文件的open,read,write操作,而且也想象不出这样做会发生什么(难道可以对hda1直接进行write么?)。哪位老大能够解释一下,最好深入探讨一下。 :thank
发表于 2005-9-12 11:09:03 | 显示全部楼层
系统调用open、write访问文件时需要和设备驱动配合使用。需要明确几个数据结构,struct file(linux/include/linux/fs.h)。struct inode(linux/include/linux/fs.h)。跟着这几个数据结构下去,你应该就会明确系统调用和设备驱动的之间的关系。对硬盘的操作并不是直接写的,使文件系统来管理的!文件系统使用实际的硬盘驱动程序来实现。文件系统对于Linux来说是一个非常重要的层次。想要弄明白所有的驱动必须首先了解文件系统!
我虽然不能直接回答你的问题,但是希望以上提到的这些能够对你有所帮助!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表