1.2 什么是操作系统

前言
操作系统类型的所有博客,均是《清华大学公开课:操作系统》(http://open.163.com/newview/movie/free?pid=ME1NSA351&mid=ME1NSM960) 向勇、陈渝所教授的课程。
对于我来说,学习操作系统,主要是为了更好的学习Java多线程方面以及Linux方面的知识。写博客能够加深自己所学到的知识,也让更多的朋友了解什么是操作系统方面的知识。
我不能保证说的每个地方都是对的,但是能够保证每一个字都不是复制粘贴的。最后,如果我有说的不对的地方,希望您能够留言指正,谢谢。

思维导图

操作系统的定义

很多书本上,都有对操作系统的定义,但直到现在,操作系统都没有一个完整、精确、公认的定义,因为它的外延和边界都不是固定的。我们现在先从功能的角度来对操作系统进行一个定义:

  •  对上
  •  对下

对上:操作系统是一个控制软件,它控制了计算机系统中的应用程序怎么运行。操作系统还为用户提供了各种服务,例如放歌。如果一个计算机,没有操作系统,那这些服务都是不存在的。

对下:操作系统是一个资源控制器,资源指的是CPU、内存、磁盘、外设等,操作系统将这些资源进行共享、分配、协调。我们的计算机有各种应用程序,会去抢占这些资源,那么我们的操作系统,可以把这些应用程序协调好。


操作系统就像一个管理员,它管理计算机的应用服务,硬件。
那么对于硬件,操作系统是如何能对它们进行管理的呢?
这些物理资源,操作系统会对它们进行一个抽象:

- CPU抽象成了进程
- 磁盘抽象成了文件
- 内存抽象成了地址空间

刚刚我们从功能的角度定义了操作系统,下面我们从软件的角度来定义操作系统。
软件我们首先可以把它分类两大类:

  •  应用软件(办公软件、视频播放)
  •  系统软件

操作系统属于系统软件,而对于系统软件,我们可以进一步细化为:

  •  功能软件
  •  操作系统

功能软件:是指的有特定功能的软件,例如编译器、库。
操作系统:负责的对硬件的管理和控制。操作系统软件其实分为两个层面

  •  Shell (对外的层面)
  •  Kernel (对内的层面)

Shell:操作系统对外暴露的接口,提供应用服务给用户使用,我们可以通过GUI来操作,也可以通过命令行来操作。
我们着重观察的重点,其实是Kernel,从操作系统的内核来了解它到底是什么。
Kernel由哪些部分组成呢?如下:

  •  CPU调度器
  •  物理内存管理
  •  虚拟内存管理
  •  文件系统管理
  •  终端处理与设备驱动

  我们之前提到,操作系统可以对CPU进行管理,其实主要是由CPU调度器来完成的。而物理内存管理与虚拟内存管理,是对我们的内存进行管理的。文件系统管理,其实是建立在disks(disks是磁盘块的一个操作单位,可以进行读、写的操作来存储数据)之上的,但是disks是抽象的概念,因此有了文件系统管理。
终端处理与设备驱动,是Kernel内核的底层,直接与硬件打交道,它是操作系统非常重要的一个单元,有了它,我们的操作系统才能对上提供各种应用服务。

操作系统架构层次结构

操作系统的位置,是在硬件之上,应用程序之下的。

操作系统内核的特征

  •  并发

  我们可以在计算机中同时运行多个应用程序,操作系统对它们进行管理。这里我们需要注意一下并发与并行的区别,并发指的是一个时间段内,多个程序运行。并行指的是一个时间点内,多个程序运行。当我们只有一个CPU的时候,并行是不存在的

  • -共享

  共享让我们的应用程序可以访问各种各样的资源。共享有两种类型,一种是互斥共享,一种是“共享”访问。我们的操作系统管理的资源,其实在一个时间点上,是一个应用服务只能访问一个资源,当然,这是跟资源的粒度相关。

  •  虚拟

  这个我们在前面已经提到了,就是将CPU虚拟成了进程,磁盘抽象成了文件等。在虚拟的条件下,我们可以将一台物理机器,虚拟成多台机器。

  •  异步

  我们的程序执行并不是一贯到底,而是走走停停,向前推进的速度不可预知。但是只要运行的环境相同,我们程序异步执行的结果都会是一样的,例如1+1=2,在同等环境下,异步执行的结果都会是一样的。

总结
对于操作系统的定义,可以从控制的层面、软件的层面来进行理解。
对于操作系统的组成,我们需要知道Shell和Kernel,在本篇博客中,我们侧重的是Kernel的讲解。
对于操作系统的位置,我们需要知道它面向硬件,在硬件之上,软件之下的。
对于操作系统的特征,我们需要记住并发、共享、虚拟、异步。

猜你喜欢

转载自www.cnblogs.com/gongguowei01/p/12197714.html
1.2