文件的结构及存取方法

2023-11-06

文件的组织形式是文件的结构,从不同的角度分析文件有不同的结构形式:逻辑结构和物理结构。从用户角度出发,研究文件的抽象组织方式而定义的文件组织形式为文件的逻辑结构;从系统的角度出发,研究文件的物理组织方式而定义的文件组织形式为文件的物理结构。文件的逻辑结构独立于辅存,帮助用户分析信息之间的关系及含义;而物理结构主要关注文件信息的存储形式,帮助用户了解与存储设备相关知识。

1、文件的逻辑结构

   文件的逻辑结构可以分为无结构的字符流式文件和有结构的记录式文件。

   1)无结构的字符流式文件

无结构的字符流式文件是相关的有序字符的集合。文件长度即为所含字符数。流式文件不分成记录,而是直接由一连串信息组成。对于流式文件而言,它是按信息的个数或以特殊字符为界进行存取的。常见的采用这种结构的有源程序文件和可执行文件。

无结构的字符流式文件的优点主要是空间利用上比较节省,因为没有额外的说明(如记录长度)和控制信息等;但应当注意的是文件信息的检索问题,即采用的逻辑结构应方便系统查找所需信息,减少信息存储的变动。

   2)有结构的记录式文件

文件的信息划分为多个记录,用户以记录为单位组织信息。记录是具有特定意义的信息单位,它包含记录在文件中的相对位置、记录名、记录的属性等信息组成。记录式文件中,每一个记录都有一项信息,用来唯一标识相应的记录,将各个记录区分开来,我们称这个信息为主键。一个记录中的任一数据项或若干数据项的组合均可作为记录键,除主键外的其他键成为次键。

有结构的记录式文件就是按照一定的结构来组织记录信息,按照记录的不同组织形式,常见的记录式文件可以分为连续结构和顺序结构。

1)连续结构:按照记录生成的先后顺序连续排列。

2)顺序结构:设定一种顺序规则,以记录的键为索引对象,按照设定的顺序规则将记录顺序排列起来。

    逻辑上的文件信息最终都要按照一定存取方法存储到物理设备中,文件系统按照什么方式将文件信息存储到存储设备中,这要与文件的逻辑结构和存取内容及目的相关。
1)顺序存取:按照文件的逻辑地址依次顺序存取。
2)随机存取:用户按照记录的编号进行存取,也称为直接存取或立即存取。这种方式下,根据存取命令把读、写指令直接移动到读/写处进行操作。
3)按键存取:根据给定记录的键进行存取。给定键后,首先搜索该键在记录中的位置,然后进一步搜索包含该键的记录,在含有该键的所有记录中查找所需记录,当搜索到所需记录的逻辑位置后,再将其转换到相应的物理地址进行存取。

2、文件的物理结构

   文件的物理结构是指文件在辅助存储器上存储的结构形式,其和文件的存取方法有密切关系。文件物理结构的优劣,直接影响到文件系统系统的性能。
   为了有效地分配存储器的空间,通常把它们分成若干块,并以块为单位进行分配和传递,每一个块称为物理块,而块中的信息称为物理记录。物理块长通常是固定的,在磁盘上经常以512B至8KB为一块。文件在逻辑上可以看成是连续的,但在物理介质上存放时可以有多种形式。目前常用的文件物理结构有顺序结构文件、链接结构文件、索引文件、Hash文件。
   1)顺序结构文件
把逻辑文件的信息顺序地存储到连续的物理盘块中,这样形成的文件称为顺序文件。这种文件保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序地一致性。
优点:
<1>管理简单:一旦知道文件存储的起始块号和文件块数,就可以立即找到所需的文件信息。
<2>顺序存取速度快:要获得一批相邻的记录时,其存取速度在所有文件物理结构中是最快的。
缺点:
<1>要求连续存储空间:如同内存的连续分配一样,可能形成许多存储空间的碎片。
<2>必须事先知道文件的长度,才能为该文件分配合适的连续存储空间。
   2)链接结构文件
