一、文件的逻辑结构

  • 类似于数据结构的“逻辑结构”和“物理结构”。
    ①、如“线性表”就是一种逻辑结构,在用户角度看来,线性表就是一组有先后关系的元素序列,如:a,b, c, d, e ……
    ②、“线性表”这种逻辑结构可以用不同的物理结构实现,如:顺序表/链表。顺序表的各个元素在逻辑上相邻,在物理上也相邻;而链表的各个元素在物理上可以是不相邻的。因此,顺序表可以实现“随机访问”,而“链表”无法实现随机访问。
    ③、可见,算法的具体实现与逻辑结构、物理结构都有关(文件也一样,文件操作的具体实现与文件的逻辑结构、物理结构都有关)

(二)无结构文件

  • 按文件是否有结构分类,可以分为无结构文件、有结构文件两种。
  • 无结构文件 :文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows 操作系统中的 .txt 文件。
  • 文件内部的数据其实就是一系列字符流,没有明显的结构特性。

(三)有结构文件

  • 有结构文件 :由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)
  • 根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录可变长记录两种。

1. 顺序文件

  • 顺序文件 :文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储链式存储

2. 索引文件

3. 索引顺序文件

(1)索引顺序文件(检索效率分析)

  • 若一个顺序文件有10000个记录,则根据关键字检索文件,只能从头开始顺序查找(这里指的并不是定长记录、顺序结构 的顺序文件),平均须查找 5000 个记录
  • 若采用索引顺序文件结构,可把 10000 个记录分为 √10000 = 100 组,每组 100 个记录。则需要先顺序查找索引表找到分组(共100个分组,因此索引表长度为 100,平均需要查 50 次),找到分组后,再在分组中顺序查找记录(每个分组100 个记录,因此平均需要查 50 次)。可见,采用索引顺序文件结构后,平均查找次数减少为 50+50 = 100 次
  • 同理,若文件共有 106个记录,则可分为 1000 个分组,每个分组 1000 个记录。根据关键字检索一个记录平均需要查找 500+500 = 1000 次。这个查找次数依然很多,如何解决呢?

(2)多级索引顺序文件

  • 为了进一步提高检索效率,可以为顺序文件建立多级索引表。例如,对于一个含 106个记录的文件,可先为该文件建立一张低级索引表,每 100 个记录为一组,故低级索引表中共有 10000 个表项(即10000个定记录),再把这 10000 个定长记录分组,每组100个,为其建立顶级索引表,故顶级索引表中共有 100 个表项。

二、文件目录

(一)文件控制块

  • 当我们双击“照片”后,操作系统会在这个目录表中找到关键字“照片”对应的目录项(也就是记录),然后从外存中将“照片”目录的信息读入内存,于是,“照片”目录中的内容就可以显示出来了。
  • FCB 的有序集合称为“文件目录”,一个FCB就是一个文件目录项
  • FCB 中包含了文件的基本信息文件名物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。
  • 最重要,最基本的还是 文件名、文件存放的物理地址。FCB 实现了文件名和文件之间的映射。使用户(用户程序)可以实现“按名存取”
  • 需要对目录进行哪些操作?
    ①、搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
    ②、创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
    ③、删除文件:当删除一个文件时,需要在目录中删除相应的目录项
    ④、显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
    ⑤、修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)

(二)目录结构

1. 单级目录结构

  • 早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项。

2. 两级目录结构

  • 早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User Flie Directory)。

3. 多级目录结构(又称树形目录结构)

  • 用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。从根目录出发的路径称为绝对路径
  • 例如:自拍.jpg 的绝对路径是 “/照片/2015-08/自拍.jpg
  • 系统根据绝对路径一层一层地找到下一级目录。刚开始从外存读入根目录的目录表;找到“照片”目录的存放位置后,从外存读入对应的目录表;再找到“2015-08”目录的存放位置,再从外存读入对应目录表;最后才找到文件“自拍.jpg”的存放位置。整个过程需要3次读磁盘I/O操作
  • 很多时候,用户会连续访问同一目录内的多个文件(比如:接连查看“2015-08”目录内的多个照片文件),显然,每次都从根目录开始查找,是很低效的。因此可以设置一个“当前目录”。
  • 例如,此时已经打开了“照片”的目录文件,也就是说,这张目录表已调入内存,那么可以把它设置为“当前目录”。当用户想要访问某个文件时,可以使用从当前目录出发的“相对路径” 。
  • 在 Linux 中,“.”表示当前目录,因此如果“照片”是当前目录,则”自拍.jpg”的相对路径为:“./2015-08/自拍.jpg”。从当前路径出发,只需要查询内存中的“照片”目录表,即可知道”2015-08”目录表的存放位置,从外存调入该目录,即可知道“自拍.jpg”存放的位置了。
  • 可见,引入“当前目录”和“相对路径”后,磁盘I/O的次数减少了。这就提升了访问文件的效率。
  • 树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构

