i = (b - 1) DIV n + 1
j = (b - 1) MOD n + 1
$$
(2) 修改位示图,令 map[i,j] =0
Pros
可以容易地找到一个或一组连续的空闲分区。例如,需要找到 8 个相邻接的空闲盘块,只需在位示图中找出 8 个其值连续为“0”的位即可。
BitMap 占据空间为 Disk Space(Byte) ÷ (Block Size × 8),对于容量较小的磁盘,位示图占用的空间会很小
Cons
对于一个 16GB 的磁盘,若数据块大小为 512 字节,则位示图大小为 4MB,大约需要占用 8000 个磁盘块的存储空间。
很难一次性将该位示图全部装入内存。即使内存足够大,可以存放全部或绝大部分位示图数据,搜索一个很大的位示图将会降低文件系统的性能。
尤其当磁盘空间快用完,剩下的空闲磁盘块很少时,文件系统的性能将严重降低
将磁盘所有空闲盘块分组;
设置空闲盘块号栈,存放当前可用的一组空闲盘块的盘块号和栈中尚有的空闲盘块总数;
后一组的所有盘块号以及盘块总数登记在前一组的第一个盘块中……依次类推,组与组之间形成链接关系;
最后一组少登记一个盘块号,多登记一个空闲盘块链的结束标志。
空闲盘块的组织
空闲盘块的分配与回收
文件控制块(FCB):用于描述和控制文件的数据结构。它包括:
文件目录:文件控制块的有序集合。
对目录管理的要求如下:
(1)实现“按名存取”。
(2) 提高对目录的检索速度。
(3) 文件共享。
(4) 允许文件重名。
目录项的两种组织方式:
iNode(索引节点)是 Unix 和类 Unix 操作系统中的文件系统的一个重要概念。每个文件或目录在文件系统中都由一个 iNode 来表示。iNode 包含了关于文件系统对象(如普通文件、目录或者其他类型)的重要信息,包括:
- 文件大小
- 文件所有者和组
- 文件权限(读、写、执行)
- 文件创建、访问和修改的时间戳
- 文件的数据块的位置
iNode 并不包含文件名或文件的路径,这些信息是由目录文件维护的。目录文件包含了文件名到 iNode 的映射。这种设计允许在文件系统中实现一些复杂的功能,如硬链接和软链接。
需要注意的是,每个 iNode 都有一个唯一的 iNode 编号,这个编号在文件系统中用来唯一标识一个文件或目录。
目录文件及操作
目录文件:一个文件目录也被看做是一个文件,即目录文件。是多个文件的目录项构成的一种特殊文件。目录的操作包括
所有用户的全部文件目录保存在一张目录表中,每个文件的目录项占用一个表项。
Pros 简单,易于实现,能实现目录管理的基本功能——按名存取。
Cons 查找速度慢,不允许重名,不便于实现文件共享
dir_entry_1->file1dir_entry_1->file2...dir_entry_n->filen
主文件目录 MFD(Master File Directory)、用户文件目录 UFD(User File Directory)
Pros 一定程度解决了重名问题,提高了文件目录检索效率,能实现简单的文件共享
Cons 不便用户文件的逻辑分类;进一步解决重名、共享、检索效率等问题
MainFolder│├── User1│ ││ ├── file1│ ││ └── file2│├── User2│ ││ ├── file1│ ││ └── file2│└── User3 │ ├── file1 │ └── file2
多级目录/树形目录结构
Pros
Cons
查找一个文件按路径名逐层检查,由于每个文件都放在外存,多次访盘影响速度
★ 对目录进行查询的方式有两种:线性检索法和 Hash 方法:
使用一个和哈希表大小互质的步长,我们可以确保在经过足够多的步骤后,能够探测到哈希表中的每一个位置。这是因为两个互质的数的最小公倍数是它们的乘积,这意味着通过在原哈希值上加上步长,经过哈希表大小的步数后,我们可以覆盖到哈希表中的所有位置
文件共享的有效控制涉及两个方面:
控制同时存取
控制存取权限
控制授权用户以合法的方式访问文件,包括:
在树型结构的目录中,当有两个(或多个)用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两个(或多个)用户的目录中,才能方便地找到该文件。此时该文件系统的目录结构已不再是树型结构,而是个有向非循环图。
实现文件共享的实质就是可以从不同地方打开同一个文件
打开文件的首要步骤就是找到文件的目录项,读取文件在外存的起始地址。
实现文件共享的方式:
文件目录项中设置一个链接指针,用于指向共享文件的目录项。
/root│├── /dir1│ ││ ├── file1 (链接指针-> /root/dirShared/file)│├── /dir2│ ││ ├── file2 (链接指针-> /root/dirShared/file)│└── /dirShared │ └── file
也称为【硬连接】Hard Link
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
文件的物理地址及其它的文件属性等信息,不再是放在目录项中,而是放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针。
/root│├── /dir1│ ││ ├── file1 (iNode指针-> iNode#123)│ ││ └── file3 (iNode指针-> iNode#124)│├── /dir2│ ││ ├── file2 (iNode指针-> iNode#123)│ ││ └── file4 (iNode指针-> iNode#125)│└── iNode Table │ ├── iNode#123 (物理地址, 文件属性, 共享计数: 2) │ ├── iNode#124 (物理地址, 文件属性, 共享计数: 1) │ ├── iNode#125 (物理地址, 文件属性, 共享计数: 1) │ └── ...
在索引结点中还应有一个链接计数 count,用于表示链接到本索引结点(亦即文件)上的用户目录项的数目
为使 B 能共享 C 的一个文件 F,可以由系统创建一个 LINK 类型的新文件,也取名为 F 并将 F 写入 B 的目录中,以实现 B 的目录与文件 F 的链接;在新文件中只包含被创文件 F 的路径名。这样的链接方法被称为符号链接.
新文件中的路径名,则只被看作是符号链。当 B 要访问被链接的文件 F 且正要读 LINK 类新文件时,将被 OS 截获,OS 根据新文件中的路径名去读该文件,于是就实现了用户 B 对文件 F 的共享。
在利用符号链方式实现文件共享时,只有文件主才拥有指向其索引结点的指针,而共享该文件的其它用户,则只有该文件的路径名,并不拥有指向其索引结点的指针。
Pros 能连接任何机器上的文件。每增加一个连接,就增加一个文件名,各用户使用自己的名字去共享文件。
Cons 备份可能会产生多个拷贝。
符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
touch file ln file hard_link_f1 # 硬连接 ln -s file sym_link_f1 # 软连接 ls -li# 输出如下,硬链接的inode相同,count=2;软连接的inode不同,count=1total 0122779 -rw-r--r-- 2 gjx gjx 0 May 22 15:03 file122779 -rw-r--r-- 2 gjx gjx 0 May 22 15:03 hard_link_f1122781 lrwxrwxrwx 1 gjx gjx 4 May 22 15:04 sym_link_f1 -> file
特性 | 硬链接 | 软链接 |
---|---|---|
跨文件系统 | ❌ 不支持 | ✅ 支持 |
链接目录 | ❌ 不支持 | ✅ 支持 |
原文件删除后 | 链接仍可访问文件内容 | 链接失效(断链) |
文件修改 | 所有硬链接同步修改 | 访问时修改会同步到原文件 |
文件属性 | 与原文件完全相同 | 有自己的属性(如权限) |
文件大小 | 与原文件相同 | 等于路径字符串的长度 |
inode编号 | 与原文件相同 | 不同于原文件 |
统一资源定位器 URL (Uniform Resource Locator)是 Internet 上用来链接超文本文件的一种方法。
它可以链接同一台计算机中的本地文件,也可链接 Internet 中任何主机上的远程文件。
一个完整的 URL 包括访问文件的方法(协议)、文件所在的主机域名、目录路径名和文件名几部份。例如
file:///C:/Users/YourName/Documents/file.txthttp://www.uestc.edu.cn/templates/index2k3/index.html
不同对象允许实施的操作各不相同。例如,文件可施加读、写、执行等操作,信号量只能施加 wait()
和signal()
操作。
因此,系统为所有对象设置一个允许进程实施操作的操作集,任何对对象的操作必须符合操作集中的规定,防止未授权进程访问对象。
File System