接下来 我们讨论
为什么要学操作系统
操作系统是计算机系统当中
一个重要的组成部分
但是有很多人并不一定
直接去研究操作系统
作为大学计算机专业本科的必修课
我们大多数的同学
为什么要学操作系统
我们说操作系统是一门综合的课程
在这里综合我们前面讲到的
程序设计 数据结构
计算机系统结构等
在这里我们要去研究的对象
是操作系统的概念和基本原理
对应过来是操作系统的源代码
我们在这里要学到的技能
是操作系统的设计和实现
说我们已经有
很好用的操作系统在用着了
我为什么还要学操作系统
比如说现在我们用到的Windows Linux
能够满足我的需求
那我们在研究当中大量使用Linux
里面很多开源的内容已经很好用了
我们现在在这里面为什么要学呢
实际上说我们修改操作系统
去研究新的操作系统
就是要想实现我们的需求
这个时候说
我们在这里到底有哪些需求
它还没有解决呢
实际上这个问题是说
我们随着一个问题解决
我们会对它有更高的需求
这个需求导致我们会
会进一步的研究操作系统
对于我们本科生的
操作系统的必修课
我们为什么学它
我们说学操作系统呢
操作系统很有挑战
我们在每一年都会有一些同学
对操作系统极端有兴趣
当然操作系统很复杂
每一年也都会有一些同学
对操作系统极端不感兴趣
好 那我们说我们对操作系统很有用
不感兴趣的你也得学
因为你要用计算机
你想把计算机使用的好
你必须了解我操作系统里面
是怎么工作的
如果说你对操作系统很有兴趣
我想知道操作系统里面是如何工作的
我想让它能够更好的为我工作
你也需要来学操作系统
这是我们为什么要学操作系统
我们说操作系统
在整个计算机系统当中的地位
是非常重要的
比如说我们这在里面微软
它最赚钱的不是操作系统软件
是它上面的应用
但是它投入大量精力
去研究和改进操作系统
那也就是说它在这里的重要地位是非常强的
操作系统是计算机系统里的
基本组成部分
操作系统的硬件发展
以至于我要在操作系统里面
添更多的功能
在里面对它做更好的优化
正是由于这些原因在学术界
和工业界都在持续的
对操作系统进行研究和发展
到底有一些什么样人
都在做操作系统呢
随着技术的发展和时代的变化
做操作系统的人也是有一些变化的
比如说最早的时候
只是学计算机的专业人士
会去研究操作系统会去写程序
写操作系统程序是一个很专业的事情
随着操作系统的发展和普及
那么工业界早的时候是
做计算机系统的人的公司
在研究操作系统
比如说像我们说到的IBM DEC
这些公司实际上有一些
已经随着历史的发展
退出了历史舞台
在现在实际上
提供操作系统的服务的公司
比如说谷歌 VMware或者说亚马逊
国内的一些公司像
阿里巴巴 百度 华为
这些公司我们在这里
组成了一些很重要的研究协会
比如说计算机Unix用户协会
每年的研究在操作系统领域里面
最主要的顶级会议有这样两个
一个是操作系统原理研讨会
一个是操作系统设计与实现研讨会
它们俩是隔年开一次 一奇一偶
实际上每年有大约20篇文章
在这个会议上发表
这能代表了计算机
当前发展的最前沿的状态
那么在计算机操作系统领域里头
还有一个重要的标志
就是操作系统里面会
每年评选过去10年当中
最优秀的学术论文
如果说你想了解操作系统
现在最前沿的技术和研究热点在哪
去看这些论文是非常有必要的
我们说操作系统
我们现在仍然需要
去投入大量精力研究它
它在这里有很多挑战
首先第一个挑战就是操作系统非常庞大
我们看Windwos XP代码已经有4500万行
在这么庞大的代码里面
我们要想在里面管理它的并发
这时候你的编程挑战是非常大的
然后操作系统要管理
各种各样的硬件故障
然后我需要对它的各个部分的管理
要实现高效
这些都会使得
我们在这个庞大的系统里
来处理这个问题的时候非常复杂
而随着计算机系统的联网
那么在网络环境下安全的问题
又变成是越来越关键的
而在操作系统里
必须在操作系统层面上
解决安全的问题
那上面的应用才能有一个很好的
安全基础
这是由于操作系统庞大所带来的挑战
第二个挑战
实际上操作系统里面它的关系是错综复杂的
我们说我们前面讲操作系统有并发
两个多个进程之间交替使用资源
这个时候有一些相互之间的相互影响
但实际上这个时候在操作系统里面
最复杂的一个问题是
各个资源相互使用的时候
到最底层你必须互斥的
这个时候
我们这种锁机制导致很多时候
我们一些资源处在空等的状态
这个实际上是提高操作系统效率
必须解决的一个重要的问题
也就是说它这里由于关系错综复杂
如何能让它高效变成异常困难
而在这种环境下
反倒是我们传统操作系统里面
讲到的调度这些问题都变成了
不是当前研究的最热的点了
操作系统面临的第三个挑战是
各种错综复杂关系之间的权衡
比如说我们在操作系统里面
有时间优化目标和空间优化目标
这两个实际上是相互矛盾的
比如说我在这里做一个数组的排序
如果说我有很大的空间都在内存里
这个时候我会排起来很快
但是这个时候
它占用很大的存储空间
而我的储存空间又是十分有限的
这个时候你只能在这两者之间去平衡
然后说我们需要提高它的性能
这个时候需要资源多的
我会给它分配更多的系统资源来使用
但是这个时候另外一个应用
如果说它长时间分配不到资源
这个时候它的响应时间又不可预测
这个时候我们的性能和
行为的可预测之间又是一个矛盾
这种矛盾在操作系统里头
都必须对它做平衡
再有一个我们希望各种各样的情况下
我的算法都能体现出很好的特征
不会对某些应用性能好
到另一些应用里面它的性能比较差
这种差异性呢
和我们性能的优化目标又是矛盾的
这是我们通常所说的
公平性和性能之间的矛盾
你需要在这两者之间
牺牲一定的公平性来达到性能
或者反之你需要牺牲一定的性能
我才能保证它的公平性
再有一个就是操作系统
要面对很多硬件细节
我如何能够实现中断 异常
上下文切换的有效进行
我如何能让这个快表
有很高的利用效率
这都涉及到你的CPU的实现细节
所以在这里操作系统很大一部分的
直接跟硬件打交道的地方
都是使用汇编代码来写的
这样才能保证它的高效
所以学操作系统里头
你一定会是要用到汇编代码的
到底我们如何学操作系统呢
不闻不若闻之
闻之不若见之
见之不若知之
知之不若行之
学至于行而止矣
这是我们的一句古话
在这个里面我们说
你必须要落实到行动上
你才能真正掌握它
所以我们学操作系统呢
在那的实验成分比较多的
而另外一句提法是
天才是1%的灵性加上99%的汗水
你必须付出艰苦的努力
你才能学好操作系统
我们有同学的一个反馈意见说
操作系统是困难的
最好的和最有趣的三年级课程
当然也有同学把它描述成地狱一般的
这都是说明我们学操作系统的时候
你必须下努力
才能够学的好
当然说我们这个里面太庞大了
是不是我们就学不好了呢
在这里给出来的是我们的Linux
他在1991年开始做Linux操作系统的时候
也是一个大学本科生
1991年 2001年 2011年 20多年过去以后
Linux操作系统已经变成了
我们广泛使用的一个系统
我们做这件事情的时候
谁也不会想到几十年以后
一个由大学生发起的一个操作系统
能发展到目前的状态
所以我也鼓励大家
现在大家是三年级的大学生
那么你的未来也可能成为Linux第二