操作系统 ---- 文件管理._第1页
操作系统 ---- 文件管理._第2页
操作系统 ---- 文件管理._第3页
操作系统 ---- 文件管理._第4页
操作系统 ---- 文件管理._第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 文件管理一概述1.引入文件管理的必要性:计算机的两大功能:计算和存储除了利用计算机的巨大的计算能力之外,另一个主要功能,就是来存储大量的数据文件系统的功能就是让人可以方便地存取数据o文件系统是平常我们接触到的最多的功能之一,许多的操作,都是跟文件系统在打交道o比如说:切换目录,查看文件,复制文件,删除文件o进一步说,内存管理,进程管理,都和文件系统有密切的联系o文件系统可以看做是对使用磁盘的抽象,使人们可以不用去管磁盘具体是如何来存储,读取数据o文件系统屏蔽了底层的磁盘使用上面的繁琐细节,而用一种简单的逻辑结构呈现给用户o文件系统的设计目标-让用户可以仅凭文件名来操作文件o正式的定义o

2、文件系统的主要功能:提供信息的存储、检索、更新、共享、保护,并提供一套文件操作方法o主要功能:文件按名存取目录的建立与维护文件的查找与定位文件存储空间的分配与管理提供文件的存取方法和存储结构实现文件的共享、保护和保密提供一组易用的文件操作和命令提供与设备管理交互的统一接口o文件系统实现的关键点:设计文件系统的逻辑结构设计文件系统的物理结构设计逻辑结构到物理结构的映射o简单地讲,文件系统包括两大要素:文件:保存的信息的组织形式目录:保存文件的有关信息文件系统就是对文件和目录的组织和操作2.文件定义:由文件名所标识的一组信息的集合o如果要做到呈献给用户一个容易使用的文件形式,则要做到以下几点:按名

3、存取实现安全可靠高效组织存储空间提供共享功能o与“文件”有关的基本概念,即普通用户的角度的文件的一些逻辑结构要素:文件名、文件类型、文件属性、文件寻址方式、文件内容组织、文件格式、文件访问、文件操作等文件名是文件主要的存取根据,文件系统的设计目标就是能够按照文件名来操作文件各个系统对文件名有不一样的安排,比如有些系统有大小写要求,有些对文件名长度有要求,有些系统凭后缀名来识别文件类型,等等o文件名有一个问题,就是可能会重名,这个问题是通过“目录”来解决的文件类型:以Linux为例,一般有以下几种文件类型:普通文件、目录文件、块设备文件,字符设备文件、管道文件、套接字文件等,他们分别有不同的作用

4、文件属性比如文件的拥有者、组拥有者、文件权限、文件的时间(创建时间、最后访问时间、最后修改时间等)、上锁标志、文件口令等文件寻址方式:一般都是按照文件的位置来寻找文件,例如文件的路径,也可以通过文件的内容来进行寻址比如图片搜索,p2p软件下载等,均是通过文件内容来搜索,而非文件名称文件内容组织:有结构的文件:文件内容组成部分之间是 有一定的结构的无结构的文件:都以字节流的形式存放, 具体里面什么内容,由应 用程序自己来识别,内核 不管o从内核的设计角度来说,它应该只管文件是存哪,怎么取,文件的内容是什么,它无需知道,因此第二种方式更好文件格式有些文件是没有特定格式的,比如纯文本文件,但另一些文

5、件,需要专门开辟一块区域,保存这个文件某些内容是干什么用的比如可执行文件的文件头部,都有专门的区域,记录文件中哪些是代码部分,哪些是数据部分,等等ounix可执行文件格式魔数文本尺寸数据尺寸BSS尺寸符号表尺寸程序入口文本数据重定位表符号表o文件格式往往是一种行业标准,设计好之后,由不同厂商开发的软件来读取、处理,实现信息的共享。文件访问:一般来说,有顺序访问、随机访问、索引访问几种方式o顺序访问:早期的存储介质,如磁带,只能进行顺序访问,即先访问了前面的内容,才能访问之后的内容o随机访问:像磁盘,光盘这样的介质,就可以根据位置,直接跳到所在的位置,如果文件系统是在内存中的话,更是可以实现随机

6、访问o索引访问:为加快文件的存取,可以建立索引,通过索引来存取文件,这是数据库文件常用的方式3.目录简单说来,目录就是存放了文件的信息,我们首先通过目录,然后才能找到文件o直观上看了,目录中存放了文件,以及其他目录,从而组成了一个树形结构o每个目录都有至少有两个特殊的文件:. 指当前目录. 指上级目录o于是文件系统的任务就可以归纳为以下几个:文件的逻辑结构管理目录的管理文件的逻辑结构与物理地址的转换o目录的实现,一般都是采用层次式:整个目录组织成类似树型的结构o目录也是一种特殊的文件-记录其他文件信息的文件o为什么需要目录?目录是一种数据结构,用来记录文件所在的逻辑位置以及文件其他的一些信息目

