内存的主要使用者是进程,而外存的主要使用者是用户,外存中的信息可以离开进程独立的存在。
可将外存数据的集合体称为文件,将外存抽象成文件的集合。外存的管理者称为文件系统。
外存通常被划分为大小相等的存储块,每个存储块有一个地址(序号)。外存的基本访问单位为块。
1、外部存储器
(1)磁带:能永久保存大容量数据,顺序存取,存取速度慢,主要用于备份。
(2)磁盘:随机存取,可以定位并存取磁盘上任意存储块中的数据。
一次磁盘操作时间=寻道时间 + 旋转延迟时间 + 数据传输时间。
(3)光盘:容量大,便宜,结构与磁盘类似。
(4)U盘:Flash Memory,与内存类似,在掉电情况下内容不会丢失
(5)外存抽象
(6)分区与卷
2、外存管理
(1)分配策略
外存分配给文件 —— ①预分配(文件创建时为其分配存储空间);② 动态分配(按需分配)
(2)分配单位
分配单位可以是扇区、块、簇。综合考虑,常用的分配单位有以下两种:
①连续、变长大分配单位 ——NTFS
②不连续、定长小分配单位(块) ——EXT2/3/4
(3)空闲块管理(略写)
外存管理的首要任务是记录块的使用情况。
①空闲空间表法——适用于连续、变长大单位分配、
②空闲块链表法——小块链表适合于以块为单位的定长、动态分配;大块链表适合于连续的、变长分配。
③位图法——即可用于变长的连续分配,也可用于定长的非连续分配。
④空闲块成组链接法
3、文件物理结构
逻辑块是分配给文件的。在文件的生存周期中,它会请求追加和释放逻辑块,逻辑块内的数据会被读、写。
文件系统要为每个文件建立一个数据结构,记录它的各个文件块在外存中的位置(文件的各个数据块多对应的逻辑块)映射关系取决于文件在外存上的存储方式或存储结构(即文件的物理组织结构)。
(1)连续结构——可用作备份,光盘上大量使用
将文件数据连续存储在连续的逻辑块中,只需文件在外存上的开始位置和大小。
(2)串连结构:每个逻辑块中设立一个指针,指向文件的下一个逻辑块。
(3)索引结构:为每个文件建立一个索引表,在其中记录文件各数据块到逻辑块的映射关系。
(4)多重索引结构
为了方便扩充,应建立多重索引表(索引表分级,类似多级页表)
(5)ucore采用简化的多重索引结构。前12块(0-11)直接索引,12块以后简介索引。
每个sfs_disk
文件最大为 1024*4096 + 12*4096 字节。
4、文件控制块
(1)FCB文件控制块 —— 文件的档案,一个文件控制块唯一的描述一个文件。包含内容:
(2)一个文件有两种标识:文件系统用文件控制块和标志号描述整个文件;用户用文件名。
文件名到文件控制块的映射 --> 目录或文件夹
一个目录通常是一张表,其中的表项称为目录项,一个 目录项记录一个名字与一个FBC的对应关系。(目录项:文件名到文件的映射,即文件名与inode号的对应关系)
一个文件只能有一个FBC,但是可以有多个文件名。代表同一文件的不同名字可以位于不同的目录中。
①单级目录结构
②二级目录结构:用户名为第一级,文件为第二级
③树型目录结构:允许用户在自己的目录中再建立子目录。
目录树一个唯一的根,文件是树的叶子。标识文件的方法是路径名。
用户或进程当前的位置为当前工作目录,用户注册时的工作目录为他的home。
从根到某一个特定文件的路径称为绝对路径;从当前工作目录到特定文件的路径称为相对路径。(绝对路径是相对于主目录 home 的路径名;相对路径名是相对于其当前工作目录的路径名)
④非循环图目录结构
树型目录结构不支持共享,增加了共享以后的树变成了图。
非循环图目录结构允许一个文件或目录出现在多个父目录中。
ucore中FCB结构的nlink就是硬链接数。
(3)ucore一个存储块中仅保存一个目录项。目录项:文件名到文件的映射,即文件名与inode号的对应关系。ucore目录是一个目录项的数组。
EXE根目录文件实例:第一个名字“.”,第二个名字“..”,前两个inode号均为2。
(4)如果一个文件仅有一个名字,删除文件时要删除目录项和文件的FCB。如果文件有多个名字 --> 删除目录项不一定删除FCB。