背景:

软考里面,多次碰到一道题:

过程

以前对于这样的题,仅仅知道:

在文件系统中,文件的存储设备通常划分为若干个大小相等的物理块,每块长为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块。

UNIX索引技术访问文件初阶的更多相关文章

  1. R语言实战(一)介绍、数据集与图形初阶

    本文对应<R语言实战>前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用. 第1章       R语言介绍 获取帮助函数 help(), ? 查看函数帮助 exampl ...

  2. Indri中的动态文档索引技术

    Indri中的动态文档索引技术 戴维 译 摘要: Indri 动态文档索引的实现技术,支持在更新索引的同时处理用户在线查询请求. 文本搜索引擎曾被设计为针对固定的文档集合进行查询,对不少应用来说,这种 ...

  3. Nodejs初阶之express

    PS: 2014/09/24 更新<Express 4.X 启航指南>,欢迎阅读和评论:)   老规矩,开头部分都是些自娱自乐的随想,想到哪写到哪... 到今天俺已经在俺厂工作俩年零几天了 ...

  4. Oracle索引技术研究

    Oracle索引类型 B树索引 特定类型索引 确定索引列 主键和唯一键值列的索引 外键索引 其他合适的索引列 B树索引 B树索引算法 B树是指B-tree(Balanced Tree),B树的存在是为 ...

  5. Atitit 索引技术--位图索引

    Atitit 索引技术--位图索引 索引在数据结构上可以分为三种B树索引.位图索引和散列索引 存储原理 编辑 位图索引对数据表的列的每一个键值分别存储为一个位图,Oracle对于不同的版本,不同的操作 ...

  6. Windows Server 2008 R2 添加且制成“NFS服务器”角色后与Unix客户端匿名访问常见问题

    在复杂的主机与网络环境中,我们可能会接触到多种主机与操作系统,配合Windows Server 2008 R2的原生“NFS服务器”功能可以让这样的复杂操作系统更方便应用. 然而面对网络上众多的帮助指 ...

  7. Java IO详解(六)------随机访问文件流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  8. Java I/O---RandomAccessFile类(随机访问文件的读取和写入)

    1.JDK API中RandomAccessFile类的描述 此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引 ...

  9. Java开发笔记(八十七)随机访问文件的读写

    前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位 ...

随机推荐

  1. hdu4117

    题意:给出一串单词,每个有一个权值.顺序不变的情况下,删掉一些,使得相邻两单词,前一个是后一个的子串.同时要求使得剩余单词权值和最大.求最大是多少. 分析: AC自动机+线段树+DP. 这是一个比较复 ...

  2. Java for LintCode 颠倒整数

    将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数). 解题思路: JAVA实现如下: public int reverseInteger(int n) { Boole ...

  3. java视频转码博客

    一下为找到的资料地址 http://lichen.blog.51cto.com/697816/162124 http://www.cnblogs.com/live365wang/archive/201 ...

  4. 数据结构-链表实现删除全部特定元素x

    链表节点类定义: template <class T> class SingleList; template <class T> class Node { private: T ...

  5. C#传真传址 结构体

    1.传真  传址 namespace 传值_传址 { class Program { //格式1:无参无返 public void LeiJia() { Console.Write("请输入 ...

  6. func 和 actin 委托的区别

    一.[action<>]指定那些只有输入参数,没有返回值的委托 1.1定义一个委托: 比如,我们原来写委托: public delegate void myDelegate(string  ...

  7. google关于ssh key的解释(转)转的google的wiki的

    SSH keys (简体中文)     SSH 密钥对可以让您方便的登录到 SSH 服务器,而无需输入密码.由于您无需发送您的密码到网络中,SSH 密钥对被认为是更加安全的方式.再加上使用密码短语 ( ...

  8. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)(set容器里count函数以及加强for循环)

    题目链接:http://codeforces.com/contest/722/problem/D 1 #include <bits/stdc++.h> #include <iostr ...

  9. smarty汇总

    Smarty:模板技术 实现功能:前后分离. 原理:主要通过Smarty核心类实现,调用display方法,将模板文件读取,用正则进行替换,替换完保存到临时文 件,将临时文件加载到当前页面. 配置文件 ...

  10. Delphi面向对象的可见性表示符

    Delphi能通过在声明域和方法的时候用protected.private.public.published和automated指示符来对对象提供进一步的控制.使用这些关键字的语法如下 TSomeOb ...