7、录的作用,很类似于内存管理中,提供给用户虚拟地址的这种效果o各种操作系统都有不同的目录机制,但都具有一些共同点:树状结构具有相对路径与绝对路径共享与链接二文件系统的实现o对于普通用户,只需要关心怎么使用文件系统,而对操作系统的设计者来说,更要关心如何来实现用户的要求1.设计文件系统需要关注的问题:文件系统的布局文件如何实现目录如何实现如何实现共享磁盘空间如何管理2.文件系统的布局首先要了解一下磁盘的大致结构,以及磁盘上的一些特殊的区域o现在主流的磁盘,是以机械结构为主的磁盘o整个磁盘由若干圆形的盘面组成,每个盘面都有专门的磁头进行数据读写o若从抽象观点看,整个磁盘可以看做一个连续的大的数组主引

8、导程序分区表分区1分区2分区3引导记录超级块inode区文件数据与目录55AAMBRo主引导记录(Main Boot Record):位于磁盘的最前面的一个扇区,512字节o主引导记录中分成三部分:主引导程序,占446字节分区表,占64字节,每个表项占16字节魔数,0 x55AAo引导标记:如果此标记错误,将无法启动o分区表,记录之后的磁盘部分分成哪些分区,由于只有4个表项,因此只能有四个分区。为了解决这个问题,引入了“扩展分区”和“逻辑分区”的概念o引导程序:系统刚加电时,BIOS中的程序会读取这里面的程序,来进行最初的引导o主引导记录之后,是一个一个的分区,其结构也大致分为两部分:引导扇区

9、和数据区o每个分区的引导记录(引导扇区),跟主引导扇区很相似,也是512字节,但是不同点是,里面没有分区表。o计算机从加电到操作系统启动的过程接通电源,BIOS中固化的程序开始启动,首先检查系统各个主要设备,设置硬件参数BIOS接下来载入MBR中的引导程序,该引导程序查看分区表,看看里面哪些分区里安装了操作系统,如果有多个操作系统,则让用户选择用户选择了启动某个分区上的操作系统,则载入该分区的引导记录中的引导程序具体分区上的引导程序,也是比较小的,它的主要工作,是去该分区的文件系统中去载入另一个引导程序第三次载入的引导程序,完成载入内核o文件系统,首先要建立在磁盘分区的这种结构,实际上是位于具

10、体分区的引导记录之后的,即上图中,从超级块开始的部分o超级块:记录这个分区上的文件系统中的主要参数:文件系统类型、文件系统数据块尺寸等等主要的信息,它是要被载入内存中的。oinode:每个inode对应于一个文件,记录了文件的权限,修改时间,引用数等等信息o根目录:该分区上文件系统的根o之后的为具体的数据,包括文件和目录3.文件的实现文件的实现,就是要解决好以下几个问题:给文件分配磁盘空间记录这些空间的位置将文件内容存放在这些位置o文件的两种存放方式:当文件内容只存在于内存中,还未存入磁盘时,它是一种连续的流结构,当存入磁盘后,有两种可选的存储方式o连续空间存放o非连续空间存放I.连续存放这是

11、最简单的存放方式,给一个文件分配一篇连续的磁盘空间,文件的数据连续存放好处:读写效率高不足:空间利用率低,文件内容难以扩展II.非连续存放把一个文件的数据分块,每块可以独立存放,每个块都有一个指针指向下一个数据块,或者专门组织一张表,来记录某块的下一个块在哪里o方式之一:FAT(File Allocation Table)o比如说一个文件从块2开始,然后块2中记录了下一个块是6,。依次往下寻找,如果某个表项是-1,表示内容结束01234567891011126811-1oFAT文件系统,就是基于以上的表来实现的,具体又分为FAT12、FAT16、FAT32,他们的区别主要是地址的位数o该种方法

12、的主要缺点就是FAT占用的空间会过大,尤其是在磁盘容量很大的情况下,因为表项的多少等于磁盘块的个数o解决的办法,可以参考分页中的办法o方法之二:i-node 索引方式FAT方法要存储所有的磁盘数据块的表项,而其中很大一部分可能是空的改进的方法是,采用索引的方法,这个方法与内存分页管理十分相似,unix上面多采用类似的文件系统o每个文件都分配一个数据结构,成为i-node,里面存放了文件逻辑块与实际物理块的对应关系o当要访问某个文件时,先找到该文件的i-node,然后就可以找到对应的磁盘块o跟页表类似,i-node中还可以存放文件的其他信息三举例:Minix文件系统1.Linux刚出现的时候,就

13、采用Minix的文件系统,然后在此之上,建立了其他的文件系统Minix文件系统比较简单直观,适合学习2.实现文件系统的第一步:分块磁盘是容量较大的设备,跟内存不同内存的最小分配单位是字节,而磁盘一般要用一个更大的单位来做分配单位,比如1K,4K等,这个可以在格式化文件系统的时候选定3.文件的实现上一节讲过,可以有三种方法根据文件大小,分配连续的块建立文件分配表(FAT)索引方式:块与块之间通过指针相连,或者建立索引o重点介绍I-Node方式4.目录的实现当进程打开一个文件前,首先要找到这个文件在哪,内核根据用户提供的文件的路径名,找到相应的目录项,目录项里记录了该文件的信息对于不同的文件系统方

