4.存储和文件
1.文件
文件命名
文件结构
文件类型
-
普通文件
- 普通文件一般分为ASCII文件和二进制文件。ASCII文件由多行正文组成。在某些系统中,每行用回车符结束,其他系统则用换行符结束。有些系统还同时采用回车符和换行符(如MS-DOS)。文件中各行的长度不一定相同。
- ASCII文件的最大优势是可以显示和打印,还可以用任何文本编辑器进行编辑。
- 其他与ASCII文件不同的是二进制文件。打印出来的二进制文件是无法理解的、充满混乱字符的一张表。通常,二进制文件有一定的内部结构,使用该文件的程序才了解这种结构。
-
目录
-
字符特殊文件
- 和输入/输出有关,用于串行I/O类设备,如终端、打印机、网络等。
-
块特殊文件
- 用于磁盘类设备。
文件读取
顺序存取- 随机存取
文件属性
文件都有文件名和数据。另外,所有的操作系统还会保存其他与文件相关的信息,如文件创建的日期和时间、文件大小等。这些附加信息称为文件属性(attribute),有些人称之为元数据(metadata)。文件的属性在不同系统中差别很大。一些常用的属性在图4-4中列出,但还存在其他的属性。

2.目录
结构
- 一级目录系统
- 层次目录系统

路径名

3.文件系统的实现
文件系统布局

多数磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统。磁盘的0号扇区称为主引导记录(Master Boot Record,MBR),用来引导计算机。在MBR的结尾是分区表。该表给出了每个分区的起始和结束地址。表中的一个分区被标记为活动分区。
在计算机被引导时,BIOS读入并执行MBR。MBR做的第一件事是确定活动分区,读入它的第一个块,称为引导块(boot block),并执行之。引导块中的程序将装载该分区中的操作系统。为统一起见,每个分区都从一个启动块开始,即使它不含有一个可启动的操作系统。
文件的实现
- 连续分配
- 把每个文件作为一连串连续数据块存储在磁盘上
- 实现简单,记录第一块的磁盘地址和文件的块数即可
- 读操作更好
- 缺点: 磁盘碎片

-
链表分配
- 没有磁盘碎片
与连续分配方案不同,这一方法可以充分利用每个磁盘块。不会因为磁盘碎片(除了最后一块中的内部碎片)而浪费存储空间。同样,在目录项中,只需要存放第一块的磁盘地址,文件的其他块就可以从这个首块地址查找到。
- 随机存取缓慢,需要链表查找
- 指针占去了一些字节
-
在内存中采用表的链表分配
- 如果取出每个磁盘块的指针字,把它放在内存的一个表中,就可以解决上述链表的两个不足。
- 内存中的这样一个表格称为文件分配表(File Allocation Table,FAT)。
- 保留所有磁盘块的链接表的表大小正比于磁盘自身的大小,磁盘越大,这个表可能很大。

- i节点
- 给每个文件赋予一个称为i节点(index-node)的数据结构,其中列出了文件属性和文件块的磁盘地址。
- 只有在对应文件打开时,其i节点才在内存中
- i节点机制需要在内存中有一个数组,其大小正比于可能要同时打开的最大文件个数。它与磁盘无关
- 相对于在内存中采用表的方式而言,这种机制具有很大的优势,即只有在对应文件打开时,其i节点才在内存中
目录的实现
所有目录项大小一样的实现
非-所有目录项大小一样的实现
“有三个文件,project-budget、personnel和foo”
实现
- NTFS
- FAT
- EXT2
- https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/59.html
- HFS (苹果)