文件系统与目录:文件系统

主存具有易失性,在关掉电源后储存其中的信息就会丢失,而二级存储设备则具有永久性。

常见的二级存储设备包括磁盘驱动器,软盘等等,由于这里讨论的许多概念具有普适性,故我们以磁盘驱动器为例。

在磁盘中,信息存储在文件中。所谓文件,就是相关数据的有名集合,用于组织二级存储设备。文件系统则是操作系统为它管理的文件提供的逻辑视图,这种管理方式通常是利用目录来实现,而这是后话了。

那么,在上面搭建的框架中,我们需要解决的问题就包括:

  1. 文件如何存储信息
  2. 文件的类型
  3. 对文件的操作

一,文件如何存储信息?

广义上,所有的文件都可以被归类为文本文件和二级制文件。先看定义:

文本文件(text file)指的是包含字符的文件

二进制文件(binary file)指的是包含特定格式的数据的文件,要求给位串应该特定的解释。

这可能令人有些云里雾里:文本文件的信息不是用二进制存储的吗?  实际上,两者的区别不在物理存储上,而在于逻辑上。两者只是在编码方式上不同,或者说是格式化数位的方式不同。对于文本文件,它只存储字符,例如用户的账户信息,源文件等都以文本文件方式存储。文本文件格式化数位的方式为8位(ASCII)或16位(Unicode),也就是当你用文本工具打开一个文件,计算机会读取文件物理上所对应的二进制比特流,并8(16)个比特8(16)个比特地来解释这个文件流。而我们常用的记事本无论打开什么文件都按既定的字符编码读取,所以遇到二进制文件时,很可能就出现乱码。这是因为二进制文件是变长编码的,因为是值编码,多少个比特代表一个值,完全由自己决定,只有用专门解释这种类型的数据的程序才能读写。比如,存储图片的文件类型有位图、GIF、JPEG、TITF等,即使它们存储的是同一张图,存储信息的方式也不同,所以你不能用处理JPEG的程序去处理GIF文件。

这里再简单补充说一这里的 8bit读取和 16bit读取,实际上ASCII字符集是本是最为常见的格式,但它只能通过有限的字符,表达有限的几种语言,所以只能对其扩展来,但各地扩展方式不一样,这样就会造成许多麻烦,所以ISO国际标准化组织便对所有的文字符号进行统一的编码,制定了Unicode字符集,而为了适应不同的应用环境,提高整体编码效率,我们又能看到 UTF-8、UTF-16 等各种不同的编码方式,其中最常见的是 UTF-8,这种编码能够向下兼容 ASCII

二,文件的类型

文本文件和二进制文件说到底是格式化数位的不同,规定的是计算机如何读取二级制比特流,而对于具体的一个文件,我们仍需要一个对应的特定类型的信息以供操作系统识别,这样操作系统才能为它找到对应的操作方式。

说明文件类型的常用方法是将文件类型作为文件名的一部分,通常用点号来划分成主文件名和文件扩展名,而文件扩展名就是文件名中说明文件类型的部分。根据文件类型,操作系统会通过一个识别文件类型的清单,把每种文件类型与特丁的应用程序关联起来,依次实现对文件的有效操作。比如,当你在开发Java程序时使用特定的编辑器,那么可以在操作系统中注册.java文件扩展名,并把它关联到要使用的编辑器,此后每单要使用打开具有.java名的文件时,操作系统都会运用这个编辑器。有些文件扩展名是默认和特定的程序关联 在一起的,如果需要可以修改。

注:文件扩展名只是指明了操作系统对文件的操作方式,你可以任意更改扩展名,这并不会改变文件中的数据和其内部格式,但你使用扩展名错误的文件时只会得到错误信息。

三,对文件的操作

 在操作系统下,我们对文件的操作包括但不限于:创建、删除、打开、关闭、读取、写入、修改、重命名、复制等。

为了实现上述操作,操作系统维护了了一个表来说明可用内存块,并为每个目录也维护了一个表来记录目录下文件的信息。当你创建一个文件时,操作系统先找到可用的内存空间,在吧文件的条目加入目录表中,记录下文件的名字与对应位置。当你删除一个文件时,操作系统首先声明文件使用的空间为空,其后删除目录中的相关条目。当你要读写文件时,对于大多数操作系统,你要先打开文件,操作系统会为之维护一个小表来记录当前打开的文件们,避免你的每项操作都要从大表中去检索文件,然后你关闭文件后,操作系统会删除小表中的相关条目。其他操作这里就不一一赘述了。

我们来谈谈对于文件的访问与保护。文件的保护机制大部分是通过操作系统设置权限来限制。文件的访问方式有很多,比如顺序访问法和直接访问法,顺序访问法是以线性方式来访问文件中的数据,而直接文件访问法是通过指定的记录编号来访问文件中的数据。

本文大部分摘自《计算机科学概论》,描述不当之处,还望指出。

原文地址:https://www.cnblogs.com/OKDA/p/13394634.html