




已阅读5页,还剩98页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章文件管理 概述 引入文件管理的必要性 计算机的两大功能 计算和存储除了利用计算机的巨大的计算能力之外 另一个主要功能 就是来存储大量的数据文件系统的功能就是让人可以方便地存取数据 文件系统是平常我们接触到的最多的功能之一 许多的操作 都是跟文件系统在打交道比如说 切换目录 查看文件 复制文件 删除文件进一步说 内存管理 进程管理 都和文件系统有密切的联系 文件系统可以看做是对使用磁盘的抽象 使人们可以不用去管磁盘具体是如何来存储 读取数据文件系统屏蔽了底层的磁盘使用上面的繁琐细节 而用一种简单的逻辑结构呈现给用户 文件系统的设计目标 让用户可以仅凭文件名来操作文件 正式的定义文件系统的主要功能 提供信息的存储 检索 更新 共享 保护 并提供一套文件操作方法 主要功能 文件按名存取目录的建立与维护文件的查找与定位文件存储空间的分配与管理提供文件的存取方法和存储结构 实现文件的共享 保护和保密提供一组易用的文件操作和命令提供与设备管理交互的统一接口 文件系统实现的关键点 设计文件系统的逻辑结构设计文件系统的物理结构设计逻辑结构到物理结构的映射 简单地讲 文件系统包括两大要素 文件 保存的信息的组织形式目录 保存文件的有关信息文件系统就是对文件和目录的组织和操作 文件定义 由文件名所标识的一组信息的集合 如果要做到呈献给用户一个容易使用的文件形式 则要做到以下几点 按名存取实现安全可靠高效组织存储空间提供共享功能 与 文件 有关的基本概念 即普通用户的角度的文件的一些逻辑结构要素 文件名 文件类型 文件属性 文件寻址方式 文件内容组织 文件格式 文件访问 文件操作等 文件名是文件主要的存取根据 文件系统的设计目标就是能够按照文件名来操作文件各个系统对文件名有不一样的安排 比如有些系统有大小写要求 有些对文件名长度有要求 有些系统凭后缀名来识别文件类型 等等 文件名有一个问题 就是可能会重名 这个问题是通过 目录 来解决的 文件类型 以Linux为例 一般有以下几种文件类型 普通文件 目录文件 块设备文件 字符设备文件 管道文件 套接字文件等 他们分别有不同的作用 文件属性比如文件的拥有者 组拥有者 文件权限 文件的时间 创建时间 最后访问时间 最后修改时间等 上锁标志 文件口令等 文件寻址方式 一般都是按照文件的位置来寻找文件 例如文件的路径 也可以通过文件的内容来进行寻址比如图片搜索 p2p软件下载等 均是通过文件内容来搜索 而非文件名称 文件内容组织 有结构的文件 文件内容组成部分之间是有一定的结构的无结构的文件 都以字节流的形式存放 具体里面什么内容 由应用程序自己来识别 内核不管 从内核的设计角度来说 它应该只管文件是存哪 怎么取 文件的内容是什么 它无需知道 因此第二种方式更好 文件格式有些文件是没有特定格式的 比如纯文本文件 但另一些文件 需要专门开辟一块区域 保存这个文件某些内容是干什么用的比如可执行文件的文件头部 都有专门的区域 记录文件中哪些是代码部分 哪些是数据部分 等等 unix可执行文件格式 魔数 文本尺寸 数据尺寸 BSS尺寸 符号表尺寸 程序入口 文本 数据 重定位表 符号表 文件格式往往是一种行业标准 设计好之后 由不同厂商开发的软件来读取 处理 实现信息的共享 文件访问 一般来说 有顺序访问 随机访问 索引访问几种方式 顺序访问 早期的存储介质 如磁带 只能进行顺序访问 即先访问了前面的内容 才能访问之后的内容随机访问 像磁盘 光盘这样的介质 就可以根据位置 直接跳到所在的位置 如果文件系统是在内存中的话 更是可以实现随机访问 索引访问 为加快文件的存取 可以建立索引 通过索引来存取文件 这是数据库文件常用的方式 目录简单说来 目录就是存放了文件的信息 我们首先通过目录 然后才能找到文件 直观上看了 目录中存放了文件 以及其他目录 从而组成了一个树形结构每个目录都有至少有两个特殊的文件 指当前目录 指上级目录 于是文件系统的任务就可以归纳为以下几个 文件的逻辑结构管理目录的管理文件的逻辑结构与物理地址的转换 目录的实现 一般都是采用层次式 整个目录组织成类似树型的结构目录也是一种特殊的文件 记录其他文件信息的文件 为什么需要目录 目录是一种数据结构 用来记录文件所在的逻辑位置以及文件其他的一些信息目录的作用 很类似于内存管理中 提供给用户虚拟地址的这种效果 各种操作系统都有不同的目录机制 但都具有一些共同点 树状结构具有相对路径与绝对路径共享与链接 文件系统的实现 对于普通用户 只需要关心怎么使用文件系统 而对操作系统的设计者来说 更要关心如何来实现用户的要求 设计文件系统需要关注的问题 文件系统的布局文件如何实现目录如何实现如何实现共享磁盘空间如何管理 文件系统的布局首先要了解一下磁盘的大致结构 以及磁盘上的一些特殊的区域 现在主流的磁盘 是以机械结构为主的磁盘整个磁盘由若干圆形的盘面组成 每个盘面都有专门的磁头进行数据读写 若从抽象观点看 整个磁盘可以看做一个连续的大的数组 主引导程序 分区表 分区1 分区2 分区3 引导记录 超级块 inode区 文件数据与目录 55AA MBR 主引导记录 MainBootRecord 位于磁盘的最前面的一个扇区 512字节主引导记录中分成三部分 主引导程序 占446字节分区表 占64字节 每个表项占16字节魔数 0 x55AA 引导标记 如果此标记错误 将无法启动分区表 记录之后的磁盘部分分成哪些分区 由于只有4个表项 因此只能有四个分区 为了解决这个问题 引入了 扩展分区 和 逻辑分区 的概念引导程序 系统刚加电时 BIOS中的程序会读取这里面的程序 来进行最初的引导 主引导记录之后 是一个一个的分区 其结构也大致分为两部分 引导扇区和数据区每个分区的引导记录 引导扇区 跟主引导扇区很相似 也是512字节 但是不同点是 里面没有分区表 计算机从加电到操作系统启动的过程接通电源 BIOS中固化的程序开始启动 首先检查系统各个主要设备 设置硬件参数BIOS接下来载入MBR中的引导程序 该引导程序查看分区表 看看里面哪些分区里安装了操作系统 如果有多个操作系统 则让用户选择 用户选择了启动某个分区上的操作系统 则载入该分区的引导记录中的引导程序具体分区上的引导程序 也是比较小的 它的主要工作 是去该分区的文件系统中去载入另一个引导程序第三次载入的引导程序 完成载入内核 文件系统 首先要建立在磁盘分区的这种结构 实际上是位于具体分区的引导记录之后的 即上图中 从超级块开始的部分 超级块 记录这个分区上的文件系统中的主要参数 文件系统类型 文件系统数据块尺寸等等主要的信息 它是要被载入内存中的 inode 每个inode对应于一个文件 记录了文件的权限 修改时间 引用数等等信息 根目录 该分区上文件系统的根之后的为具体的数据 包括文件和目录 文件的实现文件的实现 就是要解决好以下几个问题 给文件分配磁盘空间记录这些空间的位置将文件内容存放在这些位置 文件的两种存放方式 当文件内容只存在于内存中 还未存入磁盘时 它是一种连续的流结构 当存入磁盘后 有两种可选的存储方式连续空间存放非连续空间存放 连续存放这是最简单的存放方式 给一个文件分配一篇连续的磁盘空间 文件的数据连续存放好处 读写效率高不足 空间利用率低 文件内容难以扩展 非连续存放把一个文件的数据分块 每块可以独立存放 每个块都有一个指针指向下一个数据块 或者专门组织一张表 来记录某块的下一个块在哪里 方式之一 FAT FileAllocationTable 比如说一个文件从块2开始 然后块2中记录了下一个块是6 依次往下寻找 如果某个表项是 1 表示内容结束 FAT文件系统 就是基于以上的表来实现的 具体又分为FAT12 FAT16 FAT32 他们的区别主要是地址的位数该种方法的主要缺点就是FAT占用的空间会过大 尤其是在磁盘容量很大的情况下 因为表项的多少等于磁盘块的个数解决的办法 可以参考分页中的办法 方法之二 i node索引方式FAT方法要存储所有的磁盘数据块的表项 而其中很大一部分可能是空的改进的方法是 采用索引的方法 这个方法与内存分页管理十分相似 unix上面多采用类似的文件系统 每个文件都分配一个数据结构 成为i node 里面存放了文件逻辑块与实际物理块的对应关系当要访问某个文件时 先找到该文件的i node 然后就可以找到对应的磁盘块跟页表类似 i node中还可以存放文件的其他信息 举例 Minix文件系统 Linux刚出现的时候 就采用Minix的文件系统 然后在此之上 建立了其他的文件系统Minix文件系统比较简单直观 适合学习 实现文件系统的第一步 分块磁盘是容量较大的设备 跟内存不同内存的最小分配单位是字节 而磁盘一般要用一个更大的单位来做分配单位 比如1K 4K等 这个可以在格式化文件系统的时候选定 文件的实现上一节讲过 可以有三种方法根据文件大小 分配连续的块建立文件分配表 FAT 索引方式 块与块之间通过指针相连 或者建立索引 重点介绍I Node方式 目录的实现当进程打开一个文件前 首先要找到这个文件在哪 内核根据用户提供的文件的路径名 找到相应的目录项 目录项里记录了该文件的信息对于不同的文件系统方式 目录项里记录了不同的内容 连续分配方案 整个文件的磁盘地址链接分配方案 第一个块的地址i node方案 文件的i node号 那么文件的属性放在哪 方法1 存在目录项里方法2 对于i node方式 还可以放在i node里 举例 MS DOS的目录项的大致结构 文件名 扩展名 属性 保留 时间 日期 第一块号 长度 8 3 1 10 2 2 2 4 举例 Unix下的目录 i节点号 文件名 2 14 注意区别 目录 和 目录项 的区别 我们平时看到的是 目录 而 目录项 是它里面的内容 一般目录的大小都是确定的 因此 一个目录里面能放的文件也是有限的 以 usr bin mbox为例 说明如何来找到这个文件首先 根目录 的i node位于分区开始后的固定位置 所以很容易找到 的i node 从而得到 目录项里的文件有哪些 然后得到 usr这个目录项的磁盘位置 查看 usr的目录项 找出其i node号 然后在i node表中根据i node号 找到 usr对应的i node 查看其内容 找到 usr bin目录项的磁盘地址 依次这么寻找 就能找到mbox这个文件的每一部分具体的磁盘地址 由i node这种实现方式可以看到 只要专门开辟一块空间存储各个i node 就可以管理在该文件系统下的各个文件以及他们的地址另一个好处是 文件的各个部分 可以放在不同的磁盘位置 磁盘块管理磁盘块管理包括两方面 确定磁盘块的大小 如何记录管理空闲块 如何安排文件存储块的位置来减少读写磁头的移动 确定磁盘块大小是非常影响文件系统性能的磁盘块太大 则利用率不高磁盘块太小 则增加读写的次数 正确的确定磁盘块容量的方法 是统计该文件系统中文件的平均尺寸 从而来确定应该采取多大的块 空闲块管理 在一个文件进行保存的第一步 要进行空闲块的申请 这时就牵涉到空闲块管理 几种方法 位图法空闲区法空闲块链成组空闲块链 如何安排磁盘占用的块在进行磁盘块分配时 也要考虑这样安排是否会有利于磁盘读写头的移动 另一方面 再优化磁盘读写头 也不如建立缓存机制来的有效Linux系统在运行时 通常会占用比较大的内存 原因就是它采用了文件缓存机制 把当时没有用的内存拿来当缓存用free命令中可以看到当时的内存使用情况 文件系统其他功能的实现 文件系统调用文件系统对外提供的接口有 文件的建立 打开 关闭 读 写 控制用户通过这些接口 可以在不了解文件系统实现细节的基础上 进行对文件的各种操作 以Linux为例 整个分区从引导扇区之后开始 为文件系统所在的区域剩余的部分 包括 超级块 索引节点区 数据区 超级块 一般占用一块 存放文件系统的结构和主要管理信息 包括inode区所占的块数 空闲inode位图 以及其他重要的信息当安装了一个文件系统时 超级块需要被载入到内存当中 索引节点区 占用若干块 与具体情况有关 每一个文件都有一个inode与之对应 当打开一个文件时 文件的inode会被载入到内存 成为活动inode 数据区 存放文件 目录等 为描述进程打开文件的方式 内核中引入两个数据结构 用户打开文件表 PCB中有一个files struct 记录进程打开的文件系统打开文件表 内核中专门开辟区域 记录不同进程共同打开的文件 实现共享 具体的系统调用创建文件 fd create filename mode 如 fd create home abcd file c 0775 过程 为新文件分配inode和活动inode 建立新的目录项在活动inode中置初值 包括mode分配内核相关的数据结构 删除文件过程 删除目录项中的对应的项 更新inode空闲表 更新空闲块表 打开 关闭文件打开 建立进程与文件的联系 其本质就是把文件inode复制到内存中的活动inode表 并建立一个文件数据结构供进程使用关闭 因活动inode占用主存空间 因此当文件不再使用时 应释放所占用的空间 fd open filename mode 过程 从相应的目录中去检索 找到文件对应的目录项 从而找到文件的inode进行相应的检查为打开的文件分配相应的数据结构 用户打开文件表项和系统打开文件表项 最后返回fd给调用者 关闭过程 根据fd找到用户打开文件表项 系统打开文件表项系统打开文件表项引用数减一 若引用数为0 则找到与此对应的活动inode活动inode引用数减一 若引用数为0 则写回此inode 并释放该活动inode 读写文件 nr read fd buf count nr write fd buf count 设立读写标记lseek fd offset whence 文件共享有两层含义 一是磁盘上的不同目录下共享同一文件 二是指不同进程共享同一个文件 静态共享 一个文件只有一个磁盘存储位置 但是可以分属于不同的目录下由于文件内容都是一样的 因此没必要每个目录下都复制一个一模一样的文件 同时 在这种方式下 如果某一处目录下修改了 那么会引起文件的不一致 例如Linux下 建立 硬链接 的方式为ln删除 不会影响 实际上 建立静态链接 会在inode中的i nlink字段增加1 删除文件 则会把改值减一 只有等i nlink为0时 才真正删除该文件 符号链接共享由于静态链接是记录的文件的inode 他的缺点是 1只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版员工雇佣合同范本
- 2025甘肃金昌市市直和县直教育系统引进高层次和急需紧缺人才招聘35人(第二批)考前自测高频考点模拟试题及完整答案详解1套
- 2025江苏金灌投资发展集团有限公司、灌南城市发展集团有限公司招聘高层次人才10人考前自测高频考点模拟试题及一套参考答案详解
- 2025光伏发电项目合作合同
- 2025年河北邯郸馆陶县公开招聘(选聘)辅助性岗位工作人员13名模拟试卷及完整答案详解一套
- 2025年电子产品购销合同模板
- 2025年上海无固定期限劳动合同样本
- 2025广东郁南县兴华产业投资有限公司、郁南县兴瑞产业投资有限公司招聘员工6人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025贵州黔南州瓮安县人力资源和社会保障局招聘公益性岗位人员1人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025年枣庄山亭区人民医院公开招聘备案制专业技术人员(15人)考前自测高频考点模拟试题及答案详解(名师系列)
- 2024年武汉商学院公开招聘辅导员笔试题含答案
- 2024年国庆中秋安全教育主题班会《欢度双节 安全护航》主题安全教育【课件】
- 《编程猫系列》第1课-Hello-编程猫(课件)
- GB 16899-2011自动扶梯和自动人行道的制造与安装安全规范
- 非典型骨折课件
- 封闭区倒塌围墙修复施工方案
- 户口本翻译样本-Word范文-Word范文
- 企业融资计划书2022
- 99S203 消防水泵接合器安装图集
- 多发性大动脉炎
- 光纤损耗测试记录
评论
0/150
提交评论