磁盘的读写和文件系统



磁盘:
硬盘里面的结构如此,磁盘有很多个磁道,数据记录在磁道上。磁道会被划分为很多“块”,磁盘的读取是以“块”为基本单位的,这就是我们常看到的(block)这个单位的由来。那么磁头在读取的时候需要知道三个维度:盘面号,磁道号(柱面号),块号。I\O的读写时间消耗可以分为两块:1找到的block;2传输到内存。既然每次读是读一个块,那么我们可以考虑把相关的数据都放在一个块中,这样做相关处理的时候只需要一次I\O读写就可以了。所以数据不是随随便便得丢到磁盘就算存储好了,我们需要考虑再次查找出来的效率。
 
并发:
关于IO并发模型,如果一个文件被打散分在不同磁盘,每一个磁盘都有一个磁头,那么我们就可以多个磁盘同时读取一个文件,读取完毕之后再合并在一起,我们这个说的只是单个文件的情况实际上,多个文件也适应,这种磁盘设计可以让多个文件同时读取,大大改善了读写等待时间。
 
inode:
既然一个文件的内容是被分块以后存入磁盘的那么,在系统中如何整合这些块呢?inode就此出场了,inode是一个结构体,包含了一个文件的权限,大小,是否为文件夹(文件夹也是一个文件下面会说明),连接数,以及含有的数据块号等信息,每一个inode结构体的大小是一样的,他们存储在固定的硬盘位置,而每一个inode又有一个号,操作系统就是通过这个号区分不同文件的。我们把存储inode的这段硬盘成为inode表,inode表的大小是固定的,很明显即时硬盘还有空间如果inode表被用光了那么也无法创建新的文件。
 
打开文件:
用户通过文件名代开文件系统实际做的事情是:根据文件名找到对应的inode号,通过inode号找到文件数据的block,然后再读取。
 
文件夹:
文件夹也是一个文件,里面记录了一个文件名和对应的inode号,文件夹的读写权限都是对文件名而言的,所以如果只有读权限,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)。
 
 
软硬连接:
多个文件名可以指向一个inode,每当一个文件名指向一个inode的时候inode的连接数就会加一(这种引用技术设计方式很常见奥),文件夹创立的时候会自动生成两个硬连接“.”和“..”一个是自己的硬连接,一个是上一级目录的。删除一个硬连接,引用计数也就是连接数就会减一,等连接数为0了那么系统就要回收这个inode了,哈哈是不是想到了php的变量回收机制,是的一个道理。
软连接就不同了,软连接不指向inode而是指向一个文件,也就是说软连接的内容就是另一个文件的路径,打开一个软连接就相当于打开那个目标文件,所以当目标文件删除后,访问软连接会报错的。
 
 
拾遗:
 
每一个block只能放一个文件的数据。(理解这个在编程的时候重要奥)
 
 
 
 
http://wxg6203.iteye.com/blog/745830
http://blog.csdn.net/yihaolovem/article/details/39118555
posted @ 2016-03-15 17:26  神不知鬼不晓  阅读(2151)  评论(0编辑  收藏  举报