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

相关文章

python协程实现高并发的技术详解

《python协程实现高并发的技术详解》协程是实现高并发的一种非常高效的方式,特别适合处理大量I/O操作的场景,本文我们将简单介绍python协程实现高并发的相关方法,需要的小伙伴可以了解下... 目录核心概念与简单示例高并发实践:网络请求协程如何实现高并发:核心技术协作式多任务与事件循环非阻塞I/O与连接

Elasticsearch 的索引管理与映射配置实战指南

《Elasticsearch的索引管理与映射配置实战指南》在本文中,我们深入探讨了Elasticsearch中索引与映射的基本概念及其重要性,通过详细的操作示例,我们了解了如何创建、更新和删除索引,... 目录一、索引操作(一)创建索引(二)删除索引(三)关闭索引(四)打开索引(五)索引别名二、映射操作(一

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

linux ssh如何实现增加访问端口

《linuxssh如何实现增加访问端口》Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改... 目录1. 修改 SSH 配置文件2. 增加或修改端口3. 保存并退出编辑器4. 更新防火墙规则使用uf

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2