UNIX索引技术访问文件初阶

2024-08-26 18:32
文章标签 访问 技术 初阶 索引 unix

本文主要是介绍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索引技术访问文件初阶的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109340

相关文章

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Nginx 访问 /root/下 403 Forbidden问题解决

《Nginx访问/root/下403Forbidden问题解决》在使用Nginx作为Web服务器时,可能会遇到403Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Ng

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失