链接结构的特点是使用指针(也称为链接字)来表示文件中各个记录之间的关联。在链接结构文件中,一个逻辑上连续
的文件,可以存放在不连续的存储块中,每个块之间用单向链表链接起来。为了使系统能方便地找到逻辑上连续的下
一块的物理位置,在每个物理块中设置一个指针,指向该文件的下一个物理块号,使得存放同一个文件的物理块链接
成一个队列,该结构为链接文件。
优点
<1>不要求为文件分配连续的存储空间,一定程度上解决了空间碎片问题,提高了存储空间利用率因为采用链表的
思想,文件中记录的增删工作比较容易实现
<2>因为采用链表的思想,文件中记录的增删工作比较容易实现
缺点:
<1>只适合于顺序存取,不便于直接存取,为了找到某个物理块的信息,必须从头开始,逐一查找每个物理块,直到找到为止,因此降低了查找速度。
<2>在每个物理块中都要设置一个指针,占去一定的存储空间
3)索引结构文件
索引文件是实现非连续存储的另一种办法,适用于数据记录保存在随机存取存储设备上的文件。这种结构的组织方式
要求为每一个文件建立一张索引表,其中每个表目指出文件逻辑记录所在的物理块号,索引表指针由FCB给出。
当文件很大时,索引表也将很大,需要占用多个盘块。管理多个盘块的索引表有两种方法:一是将存放索引表的盘块用
指针链接起来,称为链接索引。链接索引需要顺序地读取索引表各索引表项。因此,与链接文件相似,读取后面的索
引表项需进行多次磁盘I/O操作;另一种是采用多级索引,即为多个索引表再建立一个索引表(称为主索引表),形成二级
索引。如果二级索引的主索引表仍然不能存放在一个盘块中,就需要三级索引。
优点:
是链接结构的一种扩展,具有链接结构的优点,还克服了只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增加和删除,可以方便地进行随机存取。
缺点:
<1>增加了索引表的空间开销和查找时间,索引表的信息量甚至可能远远超过文件记录本身的信息量。
<2>在存取文件时首先查找索引表,增加了一次读盘操作,从而降低了文件访问的速度。都但是可以采取补救措施,例如在文件读取前,事先把索引表放在内存中,这样以后的文件访问可以直接在内存中查询索引表,以加快访问速度。
4)Hash文件
在直接存取设备上,文件的物理结构还有一种组织方式,即采用寻址结构。在这种方式中,把记录中的关键码通过
某种计算,转换为记录的相应地址。这种存储结构是通过指定记录在存储介质上的位置进行直接存取的,记录无所
谓次序。一般来说,用于地址的总数比可能的关键码总数要少得多,所以不会出现一一对应关系。那么就有可能存
在着不同的关键码计算后,得到了相同的地址,这种现象称为“地址冲突”。而这种通过对记录的关键码施加变换
而获得相应地址的变换方法,通常称为Hash方法,或称为散列法、杂凑法。利用Hash方法建立的文件结构称为。
Hash文件。这种物理结构适用于不宜采用连续结构,记录次序比较混乱,又需要快速存取的情况。例如,一个存取
学生信息的文件,将班级信息作为索引,凡班级相同的同学作为一个数据,这样建立的Hash表可以用来快速查找同
一班级学生的信息,加快了查询速度。
优点:
查找不需要做索引,可以快速地直接存取。
缺点:
当地址冲突发生时,需要有解决冲突的方法,这称为溢出处理技术,也是设计Hash文件需要考虑的主要内容。常用
的溢出处理技术有线性探测法、二次探测法、拉链法、独立溢出区法等。
3。文件的存取方式
1. 顺序存取
顺序存取是按照文件的逻辑地址顺序存取。

固定长记录的顺序存取是十分简单的。读操作总是读出上一次读出的文件的下一个记录,同时,自动让文件记录读指
针推进,以指向下一次要读出的记录位置。如果文件是可读可写的。再设置一个文件记录指针,它总指向下一次要写
入记录的存放位置,执行写操作时,将一个记录写到文件 末端。允许对这种文件进行前跳或后退N(整数)个记录的
操作。顺序存取主要用于磁带文件,但也适用于磁盘上的顺序文件。
 
可变长记录的顺序文件,每个记录的长度信息存放于记录前面一个单元中,它的存取操作分两步进行。读出时,根据
读指针值先读出存放记录长度的单元 。然后,得到当前记录长后再把当前记录一起写到指针指向的记录位置,同时,
调整写指针值 。

由于顺序文件是顺序存取的,可采用成组和分解操作来加速文件的输入输出。

  2. 直接存取(随机存取法)

很多应用场合要求以任意次序直接读写某个记录。例如,航空订票系统,把特定航班的所有信息用航班号作标识,存
放在某物理块中,用户预订某航班时,需要直接将该航班的信息取出。直接存取方法便适合于这类应用,它通常用于
磁盘文件。

