做网站低价,有哪些推广平台,html制作音乐网站代码,网络营销是网上销售吗在上一篇基础IO中我们主要讲述了文件再磁盘中的存储#xff0c;当然我们说的也都只是预备知识#xff0c;为这一篇的文件系统进行铺垫。  目录 搭文件系统的架子#xff1a;填补细节#xff1a;inode#xff1a;datablock[]: 更上层的理解#xff1a; 搭文件系统的架子当然我们说的也都只是预备知识为这一篇的文件系统进行铺垫。  目录 搭文件系统的架子填补细节inodedatablock[]: 更上层的理解 搭文件系统的架子 我们在开始之前还要有一个补充细节 我们说过文件  内容  属性 而他们本质上都是数据。 
那么内容的数据与属性的数据是在一起存放嘛 不同的文件系统有不同的规则在linux下是分开存放 
现在我们只要知道每个组内有什么即可。 那我们就先来看存放内容数据的地方 
数据区Data blocks存放文件内容 
我们在图中展示的的比例大小只是为了好形象的写出各个区域但实际上数据区占据了90以上的大小  块位图Block BitmapBlock Bitmap中记录着Data Block中哪个数据块已经被占用哪个数据块没有被占用 
比特位的位置表示当前块号1与0代表当前是否被占用。 我们说过内容与属性是分开存放的那么属性存放在哪里 
i节点表inode Table:存放文件属性 如 文件大小所有者最近修改时间等 
struct inode
{size_t size;mode_t mode;int creater;...int inode_number;...int datablocks[N];
}注意 此结构体大小为128字节 
同时我们要说明一点inode内部没有文件名那么我们怎样标识一个文件呢使用inode_number进行标识。 
也就是下图中的最左方数字  
那么文件的内容与属性如何连接起来呢 使用datablock这个数组进行连接。 数组中的数字是data blocks的位置。 既然datablock有bitmapinode也肯定要有一个bitmap用来管理inode。 
inode位图inode Bitmap每个bit表示一个inode是否空闲可用。 Block Groupext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。 
这个block group里存着这个组的相关管理数据例如还有多少空的data block 有多少空的inode_number组的起始块结束块位置… 超级块与block group的作用是类似的 
超级块Super Block存放文件系统本身的结构信息。记录的信息主要有bolck 和 inode的总量未使用的block和inode的数量一个block和inode的大小最近一次挂载的时间最近一次写入数据的时间最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏可以说整个文件系统结构就被破坏了 
但并不是每个组都有一个SB而是每隔几个就会有一个SB这样既可以防止磁盘刮花也不必占用太多的空间存储。 以上也就是我们磁盘级的文件系统 我们的格式化也就是在每一个分区内分组再写入文件系统的过程 填补细节 
inode 
我们说过inode_number是标识磁盘文件的标识符但有个前提是在当前分区是唯一的也就是说我们inode编号是以分区为单位的在不同分区内可能会出现相同的inode编号。 
在组内进行更详细的划分 比如我们现在在当前分区有一个inode为10010的编号怎么找到对应的属性与数据 我们使用inode编号与[0, 10000], [10001. 20000]…进行对比发现是在1号从0号位下标开始分组内。于是我们便使用10010 - 10001  9使用9在inode bitmap中寻找观察此inode编号是否合法合法后在inode table中 找到该属性最后再通过datablock[]进而找到内容的存放位置。  
datablock[]: 
我们在前边说过inode结构体大小为128字节那么datablock能占多少呢 一般我们使用ext2这个文件系统进行讲解linux也有ext3,4等在2中有15个元素那么一个文件只能存60KB 前12个元素确实如此但是第13,14个元素并不是单纯的映射15个更是重量级。  图只是形象实际肯定更复杂 
我们现在只是想输出一个结论 我们是有能力存大文件的甚至跨组但是不建议因为这样磁头与盘片又会旋转重新寻址造成效率低下 
更上层的理解 
问题来了我们在上层使用的都是文件名啊可是系统都是用inode编号进行标识那么怎么进行联系呢 
那我们就不得不谈一谈目录了目录也是文件。 
目录  内容  属性 属性 不管是什么文件可执行目录还是普通文件都是一样的结构体只是内容不同 那目录的内容里是什么呢 是文件名与inode编号的映射关系所以我们在上层不用inode编号使用文件名即可对文件进行各种操作。 
结论 
所以同一目录下不能存在相同文件名。查找文件的顺序先使用文件名找到inode编号。 
… 明天就更新完毕今天快熄灯了