接下来我们来讲操作系统的结构
任何一个软件它都会有自己的结构
操作系统也不例外
操作系统在发展的过程当中
它的结构实际上有了非常大的变化
我们从历史上发展的过程来看
操作系统可能采取的结构
和每种结构它的特征
最早的时候实际上
操作系统它是一种简单的结构
对下控制硬件
对上提供用户应用程序所需要的服务
中间的功能实际上实现的很简单
我们在BIOS里面有一层
对硬件进行管理的驱动程序
操作系统内部它把这一层
做了更进一步的完善
这种完善形成了系统里面的驱动
然后有一些常驻的服务系统程序
然后上面是应用程序
应用程序有可以使用操作系统提供的
设备驱动服务
也可能直接使用
底下BIOS提供的系统服务
在这个里面它没有进行模块化的划分
实现的时候操作系统的代码
也主要是汇编来写的
基于这种情况操作系统
它是从一个平台
操作系统只能用在这个平台上
到其它的品平台上不能使用的
所以这样的话
每个操作系统都是只针对
特定硬件平台来写的操作系统
在这个阶段我们有很多种操作系统
在PC机上主要是DOS系统
它只能用在X86的系统上
第二种结构实际上
随着Unix系统不断发展完善
形成的这就是分层结构
在分层结构当中
我们会把操作系统功能分成若干层
最底下一层是硬件
最上面一层是用户接口
在中间实际上
我们按照功能的不断的丰富
不断的完善把它分成了N层
每一层只使用下一层提供的服务
这种分层结构
使得各个层依赖关系得到一定的限制
使得我的可靠性能够进一步提高
这个里面分层结构很大贡献
在于它把可移植性
作为操作系统的一个重要的目标
以前的话我们是说
对于一个特定的硬件平台
我要全新对它写一套操作系统
现在我只需要
把整个操作系统代码分成两部分
一部分与硬件平台无关的部分
这一部分我们用高级语言来实现
另外一部分是跟特定硬件平台
密切相关的部分
这一部分我们仍然
使用汇编程序来实现
做了这种划分以后操作系统的移植
只需要改汇编的部分
我们在这里说到Unix系统和C语言
我们前面说Unix系统的时候已经
见过这两位Thompson和 Ritchie
他们实际在Unix系统发展过程当中
他提出来的C语言
C语言也会由于Unix系统的发展
而得到广泛的使用
最后他们得了图灵奖
这是第二种结构
我们所使用ucore教学操作系统
它的结构基本是采用分层的结构
我们在这里要学的内容
是划红线的这几个部分
我们基本涉及到
从最底层的中断 系统加载
一直到操作系统内部
各个核心模块对上提供的服务
和系统服务里的命令行
这是分层结构
分层结构随着层次的增加
依赖关系这种层次越来越复杂
复杂的结果是
操作系统内核里面的东西越来越多
效率越来越下降
在这个基础上微内核结构
因为分层结构的层次多
所带来的效率低的一种做法
我们希望实际上是
把一些操作系统内核提供的服务
放到用户态是不是这样的话
能够提高它的效率
所以在这做了一种尝试微内核
把尽可能多的内核的功能放到用户态
在内核里面只保留进程间通信
和底下对硬件的支持
然后在这之上
这个时候会说如果用户态应用程序
想使用传统内核提供的
系统服务功能怎么办呢
这个时候说用户态的应用程序
要想跟内核进行通讯
它需要先绕到内核然后再回到用户态
这样做之后它的安全性和可扩展性
就会有大幅度提高
但是它也会有问题
它的性能就会有大幅度下降
实际上在这个里面
我们现在用到的操作系统
你看它的结构
它是微内核结构和
分层结构的一个混合体
在这种情况下
我们会注意到有一些系统里面的
某一部分内容
在某一个版本里是放到内核里面
到另一个版本里把它放到用户态去了
又有可能过了一段时间以后
它又把它放回来这是微内核结构
在针对微内核结构
进一步的改进叫做外核
它的做法是什么呢
它的做法是向内核里面
放更少的东西
它只是起到资源的保护和隔离的作用
然后把资源管理的任务
交给应用态的代码去完成
这个时候
原来的操作系统功能怎么办呢
原来操作系统的功能
是由用户态的函数库来提供
这种情况下我们看到的是
操作系统的硬件资源
在上面只有一个很薄的
一层安全绑定
在这个安全绑定里面
它控制哪些资源归哪一个系统使用
而相应的资源管理
由各自的系统自己来维护
在这种情况下我们可以在一个系统上
支起不同的操作系统服务
某种角度来说
这好像是一个虚拟机的结构
我们现在意义上的虚拟机
它不是一个我们传统说的
操作系统的一个结构
实际上这个时候
它是把我们现在用到的DSM
早期的时候就是以这种结构出现的
接下来我们说虚拟机管理系结里面
计算机的硬件之上我们架了一个VMM
它负责把真实的硬件
虚拟成若干个虚拟的硬件
然后我们操作系统在这上面
来实现传统操作系统的功能
这一部分功能虚拟管理器来决定
我每一个虚拟机到底可以使用
哪样一些硬件资源
有了这个管理器以后
我们传统的操作系统与硬件
和应用之间的关系
就会发生一个变化
这种变化在什么地方呢
原来的操作系统是直接底下接触硬件
上面对应用提供服务
现在变成是
虚拟机管理器和硬件打交道
操作系统来和虚拟机管理器打交道
但是实际上
它其中有一部分
还是会和硬件直接打交道
这个时候的区别在什么地方
在于管理器负责资源的隔离
操作系统负责资源的管理
好 到现在为止
我们第一讲的内容就讲到结尾了
我们说操作系统是很有趣的
它可以很好的控制一台完整的计算机
如果说你最后做完实验以后
能够用自己写的操作系统代码
去控制一台真实的物理机器
你的感受会是非常好的
但是要想实现这一点
你需要付出非常多的努力
同时操作系统它现在仍然很不完善
不管你花了多长时间做测试
用户实际使用的时候它仍然会有错误
仍然会性能或者功能不满意
这个时候仍然有很多
我们需要去改进的地方
这也是我们学操作系统课
想要去挑战的地方
同时它很庞大
通常情况下我们现在用到ucore
它有一万行代码左右
这是你在前序的一些课程里面
不会学到这么多代码的
综合利用它你才能够完成操作系统实验
理解操作系统这些原理
最后我们想说操作系统尽管很困难
但是我们前面例子
我们能够做到依靠你自己的努力
最后我们是能够实现
一个小的教学操作系统
今天的课就上到这里