为了实现直接存取,一个文件可以看作由顺序编号的物理块组成的,这些块常常划成等长,作为定位和存取的一个最
小单位,如一块为1024字节、4096字节,视系统和应用而定。于是用户可以请求读块22、然后,写块48,再读块9
等等。直接存取文件对读或写块的次序没有限制。用户提供给操作系统的是相对块号,它是相对于文件开始位置的一
个位移量,而绝对块号则由系统换算得到。

  3. 索引存取

   
第三种类型的存取是基于索引文件的索引存取方法。由于文件中的记录不按它在文件中的位置,而按它的记录键来
编址,所以,用户提供给操作系统记录键后就可查找到所需记录。

   通常记录按记录键的某种顺序存放,例如,按代表健的字母先后次序来排序。对于这种文件,除可采用按键存取外,
也可以采用顺序存取或直接存取的方法。信息块的地址都可以通过查找记录键而换算出。实际的系统中,大都采用多
级索引,以加速记录查找过程。
例题:文件的存取方法的性能依赖于()
文件的物理结构
文件的逻辑结构
存储设备的特性
A 和C
解答:D
参考文献:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件的结构及存取方法 的相关文章

  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • Tomcat7安装及配置教程

    Apache Tomcat7 0安装及配置教程 Apache Tomcat7 0官方网站链接 http tomcat apache org apache tomcat 7 0 73 windows x64 先解压下载的压缩包 然后在bin目
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • java调优总结

    JVM调优总结 序 几年前写过一篇关于JVM调优的文章 前段时间拿出来看了看 又添加了一些东西 突然发现 基础真的很重要 学习的过程是一个由表及里 再由里及表的过程 呵呵 所谓的 温故而知新 而真正能走完这个轮回的人 也就能称为大牛或专家了
  • unix环境高级编程——文件IO

    本期主题 unix环境高级编程 文件IO 文件IO 0 引言 1 文件描述符 2 IO编程中常用的API接口 1 open函数 2 close函数 3 read函数 4 write函数 5 lseek函数 3 函数sync fsync和fd
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • 虚拟机管理程序、虚拟化和云: 深入剖析 PowerVM 虚拟机管理程序

    预备知识 Power 是没有限制的虚拟化 一些企业打算依靠 PowerVM 虚拟化将多个工作负载整合到较少系统上 从而提高服务器利用率 降低成本 Power VM 为基于 Power Systems 平台的高级 RAS 功能和领先性能为 A
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • Elasticsearch 日志

    下载并安装 Filebeat 首次使用 Filebeat 请参阅入门指南 复制代码片段 curl L O https artifacts elastic co downloads beats filebeat filebeat 7 2 0
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R

