论坛: 编程破解 标题: 文件系统(一) 复制本贴地址    
作者: cimsxiyang [cimsxiyang]    版主   登录
文件系统
文件:具有一定名称的一组相关数据的集合
文件命名:可是理解为是一表识。有了它,user不必去关心file的特定的细节,如物理位置等。
文件结构:文件的数据和文件的属性
    文件的数据大家都清楚,文件的属性如下:
     1.文件名称
     2.文件的内部表识
     3.文件的物理位置
     4.文件的拥有者
     5.文件的权限
     6.文件的类型
     7.文件的长度
     8.文件的时间
文件分类
   按照用途分:系统文件,库文件(动态连接库,静态连接库),用户文件
   按照性质分:普通文件,目录文件,特殊文件
   按照保护级别分:r,w,x,等
   按照数据形式分:源文件,目标文件,可执行文件
文件存取
   顺序访问,随机访问,索引访问
文件操作
   对文件自身操作(open,close,read,write….)
   对记录的操作(delete,find ,insert…..)
   这里澄清二个概念:
    删除:先清空该记录的目录项(记录了文件属性),释放空间。是创建文件的逆过程
    截断:将文件的长度设为0。
文件结构
    指文件的组织形式:逻辑结构,物理结构(存储结构)
文件实现:
空间分配策略
     连续空间分配
     链接空间分配
     索引空间分配
     组合空间分配
    前三种都比较简单,我们来看一下组合空间分配(广泛用于unix)
    
这里涉及到一个概念I节点(inode),i节点用来描述一个文件的物理位置,他包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录项包括文件名和文件的i节点数目。 i节点包括几个数据块的数目,用于存储文件的数据。 i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。I节点共有15个指针可以用来分配,前12个指向可以直接access的block,
最后三个指针有点特殊,一般用不到,是指向间接块的。
为了提高文件的操作的速度等,unix使用了缓冲的概念,系统还将磁盘上的inode读进内存。
需要特别指出的是文件存在多重链接. 
     


空闲空间的管理
文件系统必须随时掌握磁盘空闲空间的情况,因为要实现删除文件后得到的空闲空间    的再分配。
方法:
1. 空间块位示图
由位图和位矢量来实现,每个block由1位来表示,如果该bolck,则该位为1,否则为0  。优点:简单,寻找n个连续的空间块很高效,缺点:耗内存
2. 空间块链表
通过链表指针将空闲块连接在一起
优点:消耗内存小
缺点:遍列效率低
………..
目录
上面已经多次提到目录,目录最基本的功能就是通过文件名可以快速方便的获取文件的信息(上面所说的文件属性)
图(目录和索引节点之间的关系):


目录是一个列表文件名,其他文件的相关节点号以及目录名的文件集合。每个文件有单一的信息节点,一个目录实际上也是一张表,每个目录输入项由文件名和信息节点号组成,信息节点号是节点表的偏移量。目录项构成:文件名,索引节点号,文件名长度,目录项长度。
从这个图我们也可以看出,文件是可以有多重连接的,举个例子:假如我的姓名叫A,那么
大家叫A是指我,叫夕阳也是指我,或者同事叫小A,也是指我。
图(目录项布局)
  
   目录项内容包括索引节点编号, 目录项名称长度以及名称本身
    在上图中i1就是索引节点号,15是目录项的长度,file是名称。
图(文件的定位)

该图讲述的是系统怎样一步一步的定位/usr/WeiYM/nbox的。
这里补充一下:对于绝对路径:根目录----路径名的下一个分量的inode----block
              对于相对路径:当前目录中寻找下一个分量的inode--------block
目录结构
    单级目录。
      优点:简单。:)
      缺点:文件不可以重名(因为是一个目录),查找速度慢。
    二级目录
     多用户的情况下,把用户作为第一级目录,这样对同一个用户来说,文件仍然不可以重名。
    多级层次目录
    二级目录的推广,解决了文件重名的缺陷,但是,却不直接支持实现文件or目录的共享。
    无环结构目录
      多级目录的推广,解决了文件共享问题,但是实现比较困难。为什么?大家可以想想,这样一来,一个文件不是有多个绝对路径了吗?那么,我想delete这个文件不就要把所有的链接都被删除时,文件才会真正的删除掉了吗?问题还不止这些。譬如说,不可以出现环。等等…….有兴趣者可以自己专门研究一下。
   图状目录结构
       是在无环的基础上形成的。此结构实现目录的遍列and删除时也有可能出现问题,当然可以通过一些措施来解决,如:垃圾收集的机制来解决delete的问题。
目录的操作(unix)
    目录创建:在外部存储介质中创建一个目录文件以备存取文件属性的信息。
    目录删除:只有目录为空时,才能将其删除。
    目录检索:find顺序:文件名------得到文件属性-------得到物理位置----(可选项)启动磁盘驱动-------将所需要的文件读入memory
    目录打开:if 目录不在memory中 then 从外存中open,并且读入相应的目录文件。
    目录关闭:while 目录使用结束,关闭目录to释放内存空间。
目录的实现
     线形表算法
         简单,可是很消耗时间,系统的开销比较大。
     hash表算法
         目录项存储在一个HASH表中,进行目录find时,由目录名计算出一个hash值,然后得到一个指向表中文件的指针。Unix使用。
     B+树算法(NTFS采用)
呵呵,到现在还没有说文件系统的概念
   文件系统的概念:操作系统用于明确磁盘或分区上的文件的方法和数据结构
看完了上面的分析和基础知识,理解文件系统好一点了吗?
文件系统里面还有很多的东西,譬如说,虚拟文件系统(VFS),各种文件系统(FAT12,FAT16,FAT32,NTFS,EXT2,等),安全性,可恢复性,等。当然还有具体的算法描述,我正在写。。。
欢迎大家给出意见。



地主 发表时间: 05/05 17:53

回复: zby_cool [zby_cool]   论坛用户   登录
啊,很不错哦!有没有第二篇啦……

B1层 发表时间: 05/05 20:23

回复: cimsxiyang [cimsxiyang]   版主   登录
第二篇我正在写,估计明白能出来,请大家见谅!

B2层 发表时间: 05/05 20:30

回复: top [top]   论坛用户   登录
没什么列子!

才菜不好理解!

B3层 发表时间: 05/10 08:26

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号