现在我们来继续讲
什么是操作系统
大家想象操作系统是什么样的
它是一个程序
它和其它程序是什么样的关系
然后它有些什么样的组成
它有些什么样的特征
我们首先来看什么是操作系统
操作系统实际上
没有一个明确的定义
它哪些功能算是操作系统里的
那些功能是应用软件或者说硬件的
实际上随着操作系统的发展
操作系统内涵实际上是在不断变化的
我们现在给操作系统是给出一个解释
有一种解释说
操作系统是一个控制程序
它是一个系统软件
它给用户提供一个运行的环境
用户使用计算机系统的时候
提供所需要的服务
如果说用户的使用不当
那么这个时候
它需要进行项目的一些错误处理
如果说用户在使用过程中
我是不是能给它一些协助
比如说你在输某一条命令的时候
输了半截你忘掉了 后面是什么内容
这个时候它是不是能给出一些提示
这是我们第一个理解
第二个理解操作系统
它是一个资源管理器
实际上就是说我们计算机硬件
和应用程序之间
用操作系统来作为它的一个中间层
它为计算机应用程序来管理
所有的计算机软硬件资源
以协调于各个应用程序
在使用这些资源的时候
能够友好地使用下去
那么具体说起来就是
如果说所有的资源都是由我专用的
那么这个时候我的使用肯定会没问题
但是如果说多个应用程序交替着来使用
那么这个时候这资源
如何使用就会有一些问题了
比如说像内存 你在用我也在用
这个时候我到底
两个应用它们之间各分配多少呢
有可能给你分配多了 给它分配少了
而你的需要又跟分配的结果不一致
那这个时候对操作系统来说
我就需要做一个高效的判断
来使得我们在这里
能够按照应用程序的需要
给它分配合理的资源
这是我们操作系统提供的高效使用
所要达到的目标
然后第二个是说
我们可能都需要很多的资源
这个时候操作系统
要负责解决这种需求上的差异
实现它的公平
操作系统表现形式
可能会有多种多样
比如说我们windows我们的Linux
它的表现是完全不一样的
但是从操作系统内部结构上来讲
它基本上可以分成这样几个部分
说操作系统在中间 下面是硬件
上面是应用
应用我们就可以把它
分成系统应用和应用程序
这两个部分对于我们来讲
我们学操作系统的人
就是要来做操作系统
那么你是在硬件基础上做操作系统
这属于系统设计者
如果说你是写应用程序的人
或者写系统应用的人
这个时候我利用操作系统的功能
给出应用程序和系统应用
如果说你是一个应用程序的使用者
这个时候你直接使用的应用程序
但是即使这样的话你理解操作系统
也有利于你更好地使用计算机系统
操作系统实际上就是
在硬件进行一层隔离
对上面的应用
提供我们通常所见到的逻辑这些资源
比如说进程 文件 地址空间
这都是在操作系统之后
给用户程序看到的情况
操作系统是一个软件
在我们软件划分当中
这是我们操作系统
实际上我们可以把软件分成
应用软件和系统软件
系统软件我们又可以
把它分成系统应用和操作系统
而在操作系统里面
核心的内容是我们的内核
而这里的命令行
由于它和操作系统内核关系非常密切
我们把它划在这里头
实际上有时候也会
把它认为系统软件的一个组成部分
我们在操作系统里
到底有一些什么样的组成
首先说我们有内核
实现我们刚才所说到的
资源的管理功能
操作系统之上用户要使用
实际上我们在这提供了两种命令接口
一个是命令行接口
这个时候用户需要去敲键盘输命令
另一种是图形用户接口GUI
这个时候实际上我们是把命令
转换成我们图形用户接口的
一些基本读数
比如说在这里的窗口 图标 菜单和指针
有了这些之后
我去看文件系统的文件的图标
那我就对应着某一个文件
这样的话方便用户来使用
这个时候我们能达到一种效果
是所见即所得
操作系统和外界的关系
实际上我们在这个图可以很直观表现出来
操作系统是我们
整个计算机系统里的核心软件
然后在外面构造我们的
提供对外接口和一些应用
用户就可以来使用
系统所提供的服务了
这是我们用户所在的位置
对于我们这学期课来讲
我们的ucore小操作系统
它在提供一些什么 我们从下往上
中间两个黄色的部分
是我们操作系统的内容
下面是硬件 我们写了几种
我们在ucore实验里头会
涉及到的硬件 串口 磁盘和存储
我在这有一个硬件抽象层
硬件抽象层把底下这些做一个屏蔽
提供一个标准的接口
然后在这里实现我们操作系统功能
操作系统功能是各种各样的驱动
串口驱动 磁盘驱动 物理内存的管理
操作系统内核提供的服务
比如说我们的信号
这样的话
我们在执行一个程序过程当中
我就可以强行让它停下来按Ctrl-C
然后我们可以提供文件系统
这个时候我就可以把大量的数据
以人比较好理解的形式组织起来
然后我们在里面提供虚拟存储
提供虚拟存储以后我们用户
就可以使用到
大于物理内存的储存空间
然后我们在这里提供处理机调度
这个时候我们就可以在一台机器上
让多个应用程序交替运行
提供这些服务
都封装在系统调用接口之上
通过系统调用接口 上层应用
系统库 编译器 解释器
和我们命令行应用
这都是提供的系统应用
然后我们写的应用程序是
在这上面利用系统调用和库
提供的功能
来实现我们应用的功能
操作系统软件和
其它课程里面说到应用程序
它也是一个软件
这两者之间有什么样的差别
也就是操作系统内核
它有一些什么样的特征
这里列出来的是
操作系统所具有四个特征
并发 共享 虚拟和异步
并发是指说我们在操作系统当中
有多个正在运行的应用程序
那么它需要操作系统管理和调度
具体什么意思
就是我们如果多个应用程序交替运行
我需要知道当前每一个应用
都执行到什么位置
当前正在执行的是哪个应用
如果说应用之间有切换的时候
那切换到下一个应用的时候
它上次执行到什么位置
那这次我从什么地方开始
当时的状态是什么样子
那我在这都用操作系统来维护
第二个特征是共享
共享是指说我们多个应用
并发运行的时候
宏观上要体现出
它们同时在访问资源的情况
微观上要实现它们的互斥访问
比如说我们说到的内存
两个应用同时访问内存
这个时候我每个应用
需要知道它访问是哪个
另一个应用访问的是哪个
它们两之间不能访问错了
我需要保护的这些内存资源
不能让另外一个应用去访问
而在微观上 这个时候
我需要对它做很好的隔离
我们知道在数据总线上任何一个时刻
只有一个应用去访问存储单元
这就是我们所说的微观上的互斥
然后再一个是虚拟
也就是说我要通过交替运行
使每一个用户感觉到
整个计算机都是
由它一个用户在专门提供服务
如何做到这点实际上就是由操作系统
在每个应用执行的时候这种交替
由于交替的频率非常高
让用户在用的时候感觉不太出来
这台机器还有其它用户在用
当然我们这里负载大到一定程度
用户是可以感觉到的
再有一个是异步 异步是指说
由于我们程序是走走停停的
这种走走停停
它的行为是不是可预测的
在这里实际上
我们需要由操作系统来提供
只要用户的输入是一致的
那么这个时候它的输出结果
就应该是不变的
当然如果说你的那个应用
就是需要知道跟时间相关的
这种走走停停的信息
我们也是可以在操作系统支持之下
能够发现时间上的差异
这就是我们在这里说到的
操作系统的特征