0 00:00:15,080 --> 00:00:16,200 各位同学 大家好 1 00:00:16,240 --> 00:00:19,400 我是陈渝 清华大学计算机系的老师 2 00:00:19,440 --> 00:00:22,440 我和向勇老师负责给大家上操作系统这门课 3 00:00:22,480 --> 00:00:25,160 我主要负责操作系统实验这个环节 4 00:00:25,200 --> 00:00:28,440 为了完成实验我们需要做一些准备工作 5 00:00:28,480 --> 00:00:31,840 第一个要了解大致做哪些实验内容这是一个 6 00:00:31,880 --> 00:00:34,400 第二个你要知道为了完成实验 7 00:00:34,440 --> 00:00:36,160 你要搭好一个实验环境 8 00:00:36,200 --> 00:00:37,520 所以说我们这两部分内容 9 00:00:37,560 --> 00:00:40,920 分别给大家展开来做一个介绍 10 00:00:40,960 --> 00:00:43,840 先看实验内容这块 11 00:00:43,880 --> 00:00:45,760 实验内容包含了以下几个部分 12 00:00:45,800 --> 00:00:47,640 第一部分是关于前言部分 13 00:00:47,680 --> 00:00:51,680 我们了解一下为什么要上操作系统实验 14 00:00:51,720 --> 00:00:54,480 对于操作系统课而言其实主要包含了两部分内容 15 00:00:54,520 --> 00:00:57,880 一部分是操作系统原理 另一部分是操作系统实验 16 00:00:57,920 --> 00:01:02,920 原理主要介绍了操作系统很多基本的概念 算法 17 00:01:02,960 --> 00:01:05,040 基本的一些操作系统知识 18 00:01:05,080 --> 00:01:09,200 操作系统实验主要是讲解怎么用我们C语言 19 00:01:09,240 --> 00:01:12,080 或者在硬件环境或者模拟环境中 20 00:01:12,120 --> 00:01:13,760 能把操作系统给实现出来 21 00:01:13,800 --> 00:01:16,520 或者说能把操作系统改进完善 22 00:01:16,560 --> 00:01:18,200 使它能够正常工作 23 00:01:18,240 --> 00:01:20,520 这两者之间貌似差别比较大 24 00:01:20,560 --> 00:01:24,040 但是其实相互之间起了一个很重要互补作用 25 00:01:24,080 --> 00:01:26,880 为什么这么说呢 因为大家可以看一看 26 00:01:26,920 --> 00:01:30,880 很多原理上一些内容 相对来说比较分散比较独立 27 00:01:30,920 --> 00:01:33,400 但是这些分散独立的概念 28 00:01:33,440 --> 00:01:35,680 其实都是我们操作系统实验中 29 00:01:35,720 --> 00:01:37,560 重要的组成部分 这是一个 30 00:01:37,600 --> 00:01:40,880 第二个这一组成部分是有一个紧密的联系的 31 00:01:40,920 --> 00:01:44,320 而这个联系性只有通过做实验才能有更深入体会 32 00:01:44,360 --> 00:01:46,640 这是我们觉得为什么要去 33 00:01:46,680 --> 00:01:48,880 做操作系统实验的很重要的目标 34 00:01:48,920 --> 00:01:52,040 第二个很多操作系统概念上 35 00:01:52,080 --> 00:01:56,280 讲的一些基本的术语算法等等 36 00:01:56,320 --> 00:01:58,560 那么它和我们具体的操作系统实现 37 00:01:58,600 --> 00:02:00,000 什么样对应关系 38 00:02:00,040 --> 00:02:02,240 它们之间有什么样的联系 39 00:02:02,280 --> 00:02:08,120 这个也是通过上原理课做实验才能有更深刻的体会 40 00:02:08,160 --> 00:02:11,880 所以我们认为操作系统课程它是一个科学 41 00:02:11,920 --> 00:02:13,720 和工程相结合的一门课 42 00:02:13,760 --> 00:02:18,840 需要通过原理的学习 通过实验的实践 43 00:02:18,880 --> 00:02:23,840 才能更好更深入掌握操作系统基本的知识 44 00:02:23,880 --> 00:02:25,680 这是我们认为为什么要上 45 00:02:25,720 --> 00:02:30,200 操作系统实验的一个很重要的目标 46 00:02:30,240 --> 00:02:32,040 另一方面我们强调了 47 00:02:32,080 --> 00:02:33,800 因为操作系统都知道是一个软件 48 00:02:33,840 --> 00:02:36,000 它需要去编程 49 00:02:36,040 --> 00:02:39,120 那我们需要大家在实际编程中能深刻的体会到 50 00:02:39,160 --> 00:02:42,280 操作系统到底是怎么完成它的功能 51 00:02:42,320 --> 00:02:46,080 怎么来展现它具体的概念算法 52 00:02:46,120 --> 00:02:49,960 我们认为操作系统实验需要强调这个实验环节 53 00:02:50,000 --> 00:02:53,600 对于我们同学来完成这个实验需要注意几点 54 00:02:53,640 --> 00:02:57,200 第一个是需要注意 你要理解整个系统 55 00:02:57,240 --> 00:03:00,920 这个系统包含了软件硬件两方面知识 56 00:03:00,960 --> 00:03:03,040 因为操作系统只要控制硬件 57 00:03:03,080 --> 00:03:06,920 所以你要站在一个全局的角度来理解问题 58 00:03:06,960 --> 00:03:10,880 第二个循序渐进完善功能 59 00:03:10,920 --> 00:03:11,680 为什么这么说呢 60 00:03:11,720 --> 00:03:14,440 因为我们知道操作系统虽然是一个大型软件 61 00:03:14,480 --> 00:03:16,240 但是它也不是一天建成的 62 00:03:16,280 --> 00:03:21,000 它也是一点点像搭积木一样 形成了从一小块 63 00:03:21,040 --> 00:03:24,160 一个砖头两个砖头最后形成了一座房子 64 00:03:24,200 --> 00:03:27,960 那么这个搭积木的过程我们希望同学能够掌握 65 00:03:28,000 --> 00:03:30,120 知道怎么从零开始 66 00:03:30,160 --> 00:03:34,160 能够完成出一个完整的小型的OS 67 00:03:34,200 --> 00:03:37,120 这是我们希望同学能够去了解和掌握的 68 00:03:37,160 --> 00:03:43,480 第三个要懂得阅读代码和能够去改进它 69 00:03:43,520 --> 00:03:47,680 这点其实是我们做实验中有一个比较深入体会 70 00:03:47,720 --> 00:03:48,920 为什么这样说呢 71 00:03:48,960 --> 00:03:52,480 其实大家在完成后续的实验会发现 72 00:03:52,520 --> 00:03:56,240 这个实验你花了很大一部分时间是在阅读代码 73 00:03:56,280 --> 00:04:00,480 并不是在编程 而是在理解和阅读代码 74 00:04:00,520 --> 00:04:04,720 只有很好的通过阅读代码把操作系统的框架 75 00:04:04,760 --> 00:04:06,440 它的实验细节掌握之后 76 00:04:06,480 --> 00:04:09,480 你再去完成老师给你布置那些实验内容 77 00:04:09,520 --> 00:04:11,040 你会发觉还比较容易 78 00:04:11,080 --> 00:04:13,120 所以你发现你完成代码量并不大 79 00:04:13,160 --> 00:04:15,720 但是你为此要把这个代码读懂 80 00:04:15,760 --> 00:04:17,480 花的时间是很多 81 00:04:17,520 --> 00:04:21,280 特别是它和我们一般的应用程序是有很大的区别 82 00:04:21,320 --> 00:04:23,600 它需要有很多跟我们硬件打交道 83 00:04:23,640 --> 00:04:27,280 它的编写方式 它的处理方式 84 00:04:27,320 --> 00:04:31,160 都和我们通常应用程序有很大区别 这是一方面 85 00:04:31,200 --> 00:04:34,640 另一方面当你能够掌握这个基本OS功能之后 86 00:04:34,680 --> 00:04:38,200 我们还可以对它进行扩展 做一些创新性实验 87 00:04:38,240 --> 00:04:41,240 这也是很鼓励一些觉得自己能力还不错 88 00:04:41,280 --> 00:04:43,040 你还需要进一步挑战 89 00:04:43,080 --> 00:04:47,400 你可以去在这方面有充分余地去发挥你的能力 90 00:04:47,440 --> 00:04:50,960 看看你能不能在这个操作系统之上完成新的功能 91 00:04:51,000 --> 00:04:53,160 来增强操作系统能力 92 00:04:53,200 --> 00:04:54,680 我们后面会跟大家做介绍 93 00:04:54,720 --> 00:05:01,600 我们同学这方面做的工作 94 00:05:01,640 --> 00:05:04,280 第二方面我们看看国外发展的情况 95 00:05:04,320 --> 00:05:09,240 首先是MIT我们清华大学在操作系统教学改革上面 96 00:05:09,280 --> 00:05:11,800 充分借鉴了MIT这些教学思路 97 00:05:11,840 --> 00:05:15,280 他们很强调超系统课工程实践能力 98 00:05:15,320 --> 00:05:17,320 所以他们设计了两个OS 99 00:05:17,360 --> 00:05:20,760 一个叫XV6一个JOS希望同学能够阅读XV6 100 00:05:20,800 --> 00:05:24,280 然后来改进完善JOS这么一个操作系统 101 00:05:24,320 --> 00:05:29,160 这是他们的一个思路 哈佛也是一样有OS161 102 00:05:29,200 --> 00:05:32,120 以及后面的哥伦比亚 伯克利 斯坦福等等 103 00:05:32,160 --> 00:05:35,920 他们都有各自的操作系统实践的环节 104 00:05:35,960 --> 00:05:38,840 强调学生在理解原理的同时 105 00:05:38,880 --> 00:05:41,880 能够通过实验来加强对操作系统 106 00:05:41,920 --> 00:05:44,880 一些具体细节的掌握和理解 107 00:05:44,920 --> 00:05:48,720 从而对操作系统有个更全面和深入的体会 108 00:05:48,760 --> 00:05:52,520 在国内也是一样 我们是基于国外的一些先进的一些经验 109 00:05:52,560 --> 00:05:55,080 比如JOS XV6 OS16以及Linux 110 00:05:55,120 --> 00:05:58,560 来设计一个小型的OS叫ucore 111 00:05:58,600 --> 00:06:00,800 我们现在做的实验就是阅读ucore 112 00:06:00,840 --> 00:06:02,560 然后对ucore进行改进和扩展 113 00:06:02,600 --> 00:06:06,000 这是一方面 其他比方说像北大 114 00:06:06,040 --> 00:06:07,800 国防科大等等 他们有不同思路 115 00:06:07,840 --> 00:06:10,640 有的是基于一个小型的OS 比如说像北大 116 00:06:10,680 --> 00:06:14,600 我们了解到他是基于MIT一些实验环节 117 00:06:14,640 --> 00:06:16,120 像国防科大 浙大等等 118 00:06:16,160 --> 00:06:19,520 他们更强调一些基于Linux来做相应的实现 119 00:06:19,560 --> 00:06:23,680 相对而言Linux更加复杂功能更强大 120 00:06:23,720 --> 00:06:27,040 掌握它花的代价相对要大一些 121 00:06:27,080 --> 00:06:30,200 还有上海交大 南开 基于国外的 122 00:06:30,240 --> 00:06:32,560 Minix Nachos等等 来做相关的实验 123 00:06:32,600 --> 00:06:35,160 当然这些信息还有待进一步更新 124 00:06:35,200 --> 00:06:36,840 我们是目前了解到一些情况 125 00:06:36,880 --> 00:06:39,800 从中可以看出来国内的大学 126 00:06:39,840 --> 00:06:45,080 特别是一些对操作系统这门课很重视的一些学校 127 00:06:45,120 --> 00:06:49,160 他们还是把很多精力 除了放在原理课教学之上 128 00:06:49,200 --> 00:06:52,920 也放在了这个实验环节 所以我们希望 129 00:06:52,960 --> 00:06:57,280 同学们也可以看到通过实验 其实是有很好的 130 00:06:57,320 --> 00:06:59,880 能够进一步掌握操作系统这么一个机会 131 00:06:59,920 --> 00:07:03,600 其实除了一些教学OS之外 还有一些实际的OS 132 00:07:03,640 --> 00:07:05,440 前面已经讲到有Linux 133 00:07:05,480 --> 00:07:10,600 Solaris Windows Rtems eCos等等 134 00:07:10,640 --> 00:07:12,960 这也是一些实际存在的一些OS 135 00:07:13,000 --> 00:07:18,280 它们也是在某些学校和某些领域得到学习和掌握 136 00:07:18,320 --> 00:07:19,680 其实没有什么特别区别 137 00:07:19,720 --> 00:07:22,560 我觉得大家根据各自的特点 138 00:07:22,600 --> 00:07:26,120 可以选择不同的OS来作为你们实验的目标 139 00:07:26,160 --> 00:07:28,240 甚至还有同学说 一个OS都没有 140 00:07:28,280 --> 00:07:30,720 我们从零开始来实现OS 这也是有可能的 141 00:07:30,760 --> 00:07:31,720 我们看到有些挑战 142 00:07:31,760 --> 00:07:33,640 就是有些愿意接受挑战的同学 143 00:07:33,680 --> 00:07:36,600 他自身对计算机理解很充分的话 144 00:07:36,640 --> 00:07:40,320 我们也不觉得不能够从零开始实现OS 145 00:07:40,360 --> 00:07:42,240 据我们了解确实有这样的同学存在