背景:
软考里面,屡次碰到一道题:数组
过程
之前对于这样的题,仅仅知道:在文件系统中,文件的存储设备一般划分为若干个大小相等的物理块,每块长为 512 或 1024 字节。文件的理结构是指文件在存储设备上的存储方法,经常使用的文件物理结构有:连续文件、串联文件和索引文件三种。
(1) 连续文件 ( 顺序文件 ) 连续文件是一种最简单的物理文件结构,它把一个在逻辑上连续的文件信息依次存放到物理块中。连续文件的优势是一旦知道文件在文件存储设备上的起始位置和文件长度,就能进行存取。连续文件适合于顺序存取,在连续存取相邻信息时,存取速度快。其缺点是在文件创建时需指定文件的信息长度,之后不能动态增加,通常不宜于须要常常修改的文件。
(2) 串联文件 ( 连接文件 ) 串联文件用非连续的物理块来存放文件信息,这些物理块之间没有顺序关系,其中每一个物理块设有一个指针,指向下一个物理块的地址,这样全部的物理块都被连接起来,造成一个连接队列。串联文件的优势是能够解决存储器的碎片问题,提升存储空间利用率。因为串联文件只能按照队列中的连接指针顺序查找,所以搜索效率低,通常只适用于顺序访问,不适用于随机存取。
(3) 索引文件索引文件是另外一种对文件存储不连续分配的方法。为每一个文件创建一张索引表,索引表中的每一表项指出文件信息所在的逻辑块号和与之对应的物理块号。索引文件既能够知足文件动态增加的要求;又能够方便而迅速地实现随机存取。
对一些大的文件,当索引表的大小超过一个物理块时,会发生索引表的分配问题。通常采用多级 ( 间接索引 ) 技术,这时在由索引表指出的物理块中存放的不是文件住处而是存放文件信息的物理块地址。这样,若是一个物理块能存储 n 个地址,则采用一级间接索引,将使可寻址的文件长度变成 n2 块,对于更大的文件能够采用二级甚至三级间接索引 ( 例如, Unix 操做系统采用三级索引结构 ) 。
索引文件的优势是既适用于顺序存取,又适用于随机存取。缺点是索引表增长了存储空间的开销。另外,在存取文件时须要访问两次磁盘,一次是访问索引表,另外一次是根据索引表提供的物理块号访问文件信息。为了提升效率,一种改进的方法是,在对某个文件进行操做以前,预先把索引表调入内存。这样,文件的存取就能直接从在内存的索引表中肯定相应的物理块号,从而只须要访问一次磁盘。
学习
在 Unix 系统中,文件的物理结构采用索引方式。定义有一个索引节点字符数组,该字符数组最多能够放下 13 个地址项,而且规定
地址项 0-9 采用直接寻址方法,
地址项 10 采用一级间接寻址,
地址项 11 采用二级间接寻址,
地址项 12 采用三级间接寻址。
先进行简单的换算, 11264/1024 大约是 11KB 。因为地址项 0-9 可直接寻址 10 个物理盘块,由于每一个物理块的大小为 1KB ,因此当访问文件的前 10KB 范围的数据时是直接寻址。地址项 10 采用一次间接寻址,即地址项 10 里存放的是一级索引表的地址,由于每一个盘块号占 4 个字节,因此,该索引表可存放 1024/4=256 个物理块的地址,因此当访问文件的 10-266KB 之间的数据时是一次间接寻址。
但是若是要访问的数据是 320KB ,因此还有 320-266=54KB 。显然,地址项 11 足够存取这些数据,因此,最多就在地址项 11 而无须存取地址项 12 ,即只须要二次间接寻址
但是若是要访问的数据是 65804KB ,因此还有 62802-10-256-256^2=2 。因此,地址项 11 不够,因此要存在地址项 12 中,即只须要三次间接寻址。
总结:
UNIX/Linux文件系统中,一个盘块的大小为1KB,每一个盘块号占4个字节,即每块可放256个地址。直接寻址为10块,一次间接寻址为256块,二次间接寻址为256*256块,三次间接寻址为256*256*256块。