0 00:00:00,000 --> 00:00:06,320 1 00:00:06,360 --> 00:00:09,360 那上操作系统实验课的目的是什么呢 2 00:00:09,400 --> 00:00:12,920 最主要的目标是在我们操作系统原理 3 00:00:12,960 --> 00:00:16,080 和操作系统设计实现上面建一座桥梁 4 00:00:16,120 --> 00:00:19,760 能够辅助同学能够更好深刻理解 5 00:00:19,800 --> 00:00:22,040 操作系统基本概念怎么产生的 6 00:00:22,080 --> 00:00:25,600 怎么具体实现的 这是一个很重要目标 7 00:00:25,640 --> 00:00:30,000 另一方面我们希望同学通过的操作系统实验 8 00:00:30,040 --> 00:00:33,960 能够对操作系统设计有个全局的感觉 全局观 9 00:00:34,000 --> 00:00:36,560 这一点也是很重要的一个特点 10 00:00:36,600 --> 00:00:38,360 因为操作系统相对而言 11 00:00:38,400 --> 00:00:42,000 在大学期间是同学能够碰到一个 12 00:00:42,040 --> 00:00:45,400 相对比较大型比较复杂的软件系统 13 00:00:45,440 --> 00:00:50,080 那么你怎么能够很好在一个全局的角度把握它 14 00:00:50,120 --> 00:00:53,720 能够对它进行改进扩展分析理解等等 15 00:00:53,760 --> 00:00:56,000 这对我们同学提供新的挑战 16 00:00:56,040 --> 00:00:59,720 这也是一个能力的锻炼和培养 17 00:00:59,760 --> 00:01:04,440 第三方面其实我们也知道操作系统 18 00:01:04,480 --> 00:01:08,080 它的实现相对来说还是比较复杂的 19 00:01:08,120 --> 00:01:10,320 并不是说我们每个同学 20 00:01:10,360 --> 00:01:13,840 都需要去能够对它进行很深入的理解 21 00:01:13,880 --> 00:01:15,840 然后能够对它进行改进扩展 22 00:01:15,880 --> 00:01:17,320 甚至从头实现一个 23 00:01:17,360 --> 00:01:19,320 其实提出了一个很高的要求 24 00:01:19,360 --> 00:01:22,360 我们其实也知道同学一般会分三等 25 00:01:22,400 --> 00:01:24,440 针对不同的同学我们其实应该有不同方法 26 00:01:24,480 --> 00:01:27,480 所以说我们强调什么呢 差异化教学 27 00:01:27,520 --> 00:01:29,720 那差异化教学体验在什么地方呢 28 00:01:29,760 --> 00:01:33,200 对于高水平 中等水平和较弱水平的同学 29 00:01:33,240 --> 00:01:35,520 我们分别有不同的要求 30 00:01:35,560 --> 00:01:39,520 对于高水平的同学在他完成基本的操作系统实验情况下 31 00:01:39,560 --> 00:01:41,760 我们希望他去做创新的实验 32 00:01:41,800 --> 00:01:45,040 甚至挑战一些没有尝试过的一些东西 33 00:01:45,080 --> 00:01:46,640 比如说举个例子 34 00:01:46,680 --> 00:01:50,400 现在的ucore它没有去对多核处理器有支持 35 00:01:50,440 --> 00:01:52,360 我们有没有同学可以挑战一下 36 00:01:52,400 --> 00:01:56,560 实现一个对多核处理器支持的这么一个ucore操作系统 37 00:01:56,600 --> 00:01:59,480 这是一个可以去尝试一个工作 38 00:01:59,520 --> 00:02:01,400 第二个对于中等同学来说 39 00:02:01,440 --> 00:02:03,560 我们最基本的要求是什么呢 40 00:02:03,600 --> 00:02:07,720 就是能够完成我们布置的基本实验 41 00:02:07,760 --> 00:02:10,080 你完成了基本实验 其实就基本说 42 00:02:10,120 --> 00:02:15,120 能够把我们操作系统原理上面的一些知识点对应起来 43 00:02:15,160 --> 00:02:16,520 在很大程度上体现了 44 00:02:16,560 --> 00:02:19,560 我们操作系统原理课讲的知识点 45 00:02:19,600 --> 00:02:23,880 那么你能够知道知识点怎么回事 具体实现怎么回事 46 00:02:23,920 --> 00:02:26,760 通过这样的话就可以使得同学 47 00:02:26,800 --> 00:02:30,040 对于操作系统理解会更加深刻 48 00:02:30,080 --> 00:02:33,520 对于比较弱的同学 我们希望他能够理解代码 49 00:02:33,560 --> 00:02:37,840 他也许编程还确实无法完成我们的实验 50 00:02:37,880 --> 00:02:40,640 但是我们也提供了实验的答案 51 00:02:40,680 --> 00:02:43,520 所以说通过理解这个代码 52 00:02:43,560 --> 00:02:45,720 他能够知道原来操作系统 53 00:02:45,760 --> 00:02:47,480 是这么来完成这么一个功能 54 00:02:47,520 --> 00:02:49,560 比如说我们后面讲到的内存管理 55 00:02:49,600 --> 00:02:54,360 文件系统进程调度等等 这些他能把代码读懂 56 00:02:54,400 --> 00:02:56,840 能够运行起来 能够调试分析它 57 00:02:56,880 --> 00:02:59,400 也可以很好地去把我们原理 58 00:02:59,440 --> 00:03:02,120 和我们实验给对接起来 59 00:03:02,160 --> 00:03:04,760 这是我们说对于相对来说比较弱的同学 60 00:03:04,800 --> 00:03:10,320 他的要求 这也是对差异化教学的一种尝试 61 00:03:10,360 --> 00:03:14,680 为此我们就要设计相应的操作系统实验 62 00:03:14,720 --> 00:03:18,960 我们主要思路是基于一些大量的开源软件 63 00:03:19,000 --> 00:03:23,000 来从各个层面来使的同学们更好掌握OS 64 00:03:23,040 --> 00:03:24,320 首先你的实验环境是什么 65 00:03:24,360 --> 00:03:27,280 就是我们这里面由于大量的工具是基于Linux 66 00:03:27,320 --> 00:03:30,640 所以说我们希望同学能够在Linux环境中 67 00:03:30,680 --> 00:03:33,480 来开展实验的过程 这是一个 68 00:03:33,520 --> 00:03:35,960 第二个你需要去理解代码 69 00:03:36,000 --> 00:03:37,760 理解代码有很多代码有这样的工具 70 00:03:37,800 --> 00:03:41,320 比如说我们讲的Eclipse understand 71 00:03:41,360 --> 00:03:43,960 这些工具都可以便于你去从一个细节 72 00:03:44,000 --> 00:03:47,040 或者从一个全局的角度来看这个代码 73 00:03:47,080 --> 00:03:49,360 还有就是生成一些自动文档 74 00:03:49,400 --> 00:03:52,880 也是便于理解和分析的 比如Doxygen 75 00:03:52,920 --> 00:03:55,040 你能够把你这个代码能够编译成 76 00:03:55,080 --> 00:03:58,680 最后能够执行的机器码 你需要一些编译器 77 00:03:58,720 --> 00:04:01,040 GCC Make 等等一系列辅助工作 78 00:04:01,080 --> 00:04:05,960 来帮你来把你写代码变成最终的OS 79 00:04:06,000 --> 00:04:08,840 一个可以执行的执行码 80 00:04:08,880 --> 00:04:11,000 那你编好了OS之后你要运行 81 00:04:11,040 --> 00:04:12,360 那运行在什么地方呢 我们有两种 82 00:04:12,400 --> 00:04:15,800 一种是说我们可以跑在真实的机器里面 83 00:04:15,840 --> 00:04:20,200 比如说我们这里面ucore针对是32个X86机器 84 00:04:20,240 --> 00:04:21,720 我们可以用真的机器来跑 85 00:04:21,760 --> 00:04:23,240 当然这相对来说比较麻烦一点 86 00:04:23,280 --> 00:04:25,760 我们也可以基于模拟器比如说QEMU 87 00:04:25,800 --> 00:04:28,920 它是一个软件 它可以模拟出一台X86的机器 88 00:04:28,960 --> 00:04:32,280 这个上面去跑我们编写的OS 89 00:04:32,320 --> 00:04:35,440 但是你在编写的过程中还可能出错 90 00:04:35,480 --> 00:04:37,920 出错我们需要调试 我们有调试工具 91 00:04:37,960 --> 00:04:42,440 比如说基于GDB和QEMU来进行调试 92 00:04:42,480 --> 00:04:44,320 而且我们还可以基于集成开发环境 93 00:04:44,360 --> 00:04:48,640 比如Eclipse的CDT来进行编辑 94 00:04:48,680 --> 00:04:52,720 分析 运行 调试 整个这个环节的工作 95 00:04:52,760 --> 00:04:55,920 更加简化 大家在完成实验中的难度 96 00:04:55,960 --> 00:04:57,800 这是我们提供一系列工具 97 00:04:57,840 --> 00:05:01,000 所有这些工具都在Linux里有很好的支持 98 00:05:01,040 --> 00:05:04,080 也有同学尝试在Windows里跑 也有可能 99 00:05:04,120 --> 00:05:06,360 配置的环境相对来说更加复杂一些 100 00:05:06,400 --> 00:05:09,120 所以我们这里面鼓励大家基于Linux 101 00:05:09,160 --> 00:05:12,280 来进行整个实验环境的建设 102 00:05:12,320 --> 00:05:14,320 和最后的实验过程的完成 103 00:05:14,360 --> 00:05:19,160 我们可以看看实验内容里面主要包含哪方面 104 00:05:19,200 --> 00:05:22,640 跟我们操作系统课的知识点是对应的 105 00:05:22,680 --> 00:05:25,800 我们一开始会讲到中断 外设 106 00:05:25,840 --> 00:05:28,480 你这个操作系统针对的机器 107 00:05:28,520 --> 00:05:32,200 针对一台计算机来进行管理和处理 108 00:05:32,240 --> 00:05:35,320 那么这里面会涉及到相应的IO管理和中断管理 109 00:05:35,360 --> 00:05:37,400 这是一块 这是跟外设相关的 110 00:05:37,440 --> 00:05:41,280 第二块跟我们计算机内存相关 111 00:05:41,320 --> 00:05:43,600 内存管理 它怎么有效管理内存 112 00:05:43,640 --> 00:05:46,880 来放置我们的代码和我们的数据 113 00:05:46,920 --> 00:05:48,920 第三个跟我们CPU相关 114 00:05:48,960 --> 00:05:52,080 那怎么有效的利用CPU来完成相应的工作 115 00:05:52,120 --> 00:05:53,840 需要分时 把这个CPU的时间 116 00:05:53,880 --> 00:05:57,480 分给不同的程序去运行完成特定的工作 117 00:05:57,520 --> 00:06:00,640 这也是我们操作系统很重要一个管理过程 118 00:06:00,680 --> 00:06:03,960 还有就是涉及到当多个程序在一起跑的时候 119 00:06:04,000 --> 00:06:07,360 它们有一些并发同步的一些管理 120 00:06:07,400 --> 00:06:09,320 这个也需要我们操作系统来保证 121 00:06:09,360 --> 00:06:13,240 才能使得整个程序正常工作 122 00:06:13,280 --> 00:06:15,120 否则就会出现类似我们说的 123 00:06:15,160 --> 00:06:19,720 后面我们会讲到死锁等等一系列问题 124 00:06:19,760 --> 00:06:24,240 还有最后你这些数据 你这些代码需要永久存储 125 00:06:24,280 --> 00:06:26,760 需要长期存储的环境 那这个环境是什么呢 126 00:06:26,800 --> 00:06:30,720 我们说的这个 我们一般都知道有个硬盘 磁盘等等 127 00:06:30,760 --> 00:06:34,760 但是操作系统为了能便于我们用户应用程序 128 00:06:34,800 --> 00:06:38,000 放置它的数据和代码 我们设计了文件系统 129 00:06:38,040 --> 00:06:42,520 从而更简单完成对操作系统管理 130 00:06:42,560 --> 00:06:46,240 这些部分都是覆盖在我们8个实验中 131 00:06:46,280 --> 00:06:50,920 我们会在实验过程中来体会讲到这些原理 132 00:06:50,960 --> 00:06:53,880 具体在OS是怎么实现的 133 00:06:53,920 --> 00:06:55,720 这是我们希望做到的 134 00:06:55,760 --> 00:06:58,160 那为了减少这个代码量其实大家都知道 135 00:06:58,200 --> 00:07:03,760 像比如说Linux Windows那是上千万行的代码 136 00:07:03,800 --> 00:07:07,640 太大了 不要说学生了 就是一个资深的工程师 137 00:07:07,680 --> 00:07:09,640 也很难把它全部掌握到 138 00:07:09,680 --> 00:07:12,120 所以我们希望能够减少代码规模量 139 00:07:12,160 --> 00:07:14,240 使得学生在有限时间内 140 00:07:14,280 --> 00:07:17,400 比如一个学期能够去掌握和理解这个代码 141 00:07:17,440 --> 00:07:20,640 我们理解是说大概控制在一万行代码量之内 142 00:07:20,680 --> 00:07:25,040 从Lab1到Lab8 Lab1可能只有几百行代码 143 00:07:25,080 --> 00:07:27,840 到Lab8大约控制在一万行代码以内 144 00:07:27,880 --> 00:07:32,840 从而可以实现对OS的更深入的理解 145 00:07:32,880 --> 00:07:37,080 同时我们提供的相应的讲义和文档来帮助同学 146 00:07:37,120 --> 00:07:37,160 甚至我们答案也提供大家 147 00:07:37,200 --> 00:07:38,640 可以更好的去理解和掌握实验是怎么完成的