今天看了一点Unix 文件系统,归纳了几点。
1,文件系统是memory 的一个抽象,是virtual memory 的上层。它方便了人和储存器的交互,人看的是文件的名字,而电脑看的是二进制的index。文件(file)本质是一串任意长度的二进制数,byte流。所以文件储存在块内。
首先将disk分成相等大小的块(block),每一个块都可以储存二进制编码,x86一个block的大小为512Byte, 现在有的为4k 。把所有的block排序,然后我们就可以用
block_number来找到相应的块。一般第0 block 是boot block(驱动引导块),第一块为super block (超块),记录free block,block size等文件系统的基本信息,然后的几个block里是inode table。
每一个block会储存好几个inode,每个inode 里又储存好几个6 byte的entry (两个byte存block number,四个存file name),这样通过inode 建立了一个文件名字file name和文件内容的映射,内容放在blcok里。
inode有好多,所以inode要排序,用inode index 来标识不同的inode。 (要查找一个文件),在此inode中按顺序对其中存在的文件名和你要找的文件比对,存在的话,对应的block number就是文件地址。
boot | super | inode table | .... | dirctory block | ... | data block |
这样的文件系统只能提供一级目录,inode-block,实际我们必然用到二级,三级甚至更多级的目录,所以它对这个问题的解决方法是增加一个inode 到inode的映射,dictory file (目录文件)是一种 特殊的 inode
这样文件系统建立一个全局变量表示当前目录(dirctory inode),根目录(root)用“/“表示。查一个文件/a/b/hellloworld.c,首先到找到根目录inode,按顺序查看blockx 里的a,找到a后 ,接着找到a对应的block number等等。