4. 无环图目录结构

  • 可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。
  • 需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点。
  • 只有共享计数器减为0时,才删除结点。
  • 注意:共享文件不同于复制文件。在 共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。

(三)索引结点(FCB的改进)

  • 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
  • 存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
  • 相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等

操作系统文件的逻辑结构及其文件目录相关推荐

  1. linux系统文件的复制,linux操作系统文件复制操作

    <linux操作系统文件复制操作>由会员分享,可在线阅读,更多相关<linux操作系统文件复制操作(5页珍藏版)>请在人人文库网上搜索. 1.网络操作系统"课程实验报 ...

  2. java 写一个quot;HelloJavaWorld你好世界quot;输出到操作系统文件Hello.txt文件中

    package com.beiwo.homework;import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  3. win7 隐藏受保护的操作系统文件 消失

    检查注册表中以下键值: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Su ...

  4. Java IO练习--在程序中写一个“HelloJavaWorld你好世界“输出到操作系统文件Hello.txt文件中

    package com.kj.test;import cn.hutool.core.io.IoUtil;import java.io.File; import java.io.FileOutputSt ...

  5. java 写一个HelloJavaWorld你好世界输出到操作系统文件Hello.txt文件中

    package com.beiwo.homework;import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  6. 在程序中写一个“HelloJavaWorld你好世界“输出到操作系统文件Hello.txt文件中

    import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOExce ...

  7. 隐藏受保护的操作系统文件 变为单选框的恢复

    部门某台电脑感染病毒后,病毒为了隐藏自身,把文件夹选项中<隐藏受保护的操作系统文件>修改为单选框,如下图: 查看注册表如下位置: HKEY_LOCAL_MACHINE\SOFTWARE\M ...

  8. 如何设置文件 为 受保护的操作系统文件

    如何设置文件 为 受保护的操作系统文件 2009年04月25日 星期六 12:18 如何设置文件 为 受保护的操作系统文件 使用一个批处理命令即可: attrib +s <驱动器>< ...

  9. Windows7 操作系统文件搜索方法

    Windows7操作系统文件搜索方法 用惯了WindowsXP搜索文件方法的用户到Windows7下可能感觉不知如何下手.我以前在WindowsXP下搜索文件,只要点资源管理器的搜索,在左侧的选项中可 ...

最新文章

  1. 针对web高并发量的处理
  2. centos7.2 mysql集群_Centos7.2下安装mysql-group-replication数据库集群
  3. html页面获取关闭页面事件,html页面关闭事件
  4. robotFramework-ride使用2-分支与循环
  5. 【操作系统】竞争条件与临界区
  6. 小程序执行运行过程原理_分享 | 还在焦虑等成绩?成绩小助手了解下
  7. 第十一章:可绑定的基础结构(四)
  8. 如何成为一个优秀的C++开发工程师?
  9. Memory Cleaner for Mac(内存清理工具)最新版
  10. 斯坦福大学深度学习公开课cs231n学习笔记(2)线性分类器及最优化
  11. 诺基亚e7刷linux,当之无愧的机皇 诺基亚E7-00十大细节解析
  12. Mac 怎样安装虚拟机(VMware fusion 12)
  13. linux开发板显示动态图片,开发板上显示图片
  14. 操作系统进程同步例题(四)生产者-消费者问题
  15. 基于Qt、FFMpeg的音视频播放器设计二(FFMpeg视频处理)
  16. 有追求的品牌都应该去B站
  17. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
  18. 服务器虚拟系统无法上网络设置,玩转Windows 2008虚拟机网络设置
  19. Kotlin 编译出错 java.lang.ClassNotFoundException: com.sun.tools.javac.util.context
  20. List 过滤、排序、校验等处理方法

热门文章

  1. 华为rh5885服务器oid_华为RH5885 V2服务器可靠性媲美RISC服务器
  2. 董卿:把这10个气质传给孩子
  3. 城市智慧交通系统总体解决方案
  4. 众昂矿业:国内萤石矿产地区分布
  5. 单片机定时器精准定时_用单片机C语言精确延时(定时)的方法
  6. 汽车手机智能控制一键启动智能钥匙开发
  7. 利用Foxmail发送邮件
  8. 《从0开始写一个微内核操作系统》4-关于mmu
  9. 浏览器提示无法安全地连接到此页面TLS安全设置未设置为默认怎么办?
  10. 数学之美:茹茹心形线的参数方程