下面我们介绍操作系统的特征。 操作系统 是一个软件,那么它与其它软件相比较,它具有哪些特点呢? 总结一下,操作系统的特征呢 有四个主要的特征。 第一个是并发 第二个是共享,第三个是虚拟,第四个是随机 操作系统的第一个特征是并发 所谓并发 指的是操作系统必须具有这样的能力 能够处理多个同时性的活动 操作系统能够处理多个同时性的活动 但是当你处理多个同时性的活动的时候呢 就会带来很多的问题,也就是给操作系统的设计呢带来一定的复杂性 比如说,我有多个活动,这些活动呢是 一会儿操作系统管理这个活动,一会儿操作系统支持另外一个活动,所以活动和活动之间呢- 要有切换 切换的时候呢需要操作系统做很多的事情 另外,如果有很多的活动,比如说,很多的 程序都在内存,那就需要对内存进行保护,使得这些活动之间呢互相不干扰 通常我们在解决一个问题的时候呢,我们需要 多个活动相互配合来解决这个问题。 因此 这些活动之间就具有一个依赖的关系,那么这些相互依赖的活动之间,那我们需要 解决它的同步等问题。 因此,由于并发会给 操作系统的管理带来很多的问题,那么需要操作系统解决这些问题 这周呢,我们来再看一下,如果计算机系统中 同时存在多个程序在执行,那么它究竟是什么样的一个场景呢? 在单 CPU 的情况下,我们说只一个 CPU 而言 那么在这个 CPU 上呢,所谓同时执行多个程序呢是一种宏观上的 观察,在宏观上,这些程序好像都在执行着,都在运行着 但是在微观上呢,由于只有一个 CPU,所以任何时刻 只有一个程序真正在 CPU 上执行,那我们可以说 这个,这些程序是在 CPU 上是轮流执行的 当然这个轮流的过程也需要操作系统提供相应的支持 并发是操作系统的一个最典型的特征 那么但是还有一个与并发非常相似的一个概念叫并行 这个我们也经常说并行,那这里头我们稍微区分一下 我们所说的并行,多指的是不同的程序 同时在多个硬件部件上执行 也就是它会有硬件的多个部件的支持。 我们举一个 日常生活中的例子。 如果是跑马拉松,大家都一块儿在跑 都在往前跑,那么实际上呢,这是一个并发的场景 大家都在并发地往前跑。 但是如果是 110 米栏 那么每个运动员都有自己的一个跑道 那么他只能在这个跑道上去跑,那么这个呢就是并行 所以我们通过这样一个小例子呢,大家对并发和并行这个概念呢有一个 区分,不要混淆这两个概念。 当然平常我们在说的时候呢,有的时候 并发和并行呢有的时候不太区分,这也是可以的,只要大家能够理解 意思就可以。 操作系统的第二个特征是共享 所谓共享是由于操作系统是管理资源的 那么这些资源呢数量又是有限的 用户也要使用资源,操作系统为用户提供服务的时候呢也用到这些资源 因此我们说,所谓共享就指的是操作系统与 多个用户的程序共同使用计算机系统中的资源 那么,对资源的使用有不同层面层次的要求 对操作系统而言,要求操作系统对资源管理要进行合理的 分配和使用,那么使得这些资源能够充分利用 在一段时间内,交替地被多个进程使用 那么如果我们对 资源的使用再进一步提出不同层次的要求呢,我们来看一下 有些资源呢它是互斥使用,我们称之为互斥共享 比如说像打印机,打印机给一个进程用就不能 同时再给另外一个进程用。 当然,一个进程用完了可以分给另外一个进程用 所以这种资源就叫互斥共享 而另一种层次上,那么就是同时共享。 比如说,我们有一段代码 我们有磁盘上的文件,那么两个或两个以上的进程 想共享一段代码,这是可以的 或者说两个或两个以上进程都打开同一个,打开不同的文件 处理不同的文件,那么这些不同的文件都放在磁盘上,那么这个磁盘呢是共享的 所以我们大致要了解一下,对于资源的这种共享呢,分成了互斥共享 和同时共享这两个方面。 共享就会给操作系统又带来管理上的一个复杂性 因为操作系统要使得这种资源的分配达到一个最优化,这个是比较难的 同时呢,操作系统还要考虑如何来保护资源 使得不同的进程之间不会互相干扰 操作系统的第三个特征呢是虚拟 这个是非常重要的一个特征 所谓虚拟呢,往往指的是 一个物理的实体,比如物理的,比如 CPU 或者是内存 把它映射为或者转换为若干个对应的逻辑实体 所以通常我们会说,操作系统 把时间分成了若干片段,分时了 或者我们把空间分成很多区域,分空间了 通过这样一些手法,那么使得一个物理的实体 给它转换成或者对应成多个逻辑的实体 通过这样一个手段,那么实际上呢是为了提高 计算机系统的资源的利用率,所以这是我们的目的。 通过虚拟 提高的是资源的利用率。 这样我们再举几个典型的例子,在操作系统当中如何来体现虚拟性 CPU,假定只有一个物理 CPU,一个单 CPU 那么,在单 CPU 上又跑了很多的进程,又运行了很多进程 实际上每个进程拿到的是什么呢?每个进程实际是在虚拟 CPU 上在跑,我们可以这么去理解,虚拟 CPU。 当然啦,这是宏观上 那么微观上呢,每次只有一个进程在一个 CPU 上去跑 那么,存储器。 存储器呢我们是这样来 解决这个问题的。 操作系统给每个进程分配了一个地址空间 这地址空间呢是一个虚拟地址空间 是每个进程一个,各个进程之间是相互独立的这么空间 这个空间里放了这个进程的代码啊、 数据啊、 堆啊、 栈啊等等的这些信息 那么所以每个进程都有自己的地址空间,那这个是逻辑的。 那么在物理上,那么它会 共享,就共用一块物理内存。 另外呢,我们有显示器显示设备,在显示设备上我们可以开多个窗口 或者是虚拟终端,那么这样的话呢,一个显示设备其实可以显示不同在不同的 这个窗口或者虚拟终端显示不同的内容,那么这个呢也是一个虚拟性虚拟化的一个结果 所以操作系统的这个虚拟特性是我们比较,应该讲都比较了解熟悉的 操作系统的最后一个特征呢是随机性 所谓随机就是说,在操作系统运行过程中,在用户程序运行过程中都会发生各种各样的事件 操作系统必须随时对这些事件进行相应的处理 所以我们说,操作系统必须随时对 以不可预测的次序发生的事件进行响应并处理 由于有随机性,其实我们会看到这样一些 结果。 那么,进程的运行速度 是不可预知的。 因为我们有好多进程在运行,我们不知道什么时候是这个 进程运行,它运行多长时间,所有的一切都在操作系统的掌控之下。 因此 多个进程在并发执行,这种并发执行,我们所看到就是 "走走停停",一会儿上 CPU 执行,一会儿呢暂时,一会儿又上 CPU 执行 所以用户也无法预知每个进程的运行推,呃,运行的推进的这个快和慢,这是无法预知的 其次,那么,如果有随机性 就会带来另外一个问题,就是,在操作系统运行过程中如果出现了错误 很难重现,也就是,不能重现或者很难重现 系统在某个时刻的一个状态,因为这种状态的组合太多,所以很难够 重现,那么这样的话就给操作系统的调试带来了很大的困难,带来了很大的困难 所以呢,这是操作系统的最后一个特征,就是随机性