操作系统------文件管理分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第六章文件管理一.概述1.引入文件管理的必要性:计算机的两大功能:计算和存储除了利用计算机的巨大的计算能力之外,另一个主要功能,就是来存储大量的数据文件系统的功能就是让人可以方便地存取数据文件系统是平常我们接触到的最多的功能之一,许多的操作,都是跟文件系统在打交道比如说:切换目录,查看文件,复制文件,删除文件进一步说,内存管理,进程管理,都和文件系统有密切的联系文件系统可以看做是对使用磁盘的抽象,使人们可以不用去管磁盘具体是如何来存储,读取数据文件系统屏蔽了底层的磁盘使用上面的繁琐细节,而用一种简单的逻辑结构呈现给用户文件系统的设计目标---让用户可以仅凭文件名来操作文件正式的定义文件系统的主要功能:提供信息的存储、检索、更新、共享、保护,并提供一套文件操作方法主要功能:①文件按名存取②目录的建立与维护③文件的查找与定位④文件存储空间的分配与管理⑤提供文件的存取方法和存储结构⑥实现文件的共享、保护和保密⑦提供一组易用的文件操作和命令⑧提供与设备管理交互的统一接口文件系统实现的关键点:设计文件系统的逻辑结构设计文件系统的物理结构设计逻辑结构到物理结构的映射简单地讲,文件系统包括两大要素:文件:保存的信息的组织形式目录:保存文件的有关信息文件系统就是对文件和目录的组织和操作2.文件定义:由文件名所标识的一组信息的集合如果要做到呈献给用户一个容易使用的文件形式,则要做到以下几点:①按名存取②实现安全可靠③高效组织存储空间④提供共享功能与“文件”有关的基本概念,即普通用户的角度的文件的一些逻辑结构要素:文件名、文件类型、文件属性、文件寻址方式、文件内容组织、文件格式、文件访问、文件操作等①文件名是文件主要的存取根据,文件系统的设计目标就是能够按照文件名来操作文件各个系统对文件名有不一样的安排,比如有些系统有大小写要求,有些对文件名长度有要求,有些系统凭后缀名来识别文件类型,等等文件名有一个问题,就是可能会重名,这个问题是通过“目录”来解决的②文件类型:以Linux为例,一般有以下几种文件类型:普通文件、目录文件、块设备文件,字符设备文件、管道文件、套接字文件等,他们分别有不同的作用③文件属性比如文件的拥有者、组拥有者、文件权限、文件的时间(创建时间、最后访问时间、最后修改时间等)、上锁标志、文件口令等④文件寻址方式:一般都是按照文件的位置来寻找文件,例如文件的路径,也可以通过文件的内容来进行寻址比如图片搜索,p2p软件下载等,均是通过文件内容来搜索,而非文件名称⑤文件内容组织:有结构的文件:文件内容组成部分之间是有一定的结构的无结构的文件:都以字节流的形式存放,具体里面什么内容,由应用程序自己来识别,内核不管从内核的设计角度来说,它应该只管文件是存哪,怎么取,文件的内容是什么,它无需知道,因此第二种方式更好⑥文件格式有些文件是没有特定格式的,比如纯文本文件,但另一些文件,需要专门开辟一块区域,保存这个文件某些内容是干什么用的比如可执行文件的文件头部,都有专门的区域,记录文件中哪些是代码部分,哪些是数据部分,等等unix可执行文件格式魔数文本尺寸数据尺寸BSS尺寸符号表尺寸程序入口文本数据重定位表符号表文件格式往往是一种行业标准,设计好之后,由不同厂商开发的软件来读取、处理,实现信息的共享。⑦文件访问:一般来说,有顺序访问、随机访问、索引访问几种方式顺序访问:早期的存储介质,如磁带,只能进行顺序访问,即先访问了前面的内容,才能访问之后的内容随机访问:像磁盘,光盘这样的介质,就可以根据位置,直接跳到所在的位置,如果文件系统是在内存中的话,更是可以实现随机访问索引访问:为加快文件的存取,可以建立索引,通过索引来存取文件,这是数据库文件常用的方式3.目录简单说来,目录就是存放了文件的信息,我们首先通过目录,然后才能找到文件直观上看了,目录中存放了文件,以及其他目录,从而组成了一个树形结构每个目录都有至少有两个特殊的文件:.指当前目录..指上级目录于是文件系统的任务就可以归纳为以下几个:①文件的逻辑结构管理②目录的管理③文件的逻辑结构与物理地址的转换目录的实现,一般都是采用层次式:整个目录组织成类似树型的结构目录也是一种特殊的文件---记录其他文件信息的文件为什么需要目录?目录是一种数据结构,用来记录文件所在的逻辑位置以及文件其他的一些信息目录的作用,很类似于内存管理中,提供给用户虚拟地址的这种效果各种操作系统都有不同的目录机制,但都具有一些共同点:①树状结构②具有相对路径与绝对路径③共享与链接二.文件系统的实现对于普通用户,只需要关心怎么使用文件系统,而对操作系统的设计者来说,更要关心如何来实现用户的要求1.设计文件系统需要关注的问题:①文件系统的布局②文件如何实现③目录如何实现④如何实现共享⑤磁盘空间如何管理2.文件系统的布局首先要了解一下磁盘的大致结构,以及磁盘上的一些特殊的区域现在主流的磁盘,是以机械结构为主的磁盘整个磁盘由若干圆形的盘面组成,每个盘面都有专门的磁头进行数据读写若从抽象观点看,整个磁盘可以看做一个连续的大的数组主引导程序分区表分区1分区2分区3引导记录超级块inode区文件数据与目录55AAMBR主引导记录(MainBootRecord):位于磁盘的最前面的一个扇区,512字节主引导记录中分成三部分:主引导程序,占446字节分区表,占64字节,每个表项占16字节魔数,0x55AA引导标记:如果此标记错误,将无法启动分区表,记录之后的磁盘部分分成哪些分区,由于只有4个表项,因此只能有四个分区。为了解决这个问题,引入了“扩展分区”和“逻辑分区”的概念引导程序:系统刚加电时,BIOS中的程序会读取这里面的程序,来进行最初的引导主引导记录之后,是一个一个的分区,其结构也大致分为两部分:引导扇区和数据区每个分区的引导记录(引导扇区),跟主引导扇区很相似,也是512字节,但是不同点是,里面没有分区表。计算机从加电到操作系统启动的过程①接通电源,BIOS中固化的程序开始启动,首先检查系统各个主要设备,设置硬件参数②BIOS接下来载入MBR中的引导程序,该引导程序查看分区表,看看里面哪些分区里安装了操作系统,如果有多个操作系统,则让用户选择③用户选择了启动某个分区上的操作系统,则载入该分区的引导记录中的引导程序④具体分区上的引导程序,也是比较小的,它的主要工作,是去该分区的文件系统中去载入另一个引导程序⑤第三次载入的引导程序,完成载入内核文件系统,首先要建立在磁盘分区的这种结构,实际上是位于具体分区的引导记录之后的,即上图中,从超级块开始的部分超级块:记录这个分区上的文件系统中的主要参数:文件系统类型、文件系统数据块尺寸等等主要的信息,它是要被载入内存中的。inode:每个inode对应于一个文件,记录了文件的权限,修改时间,引用数等等信息根目录:该分区上文件系统的根之后的为具体的数据,包括文件和目录3.文件的实现文件的实现,就是要解决好以下几个问题:①给文件分配磁盘空间②记录这些空间的位置③将文件内容存放在这些位置文件的两种存放方式:当文件内容只存在于内存中,还未存入磁盘时,它是一种连续的流结构,当存入磁盘后,有两种可选的存储方式连续空间存放非连续空间存放I.连续存放这是最简单的存放方式,给一个文件分配一篇连续的磁盘空间,文件的数据连续存放好处:读写效率高不足:空间利用率低,文件内容难以扩展II.非连续存放把一个文件的数据分块,每块可以独立存放,每个块都有一个指针指向下一个数据块,或者专门组织一张表,来记录某块的下一个块在哪里方式之一:FAT(FileAllocationTable)比如说一个文件从块2开始,然后块2中记录了下一个块是6,。。。依次往下寻找,如果某个表项是-1,表示内容结束01234567891011126811-1FAT文件系统,就是基于以上的表来实现的,具体又分为FAT12、FAT16、FAT32,他们的区别主要是地址的位数该种方法的主要缺点就是FAT占用的空间会过大,尤其是在磁盘容量很大的情况下,因为表项的多少等于磁盘块的个数解决的办法,可以参考分页中的办法方法之二:i-node索引方式FAT方法要存储所有的磁盘数据块的表项,而其中很大一部分可能是空的改进的方法是,采用索引的方法,这个方法与内存分页管理十分相似,unix上面多采用类似的文件系统每个文件都分配一个数据结构,成为i-node,里面存放了文件逻辑块与实际物理块的对应关系当要访问某个文件时,先找到该文件的i-node,然后就可以找到对应的磁盘块跟页表类似,i-node中还可以存放文件的其他信息三.举例:Minix文件系统1.Linux刚出现的时候,就采用Minix的文件系统,然后在此之上,建立了其他的文件系统Minix文件系统比较简单直观,适合学习2.实现文件系统的第一步:分块磁盘是容量较大的设备,跟内存不同内存的最小分配单位是字节,而磁盘一般要用一个更大的单位来做分配单位,比如1K,4K等,这个可以在格式化文件系统的时候选定3.文件的实现上一节讲过,可以有三种方法①根据文件大小,分配连续的块②建立文件分配表(FAT)③索引方式:块与块之间通过指针相连,或者建立索引重点介绍I-Node方式4.目录的实现当进程打开一个文件前,首先要找到这个文件在哪,内核根据用户提供的文件的路径名,找到相应的目录项,目录项里记录了该文件的信息对于不同的文件系统方式,目录项里记录了不同的内容连续分配方案:整个文件的磁盘地址链接分配方案:第一个块的地址i-node方案:文件的i-node号那么文件的属性放在哪?方法1:存在目录项里方法2:对于i-node方式,还可以放在i-node里举例:MS-DOS的目录项的大致结构:文件名扩展名属性保留时间日期第一块号长度831102224举例:Unix下的目录i节点号文件名214注意区别“目录”和“目录项”的区别,我们平时看到的是“目录”,而“目录项”是它里面的内容,一般目录的大小都是确定的,因此,一个目录里面能放的文件也是有限的以/usr/bin/mbox为例,说明如何来找到这个文件首先,根目录/的i-node位于分区开始后的固定位置(0号inode),所以很容易找到/的i-node,从而得到/目录里的文件有哪些,然后得到/usr这个目录的磁盘位置查看/usr这个目录项,找出其i-node号,然后在i-node区中根据i-node号,找到/usr对应的i-node,查看其内容,找到/usr/bin目录项的磁盘地址。。。依次这么寻找,就能找到mbox这个文件的每一部分具体的磁盘地址由i-node这种实现方式可以看到:只要专门开辟一块空间存储各个i-node,就可以管理在该文件系统下的各个文件以及他们的地址另一个好处是:文件的各个部分,可以放在不同的磁盘位置5.磁盘块管理磁盘块管理包括两方面:确定磁盘块的大小、如何记录管理空闲块,如何安排文件存储块的位置来减少读写磁头的移动确定磁盘块大小是非常影响文件系统性能的磁盘块太大,则利用率不高磁盘块太小,则增加读写的次数正确的确定磁盘块容量的方法,是统计该文件系统中文件的平均尺寸,从而来确定应该采取多大的块空闲块管理:在一个文件进行保存的第一步,要进行空闲块的申请,这时就牵涉到空闲块管理几种方法:①位图法②空闲区法③空闲块链④成组空闲块链如何安排磁盘占用的块在进行磁盘块分配时,也要考虑这样安排是否会有利于磁盘读写头的移动另一方面,再优化磁盘读写头,也不如建立缓存机制来的有效Linux系统在运行时,通常会占用比较大的内存,原因就是它采用了文件缓存机制,把当时没有用的内存拿来当缓存用free命令中可以看到当时的内存使用情况四.文件系统其他功能的实现1.文件系统调用文件系统对外提供的接口有:文件的建立、打开、关闭、读、写、控制用户通过这些接口,可以在不了解文件系统实现细节的基础上,进行对文件的各种操作以Linux为例:整个分

1 / 103
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功