随机推荐

  • 【源码篇】基于ssm+vue+微信小程序的医疗科普小程序

    系统介绍 这是一个ssm vue 微信小程序的医疗科普小程序 分为pc端和微信小程序端 pc端包括 管理员角色和学生角色 管理员拥有 学生管理 科普知识管理 论坛管理 收藏管理 试卷管理 留言板管理 试题管理 系统管理 考试管理 学生端拥有
  • keil中下载程序界面设置

    下午在调试DAU的时候忽然出现internal command error的情况 以往是将下载器重新上电或编译器重启既可 但是今天这一招怎么也不灵光了 换一个硬件可以正常下载 不死心 试着修改下载器选项 当Connect选择为Under R
  • 游戏UI特效教程 章鱼学院UI动效基础课(68课)

    本文包含两大单元 展示类动效原型单元 可交互动效原型单元 在展示类动效单元中 我们会着重利用AE这款软件 由浅入深的 对三个案例进行学习并制作 通过学习这个单元的知识 大家可以掌握UI动效中 AE基本的使用技巧 并在带领下完成三个案例 通过
  • ts 移动端h5 拍照预览

    通过typescript实现一个简单版本 移动端 拍照 和预览功能 1 需求列表 点击拍照唤起手机后置摄像头 拍照完成在页面预览照片 2 技术实现 2 1 布局和唤起后置摄像头 唤起摄像头采用 input 里面 type file 类型 为
  • Shell脚本攻略:文本三剑客之sed

    目录 一 理论 1 sed 二 实验 1 sed命令的寻址打印 2 显示奇偶 3 查找替换 4 后向引用 5 截取版本号 6 替换IP地址 一 理论 1 sed 1 概念 sed 英文全称为stream editor流式编辑器 sed 对输
  • neo4j学习笔记

    文章目录 neo4j note 一 概述 1 链接 2 介绍 数据模型 二 使用 1 环境搭建 2 CQL 1 创建 Create 2 查询Match 3 Return 4 关系基础 创建 1 现有节点之间创建无属性的关系 2 现有节点之间
  • 哈夫曼树构造哈夫曼编码

    在传输文字时 经常要将文字转换成二进制字符串 所以我们希望编码最短 但是又想保证它的唯一性 哈夫曼树具有最小带权路径长度 用来实现编码就可以编码最短 所以用哈夫曼树来构造编码 而前缀编码就可以保证在解码的时候不会出现多种可能 就实现了唯一性
  • 第二章。c#变量和数据输入

    1 C 中常见的数据类型 1 整型 整数类型 表示整数 比如年 月 日 年龄等都是整数 整型的关键字 int 最常用的 short long 2浮点型 带小数点的数 比如身高 米 体重 100 5kg 等都是浮点数 浮点型分成两种 1 单精
  • quartz对于定时任务Misfire的处理

    使用quartz过程中 产生了很多问题 遇到就记录一下 虽然用的比较少了 但还是有一些项目在使用 问题描述 创建一个每天执行的任务test1 创建自动运行状态 然后停止任务 一直等到当天定时时间过去 然后再启动 发现定时任务还是先执行了一次
  • 在Bios中开启虚拟化设置

    1 进入BIOS 开机时按baiF2或F12或DEL或ESC等键 各电脑有所不同 2 进入duBIOS后 找到Configuration选项 选zhi择Intel Virtual Technology并回车 将光标dao移至Enabled
  • C++使用模板实现元素的反序

    实现任意类型序列中元素的反序 所涉知识点 示例代码 开发环境 运行结果 注意 所涉知识点 阅读此文需要掌握的知识点 回调函数 模板类 类模板 栈 示例代码 这里直接上代码 pragma once include
  • Qt中的并发

    QThread是一个低级 low level 类 适合用于显式地构建长期运行的线程 QtConcurrent是一个命名空间 提供了用于编写并发软件的更高层次的类和算法 该命名空间中有一个重要的类 QThreadPool 这是一个管理线程池的
  • [第四届-强网杯]:Funhash

  • C#的基本知识

    1 static修饰符 本页介绍 static 修饰符关键字 static 关键字也是 using static 指令的一部分 使用 static 修饰符可声明属于类型本身而不是属于特定对象的静态成员 static 修饰符可用于声明 sta
  • Spring中事务几个常见的问题

    首先 事务这个概念是数据库层面的 Spring只是基于数据库中的事务进行扩展 以及提供了一些能让程序员更新方便操作事务的方式 Spring如何处理事务 Spring中支持编程式事务和声明式事务管理两种方式 1 编程式事务 可以使用Trans
  • 一天内Boss转发5k次,「高性能Java:核心原理案例实战」已被封杀

    前言 市面上讲Java框架的书很多 包括SpingBoot SpringCloud Kafka等 但这些书通常只会让你技术的 量 增长 而 质 仍处于SSM的阶段 而且互联网上并没有体系化 结构化的提升技术的 质 的教材 于是团长行动了起来
  • ubuntu环境下编译内核详解

    一 下载源代码和编译软件的准备 下载内核源代码 http www kernel org 注意 点击2 6 25内核的F版 即完整版 如果你懒得去网站点联接 运行下列命令 代码 cd wget http www kernel org pub
  • c语言代码中调用系统命令行.sh shell脚本,linux shell system传参

    C语言代码中调用命令行 1 使用system 命令行 执行完命令行后 会返回原先C代码的位置 继续执行 2 如果命令行中需要传参 使用 sprintf 先处理好命令行的内容 再 system system echo 123 int a 3
  • C/C++基本数据类型所占字节数

    关于这个基本的问题 很早以前就很清楚了 C标准中并没有具体给出规定那个基本类型应该是多少字节数 而且这个也与机器 OS 编译器有关 比如同样是在32bits的操作系统系 VC 的编译器下int类型为占4个字节 而tuborC下则是2个字节
  • 文件的结构及存取方法

    文件的组织形式是文件的结构 从不同的角度分析文件有不同的结构形式 逻辑结构和物理结构 从用户角度出发 研究文件的抽象组织方式而定义的文件组织形式为文件的逻辑结构 从系统的角度出发 研究文件的物理组织方式而定义的文件组织形式为文件的物理结构