文件之间的组织结构清晰易于查找。ide
目录文件自己就是一种有结构文件,由一条条记录组成。每条记录对应一个在该放在该目录下的文件。操作系统
咱们双击照片后,操做系统会在这个目录表中找到关键字照片对应的目录项(也就是记录),而后从外存中将照片目录的信息读入内存,因而照片目录的内容就能够显示出来了指针
目录文件中的一条记录就是一个文件控制块(FCB).blog
FCB有序集合称为“文件目录”,一个FCB就是一个文件目录项。FCB中包含了文件的基本信息(文件名,物理地址,逻辑结构,物理结构等),存取控制信息(是否可读/可写,禁止访问的用户名单等,使用信息(如文件的创建时间,修改时间等)最重要,最基本的仍是文件名,文件存放的物理地址。索引
FCB存在最重要的做用实现文件名和文件之间的映射。使用户(用户程序)能够实现‘’按名存取“进程
搜索:当用户使用一个文件时,系统要根据文件名搜索目录,找改文件对应的目录项内存
建立文件:建立一个新文件时=,须要在目录中删除相应的目录项字符串
删除文件:当删除一个文件时,须要在目录中删除相应的目录项it
显示目录:用户能够请求显示目录的内容,如显示该目路中的全部文件及相应属性ast
修改目录:某些文件属性保存在目录中,所以这些属性变化时,须要修改相应的目录项(如:文件重命名)
早起操做系统并不支持目录,整个系统中只创建一张目录表,每一个文件占一个目录项
缺点:单级目录实现了”按名存取“,可是不容许文件重名
在建立一个文件时,须要检查目录表中有没有重名文件,肯定不重名后才能容许创建文件,并将新文件对应的目录项插入到目录表中。
显然。单级目录结构不适用于多用户操做系统
早期的多用户操做系统,采用两级目录结构,分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User File Directory)
主文件目录用于记录用户名及相应用户文件目录存放的位置
用户文件目录由该用户的文件FCB组成
容许不一样用户的文件重名。文件名虽然相同可是对应的实际上是不一样的文件
两级目录结构容许实现不一样用户的文件重名,也能够在目录上实现访问限制(检查此时登陆的用户名是否匹配)。可是两级目录结构依然缺少灵活性,用户不能对本身的文件进行分类。
又称为树形目录结构
不一样目录下的文件能够重名
用户(或用户进程要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/隔开”。从根目录发出的路径称为绝对路径)
系统根据绝对路径一层一层地找到下一级目录。刚开始从外存读入根目录的目录表;找到“照片”目录的存放位置后,从外存读入对应的目录表;再找到“2015-08”目录的存放位置,再从外存读入对应目录表;最后才找到文件‘自拍.jpg’整个过程须要3次读磁盘I/O操做。
不少时候,用户会从根目录开始查找,效率比较低,所以能够设置一个“当前目录”,当用户想访问某个文件时,可使用从当前目录出发的“相对路径”。
在Linux中,“.”表示当前目录,所以若是“照片”是当前目录,则“自拍.jpg”的相对路径为:“./2015-08/自拍.jpg”。从当前路径出发们只须要查询内存中的“照片”目录表,便可知道“2015-08”目录表的存放位置,从外存调入该目录,便可知道“自拍.jpg”存放的位置了。
可见,引入当前目录,和相对路径后,磁盘的I/O的次数减小了,这就提高了访问文件的效率。
树形目录结构能够很方便的对文件进行分类,层次结构清晰,也可以更有效的进行文件的管理和保护。可是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”
在树形目录的结构基础上,增长了一些指向同一节点的有向边,使整个目录成为一个有向无环图,能够更方便地实现多个用户间的文件共享。
能够用不一样的文件名指向同一个文件,甚至能够指向用一个目录(共享同一目录下的全部内容)
须要为每一个共享节点设置一个共享计数器,用户记录此时有多少个地方在共享该节点。用户提出删除节点的请求时,只是删除该用户的FCB,并使用计数器减1,并不会直接删除共享节点。只有共享计数器为0的时候才能真正删除节点。
注意:共享文件不一样于复制文件,在共享文件中,因为各用户指向的是同一个文件,所以只要其中一个用户修改了文件数据,那么全部用户均可以看到文件数据的变化。
其实在查找各级目录的过程当中只须要用到“文件名”这个信息,只有文件名匹配时,才须要独处文件的其余信息。所以能够考虑让目录表”瘦身“来提升效率。
索引节点:除了文件名以外的描述信息都放到这里来
思考有何好处?
假设一个FCB是64B,磁盘块的大小为1KB,则每一个盘块中只能存放16个FCB。若一个文件目录中共有640个目录项,则共须要占用640/16=40个盘块。所以按照某个文件名检索该目录,平均须要查询320个目录项,平均须要启动磁盘20次。(每次磁盘I/O读入这一块)
若使用索引节点机制,文件名占14B,索引节点指针站2B,则每一个盘块可放64个目录项,那么按文件名检索目录平均只须要读入320/64=5个磁盘块。显然,这将大大提高文件检索速度。
当找到文件名对应的目录项时,才须要将索引节点调入内存,索引节点中记录了文件的各类信息,包括文件在外存中的存放位置,根据“存放位置”便可找到文件。
存放在外存中的索引节点称为“磁盘索引节点”,当索引节点放入内存后称为内存索引节点
相比之下内存索引节点中须要增长一些信息,好比文件是否被修改,此时有几个进程正在访问改文件等。