0 00:00:00,000 --> 00:00:15,760 1 00:00:15,800 --> 00:00:19,760 这节课 我们来讨论文件系统 2 00:00:19,800 --> 00:00:23,240 文件系统呢是我们在操作系统当中 3 00:00:23,280 --> 00:00:26,920 负责持久数据保存的子系统 4 00:00:26,960 --> 00:00:27,640 我们在这里呢 5 00:00:27,680 --> 00:00:31,760 会首先介绍文件系统的基本概念 6 00:00:31,800 --> 00:00:33,920 然后是虚拟文件系统 7 00:00:33,960 --> 00:00:36,040 虚拟文件系统负责完成 8 00:00:36,080 --> 00:00:38,600 多种物理的文件系统 9 00:00:38,640 --> 00:00:42,000 它们之间对上提供的统一接口 10 00:00:42,040 --> 00:00:43,080 接下来一个部分呢 11 00:00:43,120 --> 00:00:45,600 是文件缓存和打开文件 12 00:00:45,640 --> 00:00:49,360 也就是说我在文件在读写的过程当中 13 00:00:49,400 --> 00:00:50,960 操作系统内部 14 00:00:51,000 --> 00:00:52,800 需要维护些什么样的信息 15 00:00:52,840 --> 00:00:54,720 那是在这部分里讨论 16 00:00:54,760 --> 00:00:56,000 接下来的三个部分呢 17 00:00:56,040 --> 00:00:59,440 是文件分配 空闲空间管理 18 00:00:59,480 --> 00:01:02,280 和冗余磁盘阵列 19 00:01:02,320 --> 00:01:03,160 这几个部分是 20 00:01:03,200 --> 00:01:07,000 讨论磁盘上存储数据的方法 21 00:01:07,040 --> 00:01:10,560 我们下面首先来讨论文件系统的概念 22 00:01:10,600 --> 00:01:16,280 首先什么是文件系统 什么是文件 23 00:01:16,320 --> 00:01:18,520 文件系统是操作系统当中 24 00:01:18,560 --> 00:01:21,080 管理持久数据的子系统 25 00:01:21,120 --> 00:01:22,600 在这儿呢它提供了 26 00:01:22,640 --> 00:01:26,160 数据存储和访问的功能 27 00:01:26,200 --> 00:01:27,240 具体说起来呢 28 00:01:27,280 --> 00:01:32,040 它是如何来组织持久保存的这些数据 29 00:01:32,080 --> 00:01:33,840 这些数据的组织 30 00:01:33,880 --> 00:01:36,320 放到文件系统当中的数据 31 00:01:36,360 --> 00:01:38,240 我如何来进行检索 32 00:01:38,280 --> 00:01:39,360 检索到了之后 33 00:01:39,400 --> 00:01:44,400 对于里头的数据我如何对它进行读写访问 34 00:01:44,440 --> 00:01:46,360 这是它的基本功能 35 00:01:46,400 --> 00:01:48,440 在我们现在用到的计算机系统呢 36 00:01:48,480 --> 00:01:50,240 大多数都有文件系统 37 00:01:50,280 --> 00:01:52,120 也就说你的这个计算机系统里 38 00:01:52,160 --> 00:01:54,200 只要涉及到数据的持久保存 39 00:01:54,240 --> 00:01:57,640 那么通常情况下它都会有文件系统 40 00:01:57,680 --> 00:01:58,560 广义的来讲呢 41 00:01:58,600 --> 00:02:01,480 我们现在用的谷歌它也是一个文件系统 42 00:02:01,520 --> 00:02:05,520 它在这里负责网上大量数据的保存和检索 43 00:02:05,560 --> 00:02:06,880 在这里头它最主要的功能 44 00:02:06,920 --> 00:02:09,640 还是在这里信息的检索 45 00:02:09,680 --> 00:02:10,960 什么是文件呢 46 00:02:11,000 --> 00:02:13,240 文件是具有符号名 47 00:02:13,280 --> 00:02:16,960 由字节序列组成的数据项的集合 48 00:02:17,000 --> 00:02:21,280 这里主要一个特征它是有文件名 49 00:02:21,320 --> 00:02:24,600 然后它的基本组成是一个字节序列 50 00:02:24,640 --> 00:02:28,040 文件是文件系统的基本数据单位 51 00:02:28,080 --> 00:02:30,920 也就说我存到文件系统当中的数据 52 00:02:30,960 --> 00:02:34,360 最小这个单位是以文件形式来存在的 53 00:02:34,400 --> 00:02:37,480 在这里头文件的名字呢 54 00:02:37,520 --> 00:02:39,440 是文件的标识符号 55 00:02:39,480 --> 00:02:41,560 我们在标识一个文件的时候 56 00:02:41,600 --> 00:02:44,560 通常情况下就用文件名来表示 57 00:02:44,600 --> 00:02:46,080 文件系统的功能呢 58 00:02:46,120 --> 00:02:47,880 我们有这样几个方面的功能 59 00:02:47,920 --> 00:02:53,320 首先第一个是为文件分配磁盘空间 60 00:02:53,360 --> 00:02:56,960 也就是说我在这里头管理一个文件 61 00:02:57,000 --> 00:02:59,720 它到底存在磁盘上的什么位置 62 00:02:59,760 --> 00:03:03,360 除了位置之外我们还会再有一个顺序 63 00:03:03,400 --> 00:03:05,320 这是已经分配给 64 00:03:05,360 --> 00:03:09,200 用来存数据的这些文件块 65 00:03:09,240 --> 00:03:11,840 再有一个呢是空闲空间的管理 66 00:03:11,880 --> 00:03:15,240 在磁盘上有很多的数据块 67 00:03:15,280 --> 00:03:16,880 可以来存储数据 68 00:03:16,920 --> 00:03:18,400 那么在这些数据块呢 69 00:03:18,440 --> 00:03:19,560 没存数据的时候 70 00:03:19,600 --> 00:03:21,880 这些数据块都分布在什么位置 71 00:03:21,920 --> 00:03:22,880 这是我们这里头 72 00:03:22,920 --> 00:03:25,840 管理空闲空间需要解决的问题 73 00:03:25,880 --> 00:03:28,080 我们需要记住它的位置 74 00:03:28,120 --> 00:03:29,800 我们在这里不需要它的顺序 75 00:03:29,840 --> 00:03:31,680 因为空闲的空间里头呢 76 00:03:31,720 --> 00:03:34,200 这个顺序对于我们来说是没有意义的 77 00:03:34,240 --> 00:03:36,520 再有一个是分配算法 78 00:03:36,560 --> 00:03:38,000 跟我们前面讲到的 79 00:03:38,040 --> 00:03:40,560 内存管理有类似的地方 80 00:03:40,600 --> 00:03:44,080 我在磁盘上有很多的空闲的磁盘块 81 00:03:44,120 --> 00:03:47,600 这时候我要分配一部分磁盘块 82 00:03:47,640 --> 00:03:50,080 来存文件数据的时候 83 00:03:50,120 --> 00:03:52,000 这时候我选哪一块 84 00:03:52,040 --> 00:03:53,360 这地方选择策略呢 85 00:03:53,400 --> 00:03:55,600 就是我们这个分配算法 86 00:03:55,640 --> 00:03:59,640 第二项功能呢是管理文件集合 87 00:03:59,680 --> 00:04:01,080 我有很多文件之后 88 00:04:01,120 --> 00:04:03,560 这些文件我怎么来管理它 89 00:04:03,600 --> 00:04:06,080 首先在这里要提供的一项功能是定位 90 00:04:06,120 --> 00:04:08,400 也就是说我给你一个文件名 91 00:04:08,440 --> 00:04:09,280 你需要告诉我 92 00:04:09,320 --> 00:04:12,200 这个文件名所对应的文件在哪 93 00:04:12,240 --> 00:04:14,920 找着它的位置读出它的内容 94 00:04:14,960 --> 00:04:17,160 这是定位需要做的 95 00:04:17,200 --> 00:04:19,080 第二个功能是说命名 96 00:04:19,120 --> 00:04:21,960 我们需要根据名字来找到文件 97 00:04:22,000 --> 00:04:24,000 这个名字你比如说在计算机里头 98 00:04:24,040 --> 00:04:26,640 我们很多时候是用数字来表示 99 00:04:26,680 --> 00:04:30,200 但这个数字呢对于人记忆是不方便的 100 00:04:30,240 --> 00:04:31,440 而我们的文件系统里头 101 00:04:31,480 --> 00:04:32,880 持久保存的数据呢 102 00:04:32,920 --> 00:04:35,120 通常情况下是要人能理解 103 00:04:35,160 --> 00:04:37,680 这时候我们会给它一个命名 104 00:04:37,720 --> 00:04:40,120 命名的方式在不同文件系统当中 105 00:04:40,160 --> 00:04:41,600 它有一些不同的做法 106 00:04:41,640 --> 00:04:43,640 和相应的一些限制 107 00:04:43,680 --> 00:04:44,840 第三个是说 108 00:04:44,880 --> 00:04:49,120 我如何把这些文件组织成一个整体 109 00:04:49,160 --> 00:04:51,160 那就是我们的文件系统结构 110 00:04:51,200 --> 00:04:52,920 文件的组织方式 111 00:04:52,960 --> 00:04:56,240 不同的需求这种组织方式会不一样 112 00:04:56,280 --> 00:04:59,520 第三个是说我持久保存数据 113 00:04:59,560 --> 00:05:03,000 就有一个数据可靠和安全问题 114 00:05:03,040 --> 00:05:05,560 首先安全是指文件系统里 115 00:05:05,600 --> 00:05:07,720 通常情况下从多个层次 116 00:05:07,760 --> 00:05:10,440 提供了数据安全的保护机制 117 00:05:10,480 --> 00:05:11,600 这是第一个 118 00:05:11,640 --> 00:05:13,280 第二个是可靠 119 00:05:13,320 --> 00:05:16,280 也就是说我的数据要想持久保存 120 00:05:16,320 --> 00:05:19,520 如果说在保存过程当中系统崩溃了 121 00:05:19,560 --> 00:05:23,200 存储介质出错了 或者说有其它攻击 122 00:05:23,240 --> 00:05:24,080 这时怎么办 123 00:05:24,120 --> 00:05:25,160 在文件系统里呢 124 00:05:25,200 --> 00:05:27,920 也会提供一系列的机制 125 00:05:27,960 --> 00:05:32,320 来对可靠性进行某种程度的增强 126 00:05:32,360 --> 00:05:36,160 这是文件系统提供的几个功能 127 00:05:36,200 --> 00:05:38,240 那这时候说我们对于文件 128 00:05:38,280 --> 00:05:39,960 我有一些什么样的描述 129 00:05:40,000 --> 00:05:42,560 这就是我们这里说到的文件属性 130 00:05:42,600 --> 00:05:46,320 文件属性是指我们前面已经说到的名字 131 00:05:46,360 --> 00:05:48,800 除了名字之外 还有其它一些信息 132 00:05:48,840 --> 00:05:51,160 比如说这个文件是什么类型的 133 00:05:51,200 --> 00:05:52,520 是一个可执行文件 134 00:05:52,560 --> 00:05:55,520 是一个文本文件等等这样一些信息 135 00:05:55,560 --> 00:05:59,320 然后这个文件存在什么地方 它有多大 136 00:05:59,360 --> 00:06:01,800 什么样的用户可以对它进行访问 137 00:06:01,840 --> 00:06:03,160 这是我们这里保护机制 138 00:06:03,200 --> 00:06:05,280 这个文件是谁创建的 139 00:06:05,320 --> 00:06:06,680 最开始的创建时间 140 00:06:06,720 --> 00:06:08,960 和最后一次修改的时间 141 00:06:09,000 --> 00:06:11,520 或者说最后一次访问的时间等等 142 00:06:11,560 --> 00:06:13,760 这些呢 在不同的文件系统里头 143 00:06:13,800 --> 00:06:16,200 维护了不同的文件属性 144 00:06:16,240 --> 00:06:17,840 这些属性呢起什么样的作用呢 145 00:06:17,880 --> 00:06:18,360 实际上在这里头 146 00:06:18,400 --> 00:06:20,360 这些属性是为了方便访问的 147 00:06:20,400 --> 00:06:21,920 为了更好方便访问 148 00:06:21,960 --> 00:06:24,480 把文件里的信息呢分成两部分 149 00:06:24,520 --> 00:06:26,360 一个是文件头 150 00:06:26,400 --> 00:06:29,400 文件头是存在文件系统元数据当中的 151 00:06:29,440 --> 00:06:30,640 文件信息 152 00:06:30,680 --> 00:06:32,480 这里存的主要内容是我们这里的属性 153 00:06:32,520 --> 00:06:36,240 和文件的存储位置和顺序 154 00:06:36,280 --> 00:06:37,920 有了这些文件头的信息之后 155 00:06:37,960 --> 00:06:38,680 我就能知道 156 00:06:38,720 --> 00:06:42,160 我要读写的文件数据到底在哪 157 00:06:42,200 --> 00:06:43,080 是些什么 158 00:06:43,120 --> 00:06:43,240 159 00:06:43,280 --> 00:06:43,720 160 00:06:43,760 --> 00:06:44,240 161 00:06:44,280 --> 00:06:44,640 162 00:06:44,680 --> 00:06:44,720