操作系统(Operating System)是配置在计算机硬件上的第一层软件,也是最基本的系统软件,他可以控制和管理计算机系统的硬件和软件资源,合理地组织和调度计算机的工作和资源的分配,并提供给用户和其他的应用软件一个方便的接口和环境,也可以理解为它提供给其他应用程序一个更简单,方便的计算机模型。

  操作系统处处在计算机系统的位置可以用下图表示:

                                                                           

 

  操作系统在整个计算机系统的作用可以从它所处的位置来看。

    1.操作系统处于软件和硬件之间,作为计算机系统资源的管理者

      现在的计算机系统一般由一个或多个处理器、主存、键盘和鼠标,显示器这样的输入输出设备,网络接口、打印机等外部设备,我们基本可以分为软件和硬件资源,但更为常见的是分为四类:处理机、存储器、I/o设备以及文件(包含各种数据和程序)。相应的,计算机的功能也是对这四种资源进行有效的管理。一个计算机系统可能同时为多个用户提供服务,这样多个用户之间的服务请求可能出现冲突,而每个用户都希望计算机系统快速处理自己的事物,所以OS的目标是安全、高效地进行资源管理。

    2.从操作系统向上看,操作系统实现对计算机资源的抽象

      操作系统为用户程序提供一个方便的接口和环境,它的目标是为了方便用户使用。这就要求操作系统隐藏对硬件操作地具体细节,实现对计算机硬件操作的多个层次地抽象模型。用户与操作系统的接口可以分为用户接口和程序接口。用户接口是方便用户能够直接控制自己的作业,而程序接口是为用户程序在执行中访问系统资源而设置的。

      用户接口可以再细分为联机用户接口,脱机用户接口和图形用户接口(GUI)。联机用户接口由一组键盘操作命令和命令解释程序组成,举个常见的例子,Windows操作系统下Win+R键可以打开命令窗口,当我们在里面输入一条指令后,计算机便会执行它。你输入一条,它执行一条。而脱机命令接口是用户先把要执行的命令写到一块,然后让计算机一下子去全部执行完。图形用户接口我们就比较熟悉了,手机上有各种的图标。

      程序接口是用户程序访取得操作系统服务的唯一途径,当一个程序需要操作系统为它提供某种功能时,它可以去调用具有该功能的子程序(系统调用)。早期的系统调用都是用汇编程序提供的,只有在用汇编语言编写的程序才能直接使用系统调用,但是在高级语言中,往往提供了与系统调用一一对应的库函数。而对于一些用c语言编写的操作系统可以直接使用系统调用。我们也可以认为程序接口就是由一组系统调用组成。

    3.从操作系统向下看,操作系统是对硬件系统的首次扩充

      操作系统通过对硬件系统的拓展,可以为用户提供更加丰富多彩的功能。

  操作系统的成长历程

    ~手工操作系统在该阶段计算机的输入输出还是使用穿孔纸带,用户独占全机,这与计算机的处理速度极不匹配,严重降低计算机系统资源利用率,即所谓的人机矛盾。

    ~单道批处理系统:为了解决人机矛盾,引入了脱机输入输出技术。该技术将用户程序和数据在外围机的作业下将纸带上的数据输入到磁带,当CPU需要这些数据时,监督程序负责控制输入输出。监督程序便是操作系统的雏形。但此时内存中每个时刻只能有一道程序运行,CPU仍有大量时间等待输入输出,资源利用率仍很低。

    ~多道批处理系统:该系统一次调入多个程序到内存,这样在CPU在等待一个进程的IO操作的空闲时间可以去处理其他的程序,这样宏观上看,多个程序在一段时间是同时都在执行的,这也是并发的概念,同时多个程序也在共享计算机的资源。该系统提高了系统资源利用率和系统的吞吐量,但该系统缺点是用户需要等待的时间长,而且也没有人机交互的能力,一旦将程序提交给计算机,直到程序运行结束,用户都无法对自己的程序进行干预。

    ~分时操作系统:分时操作系统主要要解决的问题便是能够人机交互。如果要进行人机交互,那么计算机应该能及时接收用户的命令并能够及时处理。要进行及时处理,那么同时执行的几个程序应该同时存在在内存并且频繁地获得处理机。在这种情况下多道批处理系统就不再适用,而采用时间片的方式为各个作业服务。但该程序也有缺点,那就是分不清轻重缓急,不能优先处理紧急的任务。

    ~实时操作系统:它最主要的特征是将时间作为自己的参数,使系统能够及时响应事物的请求,并在规定的时间内完成对作业的处理。根据对时间要求的精确程度,我们可以分为硬实时操作系统和软实时操作系统。硬就是说一不二,对时间要求绝对严格,比如对导弹的控制。软则比较有弹性,你偶尔晚一会也无所谓,比如你发在发QQ信息的时候。

    现在操作系统已经发展非常丰富,比如嵌入式操作系统,个人计算机操作系统,掌上计算机系统,网络操作系统,分布式操作系统。

  操作系统的基本特征

  在多批道处理系统中,我们已经引入了并发共享的概念,我们可以说操作系统和程序并发是同时诞生的。这也是计算机操作系统最基本的两个特征,同时两者也互为依存。如果没有办法共享计算机系统资源,那么就没有办法并发执行,如果不并发执行,那么共享就没有了意义。需要注意的是,并发在宏观上是同时运行,而在微观上则是交替执行。

  在并发的执行程序中,我们引入进程的概念,进程本质上就是操作系统执行的一个程序。假如有一个应用程序它包含计算程序和I/O程序,如果在没有引入进程的话,这个应用程序只能顺序执行,在执行计算程序的时候不能输入输出,同样在进行I/O过程中也不能进行计算。但假如我们把计算程序和I/O程序看作两个单独的程序,即分别分配一个进程,这样两个程序就能并发执行。进程是系统在运行过程中能够独立运行并作为资源分配的最小单位,进程不仅仅只是一段程序,与每一个进程相关的是地址空间。在这个地址空间中存放着可执行程序和它所需要的数据,进程可以对这段地址空间进行读和写的操作。同时我们还必须创建一种数据结构(PCB/进程控制块)来描述进程的基本情况和活动过程。这样程序段、数据段和PCB就组成了进程实体。

  共享分为互斥共享方式和同时共享方式,注意两者都是描述的是一个时间段对资源的共享方式,不要简单认为同时共享是同一个时刻,在微观上来看,它仍是交替的访问。

  第三个特征是虚拟。虚拟就是把实的变成虚的,实的是真真切切存在的,而虚的则是用户感受到的。虚拟技术包含时分复用技术和空分复用技术。时分复用技术,举个例子,你的电脑可能有多个程序在运行,qq,微信,音乐播放器,但对于每个用户来说,好像整个计算机处理机一直在为它服务一样,这就是虚拟处理机技术,同样的还有虚拟设备技术。空分复用技术,我们都知道计算机的主存空间并不大,但你仍可以在上面同时运行多个应用程序,好像你的计算机的内存空间和外存一样大。

  第四个特征异步,异步是指在多道程序环境下,允许多个程序并发执行,但由于资源的有限,每个进程的执行过程都是走走停停,以不可预知的速度向前推进。只有系统拥有并发性,才有可能导致异步性。

  操作系统的体系结构

  人们在使用计算机的时候无时无刻不在给计算机下命令,但并不是十分清楚这些命令会不会对计算机造成损坏,有些是“人畜无害”,但有些滥用则会出现严重的后果。为了防止出现这样的意外,计算机把命令或者成为指令分为特权指令和非特权指令。特权指令不允许用户程序使用,只允许操作系统来使用。

  计算机在接收到一条指令需要先判断它是不是特权指令,然后再判断此时能不能去执行它。如何去判断是否可以执行特权指令呢?我们可以将计算机的运行状态分为用户态和内核态,软件中最基础的部分操作系统是运行在内核态中,内核态也可以称为管态和核心态。操作系统具有硬件的访问权并可以执行所有指令,而其余的软件部分则都工作在用户态。同时注意操作系统提供的用户接口程序也是工作在用户态。计算机会用程序状态寄存器(PSW)的某个标志位来标识现在计算机处于哪个状态。

  那么操作系统的哪些功能是由内核程序来实现呢?操作系统的功能并不是所有都是必要的,那些是为了给用户提供方便而非必须的功能为非内核功能,例如Windows操作系统提供给用户的记事本,视频播放等功能,但有一些则是极其重要,它们是操作系统的根基,为内核功能。内核功能包括时钟管理,中断处理,原语。那么实现这些内核功能的软件就称为内核,它时计算机配置的底层软件,是操作系统最基本最核心的功能。有的操作系统内核实现的功能还有进程管理,存储器管理,设备管理,这样的内核成为大内核,而不包含这些的成为微内核。大内核的优点是不需要两种运行状态高频切换,高性能,但代码量大,组织混乱,不易维护,微内核则与大内核相反。