14、式,目录项里记录了不同的内容o连续分配方案:整个文件的磁盘地址o链接分配方案:第一个块的地址oi-node方案:文件的i-node号o那么文件的属性放在哪?o方法1:存在目录项里o方法2:对于i-node方式,还可以放在i-node里o举例:MS-DOS的目录项的大致结构:文件名扩展名属性保留时间日期第一块号长度831102224o举例:Unix下的目录i节点号文件名214o注意区别“目录”和“目录项”的区别,我们平时看到的是“目录”,而“目录项”是它里面的内容,一般目录的大小都是确定的,因此,一个目录里面能放的文件也是有限的o以/usr/bin/mbox为例,说明如何来找到这个文件首先,根目

15、录/的i-node位于分区开始后的固定位置(0号inode),所以很容易找到/的i-node,从而得到/目录里的文件有哪些,然后得到/usr这个目录的磁盘位置o查看/usr这个目录项,找出其i-node号,然后在i-node区中根据i-node号,找到/usr对应的i-node,查看其内容,找到/usr/bin目录项的磁盘地址o。依次这么寻找,就能找到mbox这个文件的每一部分具体的磁盘地址o由i-node这种实现方式可以看到:只要专门开辟一块空间存储各个i-node,就可以管理在该文件系统下的各个文件以及他们的地址o另一个好处是:文件的各个部分,可以放在不同的磁盘位置5.磁盘块管理磁盘块管理

16、包括两方面:确定磁盘块的大小、如何记录管理空闲块,如何安排文件存储块的位置来减少读写磁头的移动o确定磁盘块大小是非常影响文件系统性能的o磁盘块太大,则利用率不高o磁盘块太小,则增加读写的次数o正确的确定磁盘块容量的方法,是统计该文件系统中文件的平均尺寸,从而来确定应该采取多大的块o空闲块管理:o在一个文件进行保存的第一步,要进行空闲块的申请,这时就牵涉到空闲块管理o几种方法:位图法空闲区法空闲块链成组空闲块链o如何安排磁盘占用的块o在进行磁盘块分配时,也要考虑这样安排是否会有利于磁盘读写头的移动o另一方面,再优化磁盘读写头,也不如建立缓存机制来的有效oLinux系统在运行时,通常会占用比较大的

17、内存,原因就是它采用了文件缓存机制,把当时没有用的内存拿来当缓存用free命令中可以看到当时的内存使用情况四文件系统其他功能的实现1.文件系统调用文件系统对外提供的接口有:文件的建立、打开、关闭、读、写、控制用户通过这些接口,可以在不了解文件系统实现细节的基础上,进行对文件的各种操作o以Linux为例:整个分区从引导扇区之后开始,为文件系统所在的区域剩余的部分,包括:超级块、索引节点区、数据区超级块:一般占用一块。存放文件系统的结构和主要管理信息,包括inode区所占的块数、空闲inode位图,以及其他重要的信息当安装了一个文件系统时,超级块需要被载入到内存当中索引节点区:占用若干块(与具体情

18、况有关),每一个文件都有一个inode与之对应。当打开一个文件时,文件的inode会被载入到内存,成为活动inode数据区:存放文件、目录等o为描述进程打开文件的方式,内核中引入两个数据结构:用户打开文件表:PCB中有一个files_struct,记录进程打开的文件系统打开文件表:内核中专门开辟区域,记录不同进程共同打开的文件,实现共享o具体的系统调用创建文件:fd = create(filename, mode)如:fd = create(“/home/abcd/file.c”, 0775);o过程:I.为新文件分配inode和活动inode,建立新的目录项II.在活动inode中置初值,包

19、括modeIII.分配内核相关的数据结构删除文件过程:删除目录项中的对应的项,更新inode空闲表,更新空闲块表打开、关闭文件打开:建立进程与文件的联系,其本质就是把文件inode复制到内存中的活动inode表,并建立一个文件数据结构供进程使用关闭:因活动inode占用主存空间,因此当文件不再使用时,应释放所占用的空间ofd = open(filename, mode);I.过程:从相应的目录中去检索,找到文件对应的目录项,从而找到文件的inodeII.进行相应的检查III.为打开的文件分配相应的数据结构(用户打开文件表项和系统打开文件表项),最后返回fd给调用者o关闭过程:I.根据fd找到用

20、户打开文件表项、系统打开文件表项II.系统打开文件表项引用数减一,若引用数为0,则找到与此对应的活动inodeIII.活动inode引用数减一,若引用数为0,则写回此inode,并释放该活动inode读写文件:nr = read(fd, buf, count)nr = write(fd, buf, count)设立读写标记lseek(fd, offset, whence)2.文件共享有两层含义:一是磁盘上的不同目录下共享同一文件,二是指不同进程共享同一个文件静态共享:一个文件只有一个磁盘存储位置,但是可以分属于不同的目录下由于文件内容都是一样的,因此没必要每个目录下都复制一个一模一样的文件,同时,在这种方式下,如果某一处目录下修改了,那么会引起文件的不一致o例如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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论