码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统-文件系统

时间:2019-06-18 14:23:13      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:存储   target   display   dir   软件架构   span   速度   空闲   port   

文件

文件的定义

 

文件是以计算机硬盘为载体存储在计算机上的信息集合,可以是文本文档、图片、程序等等。

在系统运行的时候,计算机以进程为基本单位进行资源的调度和分配。在用户的输入、输出中,则以文件为基本单位

 

文件的属性

 

名称、标识符、类型、位置、大小、保护、时间日期和用户标识。

 

文件的结构

 

域:基本数据单元,一个域包含一个值,如雇员的名字、日期或等等。

记录:一组相关的域的集合,可以视为应用程序的一个单元。一个雇员记录可以包含多个域,如名字、社保号等等。

文件:一组相似记录的集合,是一个实体,可以通过名字访问。文件有唯一的文件名,可以被创建或删除。在有些文件系统中,文件是域的集合。

数据库是一组相关的数据的集合,本质特征是数据元素间存在着明确的关系,并且可以供不用应用程序使用。自身是一种或多种类型的文件组成的。

 

文件的基本操作

创建、写、读、重定位(寻址)、删除、截断(清空)

 

文件的组织(逻辑结构)?重要?

 

在选择文件组织的时候,有以下的重要原则(Criteria):访问快速、易于修改、节约存储空间、维护简单、可靠。

文件组织分为两类五种,无结构:流式文件/堆文件(Pile);有结构:顺序文件、索引顺序文件、索引文件、直接或散列文件

 

 

?
 
 

 

 

空间属性

修改记录大小

检索

 

 

文件方法

可变

固定

相等

大于

单条

子集

穷举

 

无结构

Pile

A

B

A

E

E

D

B

 

有结构

Sequential File

F

A

D

F

F

D

A

 

Indexed Sequential File

F

B

B

D

B

D

A

 

Indexed File

B

C

C

C

A

B

D

 

Direct or Hashed File

F

B

B

F

B

F

E

 

 
 
 
 
?

PILE

堆是最简单的文件组织形式,数据按它们到达的顺序被收集,每条记录由一串数据组成。堆的目的仅仅是积累大量的数据并保存数据。

 

由于堆没有结构,对记录的访问时通过穷举查找进行的。

 

当保存的数据大小和结构不同的时候,这种类型的文件空间使用情况好,能较好地用于穷举查找,且易于修改。

?技术图片                                           ??技术图片                                           ?

 

Sequential File

 

顺序文件是最常用的文件组织形式。每条记录都使用一种固定的格式。所有记录都具有相同的长度,并且由相同数目、长度固定的域按特定的顺序组成。

 

由于每个域的长度和位置已知,只需要保存域的值,每个域的域名和长度是该文件结构的属性。其中关键域是每条记录的第一个域,唯一地标识这条记录。

 

顺序文件通常用于批处理应用中,是唯一可以很容易地存储在磁盘或磁带中的文件组织。

 

顺序文件按照记录在块中的简单顺序存储,文件在磁带或磁盘上的物理组织直接对应于文件的逻辑组织。这种情况下,会把新文件放在堆中,形成日志文件,然后再周期性地执行批更新。另一种方式是把顺序文件组织成链表的形式。一个或多条记录保存在每一个物理块中。磁盘中的每一块含有指向下一块的指针。

 


Indexed Sequential File

 

?技术图片                                           ??技术图片                                           ?

索引顺序文件增加了用于支持随机访问的文件索引和溢出文件。索引提供了快速接近目标记录的查找能力。溢出文件类似于顺序文件中使用的日志文件,但是溢出文件中的记录可以根据它前面记录的指针进行定位。

 

一级索引中,索引文件的每条记录由关键域+指向主文件的指针构成。在多级索引中,最低一级的索引文件视为顺序文件,然后为该文件创建更高一级的索引文件。

 

主文件中的每条记录可以包含一个附加域,附加域是指向溢出文件的一个指针。当往文件中插入一条新纪录的时候,就被添加到溢出文件,然后修改主文件中逻辑顺序位于这条记录之前的记录,使其包含指向溢出文件中新纪录的指针。

 

Indexed  File

采用一种多索引的结构,每种可能成为查找条件的域都有一个索引,通过索引来访问记录。其结果是对记录的放置位置不再有限制,只有有一个索引的指针指向这条记录即可。此外,还可以使用长度可变的记录。

 

完全索引包含主文件中每条记录的索引项,为了便于查找,自身被组织成一个顺序文件。部分索引只包含那些有感兴趣域的记录的索引项。

 

索引文件大多用于对信息的及时性要求比较严格并且很少会对所有数据进行处理的应用程序中,如航空公司订票系统和商品库存控制系统。

 

Direct or Hashed File

?技术图片                                           ?

 

具有直接访问磁盘中任何一个地址已知的块的能力。使用基于关键字的散列,给定记录的键值或者通过hash函数转换的键值直接决定记录的物理地址。有很高的存取速度,但是会引起冲突。

 

文件分配

FAT:文件分配表:一个用于指明分配给一个文件的空间在辐存中的物理位置的表。每个文件都有一个文件分配表

DAT: 磁盘分配表:一个用于表示辅存中的哪些块是空闲的可以分配给文件的表

文件分配的主要问题:

1.当创建一个新文件的时候,是否一次性地给他分配所需要的最大空间

2.给文件分配的空间是一个或多个连续的单元,即分区portion。分区的大小应该是多少

3.为跟踪分配给文件的分区,应该使用哪种数据结构或者表(文件分配表FAT)?

 

文件分配方法?重要?

文件分配通常采用三种方法:连接、链接、索引:contiguous\chained\indexed

 

连续分配:在创建文件的时候,给文件分配一组连续的块。使用大小可变分区的预分配策略。在文件分配表中每个文件只需要一个表项,说明起始块和长度。有利于顺序处理和检索,但是会出现外部碎片,需要执行紧缩算法来释放磁盘中的额外空间。

 

?技术图片                                           ??技术图片                                           ?

 

链接分配:基于单个的块,链中的每一块都包含指向下一块的指针。文件分配表与连接一样。没有外部碎片,最适合顺序处理的顺序文件。但是局部性原理不再适用,需要一连串的访问磁盘的不同部分,需要周期性的进行合并。

?技术图片                                           ??技术图片                                           ?

 

索引分配:解决连续分配和链接分配的问题。每个文件在FAT中有一个一级索引,分配给该文件的分个分区的索引中都有一个表项。文件分配表指向该文件在磁盘上的索引块。分配可以基于固定大小,也可以是大小可变的分区。基于块来分配可以消除外部碎片,按大小来分配可以提高局部性。都需要进行文件整理,大小可变的情况下,可以减少索引,但是基于块的不能。支持顺序访问和直接访问,因此是最普遍的一种形式。

?技术图片                                           ??技术图片                                           ?

 

?技术图片                                           ?

 

 

文件系统

 

文件系统的软件架构

 

?技术图片                                           ?

 

 

文件管理的功能:文件操作、用户访问控制、文件组织、目录管理、审计(记录对指定文件的使用信息(如访问时间、用户等)、限额(限制每个用户能够建立的文件数目、占用外存空间大小等)

 

 

?技术图片                                           ?

 

?技术图片                                           ?

 

?技术图片                                           ?

操作系统-文件系统

标签:存储   target   display   dir   软件架构   span   速度   空闲   port   

原文地址:https://www.cnblogs.com/suntorlearning/p/11044577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!