-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
liuchanglin
committed
Feb 27, 2020
1 parent
ab7c006
commit b3ced4d
Showing
15 changed files
with
62 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions
60
Operating.System.Concepts中文/part six/chapter 6 文件系统/文件系统.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
## File System | ||
|
||
文件收集了创建者定义的相关信息。操作系统会将文件映射到物理上的大存储设备。一个文件系统描述了文件是如何映射到物理设备上的,以及如果被用户和程序访问和操作的。 | ||
|
||
访问物理存储通常比较慢,因此文件系统必须能够高效率地访问。对文件系统还有其他需求,包括提供支持文件高效和远程访问等。 | ||
|
||
## File -System Interface | ||
|
||
对于大多数用户,文件系统是最可见的操作系统的功能之一。它提供了操作系统和计算机系统上所有用户的数据和程序的在线存储和访问机制。文件系统包含两个不同的部分:文件的采集部分,保存相关的数据;一个目录结构,组织和提供关于系统上所有文件的信息。大多数文件系统位于存储设备上,这部分已经在第11章节进行过讲解,并在后续章节继续讨论。本章节中,我们会讨论多进程,多用户和多计算机间共享文件的语义。最后,我们会讨论文件防护的方法,用于在多用户时控制哪些用户可以访问文件以及如何访问文件的场景。 | ||
|
||
### 13.1 File Concept | ||
|
||
计算机可以将信息存储在多种存储媒体中,如NVM设备,HDDs,磁带和光盘。因此可以方便地使用计算机系统,操作系统提供了存储信息的统一逻辑视图。操作系统将存储设备的物理特性进行了抽象,并定义了一种逻辑存储单位,文件。操作系统会将文件映射到物理设备。这类存储设备通常不易丢失数据,因此在系统重启后能够保存内容不变。 | ||
|
||
一个文件就是相关信息的采集器,并将采集到的信息记录到二级存储中。从用户的视角看,一个文件是从逻辑二级存储上分配的最小存储块,即,除非使用文件,否则数据不能写入二级存储。通常,文件表项为程序(源和目标格式)和数据。数据文件可能是数字的,字母的,字母数字或二进制的。文件可以是自由格式,如文本文件,也可以进行严格的格式化。通常,一个文件是顺序的比特位,字节,行或记录等,具体含义由文件创建者和用户定义。文件的概念特别广泛。 | ||
|
||
由于文件是用户和程序用来保存或检索数据的方式,以及文件的用途如果广泛,因此它们的用途已经超出其原始范围。例如,UNIX,Linux和其他一些操作系统提供了`proc`文件系统提供了访问系统信息的文件系统接口。 | ||
|
||
创建者定义了文件的信息。一个文件中可能存储了很多不同类型的信息,源或可执行文件,数据或文本数据,照片,音乐,视频等等。一个文件有一个特定的结构,结构类型取决于文件类型。一个文本文件是一系列组织为行(或页)的字符。一个源文件是一系列功能,每个功能进一步被组织为声明,后跟可执行语句。一个可执行文件是一系列代码段,加载器可以将其加载到内存并执行。 | ||
|
||
#### 13.1.1 File Attributes | ||
|
||
一个文件的名称指代该文件,可以方便用户的使用。一个名词通常是一个字符串,如`example.c`。一些系统上的文件名字会有大小写上的不同,而其他系统则不会。当命名一个文件时,该文件会独立于进程,用户,甚至创建该文件的系统。例如,一个用户可能会创建example.c,而其他用户可能会通过指定名称来编辑该文件。文件的所有者可能会将该文件写入USB设备,通过邮件附件发生,或通过网络进行拷贝,而在目标系统上,该文件仍然叫example.c。除非有共享和同步方案,使得第二个副本可以独立于第一个副本,并可以单独更改。 | ||
|
||
不同的操作系统上文件的属性不同,但通常包括如下内容: | ||
|
||
- 名字:符号文件名是唯一使用用户可读格式保存的信息 | ||
- 识别:唯一标签,通常是一个数字,标识了文件系统中的文件。非用户可读名称。 | ||
- 类型:系统使用该信息支持不同类型的文件。 | ||
- 位置:该信息是指向文件所在的设备中的位置指针。 | ||
- 大小:当前文件的大小(单位为字节,字或块)以及可能存在的该属性允许的最大长度。 | ||
- 防护:访问控制信息确定了哪些用户可以读取,写入,执行等。 | ||
- 时间戳和用户识别:可能会保存创建,上一次修改和最后使用的信息。这些信息可以用户防护,安全和使用监控 | ||
|
||
一些新的文件系统也支持扩展文件属性,包括文件的字符编码和安全属性(如检验码)。图13.1描述了macOS上的文件信息窗口,展示了一个文件的属性。 | ||
|
||
所有文件的信息都保存在目录结构中,该目录结构与文件一起保存在相同的设备上。通常一个目录表项包含文件名字以及文件的唯一标识符。该标识符可以定位其他文件属性。每个文件可能会使用大于1千字节来记录文件信息。在有很多文件的系统中,目录大下可能是兆字节或千兆字节。由于目录必须与文件的易失性匹配,与文件类型,它们必须存储在设备上,并且通常会在需要时部分地存储到内存中。 | ||
|
||
|
||
|
||
|
||
|
||
![13.1](./images/13.1.png) | ||
|
||
#### 13.1.2 File Operations | ||
|
||
文件是一种抽象的数据类型。为了正确定义一个文件,我们需要考虑需要使用该文件进行的操作。操作系统可以提供创建,写,读,重定位,删除和截断文件的系统调用。让我们看一下操作系统在这其中操作中必须做些什么事情。由此可以看出其他类型的操作,如重命名文件。 | ||
|
||
- 创建文件。需要两个步骤来创建一个文件。首先在文件系统中找到属于该文件的空间。在14章中将会讨论如何为文件分配空间。第二在目录中创建新文件的表项。 | ||
- 打开文件。并不是所有的文件操作都需要指定一个文件名(会导致操作系统校验名称和访问权限等),但除了创建和删除外的操作都需要首先`open()`一个文件。如果打开成功,打开调用会返回文件句柄,作为其他调用的一个参数。 | ||
- 写文件。为了写一个文件,系统调用需要指定打开的文件句柄和写入文件的信息。系统必须保存一个写指针,用于指定顺序写情况下下一次发生写文件的(位置的)指针。每次发生写后都需要更新写指针。 | ||
- 读文件。 | ||
- 在文件中重定位。将一个给定的值赋予打开文件的当前文件位置指针。在一个文件中进行重定位并不需要实际的I/O。这种文件操作称为文件查找(seek)。 | ||
- 删除文件。为了删除一个文件,需要在目录种查找被命名的文件。在找到相关的目录表项后,释放所有文件空间,并清除或标记该目录表项为空闲,这样释放后的可空间可以被其他文件所使用。注意一些系统允许硬链接,即相同的文件有多个名字(多个目录表项)。这种情况下,在所有链接删除前,实际的文件空间不会被释放。 | ||
- 截断文件。用户可能会希望删除文件内容,但保留其属性。该功能允许除了文件长度外的其他属性保持不变(而不是强制用户删除文件然后重新创建)。文件长度可以被重置为0,此时会释放文件空间。 | ||
|
||
这七个基本的操作构成了最基础的文件操作。其他通用的操作包括 | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters