UNIX索引技术访问文件初阶
背景:
软考里面,多次碰到一道题:
过程
以前对于这样的题,仅仅知道:
在文件系统中,文件的存储设备通常划分为若干个大小相等的物理块,每块长为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索引技术访问文件初阶的更多相关文章
- R语言实战(一)介绍、数据集与图形初阶
本文对应<R语言实战>前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用. 第1章 R语言介绍 获取帮助函数 help(), ? 查看函数帮助 exampl ...
- Indri中的动态文档索引技术
Indri中的动态文档索引技术 戴维 译 摘要: Indri 动态文档索引的实现技术,支持在更新索引的同时处理用户在线查询请求. 文本搜索引擎曾被设计为针对固定的文档集合进行查询,对不少应用来说,这种 ...
- Nodejs初阶之express
PS: 2014/09/24 更新<Express 4.X 启航指南>,欢迎阅读和评论:) 老规矩,开头部分都是些自娱自乐的随想,想到哪写到哪... 到今天俺已经在俺厂工作俩年零几天了 ...
- Oracle索引技术研究
Oracle索引类型 B树索引 特定类型索引 确定索引列 主键和唯一键值列的索引 外键索引 其他合适的索引列 B树索引 B树索引算法 B树是指B-tree(Balanced Tree),B树的存在是为 ...
- Atitit 索引技术--位图索引
Atitit 索引技术--位图索引 索引在数据结构上可以分为三种B树索引.位图索引和散列索引 存储原理 编辑 位图索引对数据表的列的每一个键值分别存储为一个位图,Oracle对于不同的版本,不同的操作 ...
- Windows Server 2008 R2 添加且制成“NFS服务器”角色后与Unix客户端匿名访问常见问题
在复杂的主机与网络环境中,我们可能会接触到多种主机与操作系统,配合Windows Server 2008 R2的原生“NFS服务器”功能可以让这样的复杂操作系统更方便应用. 然而面对网络上众多的帮助指 ...
- Java IO详解(六)------随机访问文件流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java I/O---RandomAccessFile类(随机访问文件的读取和写入)
1.JDK API中RandomAccessFile类的描述 此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引 ...
- Java开发笔记(八十七)随机访问文件的读写
前面介绍了字符流读写文件的两种方式,包括文件字符流和缓存字符流,但是它们的写操作都存在一个问题:不管是write方法还是append方法,都只能从文件开头写入,而不能追加到文件末尾或者在文件中间某个位 ...
随机推荐
- Unity3d 怪物死亡燃烧掉效果
效果 BurnToFadeOut.shader代码 Shader "BurnToFadeOut" { Properties { _StartColor ("Start C ...
- /etc/securetty文件
/etc/securetty 文件允许你规定“root”用户可以从哪个tty设备登录. 登录程序(通常是/bin/login)需要读取“/etc/securetty”文件. 它的格式:列出来的tty设 ...
- nginx服务器设置url的优雅链接
对于LNMP这样架构的网站来说,一般都是基于php框架开发,php框架一般都会讲究优雅链接,比如Laravel,CodeIgniter,ThinkPHP等都是支持这种链接模式的,在服务器配置上也叫作u ...
- codeforces 591A. Wizards' Duel 解题报告
题目链接:http://codeforces.com/problemset/problem/591/A 题目意思:其实看下面这幅图就知道题意了,就是Harry 和 He-Who-Must-Not-Be ...
- TFS强制解除签入签出锁定
首先你要知道你服务器的用户名和登录密码 看被别人签出了的文件
- 好用的php类库和方法
1, /** * 将一个平面的二维数组按照指定的字段转换为树状结构 * * 用法: * @code php * $rows = array( * array('id' => 1, 'value' ...
- [USACO07MAR]黄金阵容均衡Gold Balanced L…(洛谷 1360)
题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to na ...
- maximum subarray problem
In computer science, the maximum subarray problem is the task of finding the contiguous subarray wit ...
- Codeforces Round #327 (Div. 2)B(逻辑)
B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- NYOJ题目170网络的可靠性
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs8AAANvCAIAAACte6C6AAAgAElEQVR4nOydPbLcNhOu7yaUayGOZy