[操作系统] 三、什么是操作系统

三、什么是操作系统

作者:解琛
时间:2020 年 9 月 7 日

操作系统是一个软件,一个软件需要实现一定的功能,这便可以定义什么是操作系统,我们想要这个软件干什么?

目前来说,操作系统没有一个公认的精准的定义。

到底什么该放到操作系统,什么不该放,不同的人有着不同的理解。

3.1 操作系统的定义

在百科全书中,操作系统的定义如下。

[操作系统] 三、什么是操作系统

操作系统是管理硬件资源、控制程序运行、改善人机界面和为应用软件提供支持的一种系统软件。

  • 操作系统利用硬件提供的支持,来完成系统的设计实现和内核的功能;
  • 应用程序的开发者,可以直接利用操作系统的功能,也可以在操作系统之上写一些通用的应用,称之为系统应用,在系统应用之上,来编写用户的应用程序;
  • 哪些是系统应用,哪些该放到操作系统中,没有明确的界限。

我们将操作系统解释为:

  • 操作系统是一个控制程序;
    • 是一个系统软件;
    • 控制程序执行过程,防止错误;
    • 执行用户程序,给程序提供服务;
    • 方便用户使用计算机系统。

操作系统是一个控制程序,它控制程序的执行过程,程序执行的时候,可能会出现功能不正常(比如锁死、无限循环等),会导致系统崩溃,这是不行的,我们需要防止应用程序执行过程中出错,出错需要将它停下。应用程序在执行时,操作系统需要为它提供服务(比如,往文件系统中存数据,从文件系统中读数据,通过网络收发数据等),来实现相应的功能。

为用户使用计算机提供方便,系统应用(命令行、图形界面)可以算为应用程序。

系统应用和应用程序的区别,只是使用范围上的不同而已。通常认为编译器是一个应用程序,但是它是其他应用程序都要使用到的一个公共的应用程序,这一类我们称为系统应用。

  • 操作系统是一个资源管理程序;
    • 应用程序与硬件之间的中间层;
    • 管理各种软硬件资源;
    • 提供访问软硬件资源的高效手段,解决访问冲突,确保公平使用。

硬件资源指的是各种各样的设备(硬件资源、CPU 的使用)。数据存在磁盘上,数据就是软件资源。

应用程序如何寻找软件资源,也是由操作系统来完成的。

在提供资源管理的时候,需要解决两个问题。

  1. 访问资源时的高效;
    • 操作系统完成之后,开发者不需要都来写这个访问数据的程序,使得开发效率提高;
  2. 提供一个公平的服务;
    • 多个程序同时访问同一个硬件资源时,需要操作系统来协调,解除冲突。

3.2 操作系统软件的分类

[操作系统] 三、什么是操作系统

操作系统是一个软件,通常意义上来说,最狭义的操作系统就是指内核。通过一个界面(系统调用),系统调用之上就是应用,系统调用之下的就是操作系统。

通常情况下,操作系统的含义不只是内核,还包括上面的命令行、GUI,编译器、调试器称之为系统应用,这一类构成系统软件,再向上就是应用软件(文本编译器、数据库)。

从软件分类的角度来说,操作系统是一个处在底层、起到重要作用的软件。

3.3 操作系统内核的抽象与特征

[操作系统] 三、什么是操作系统

操作系统要负责 CPU 资源的管理,CPU 的具有计算的能力,操作系统抽象出进程控制块。进程用来描述一个程序如何被加载到计算机系统中,如何分配它所需要的资源,占用 CPU 执行,同时处理当多个 CPU 程序执行时的暂停和恢复。

磁盘上的数据被抽象为文件,文件是计算机系统中我们访问的一个基本单位,这个基本单位的内容是存在磁盘上的,操作系统抽象出文件的概念后,对于用户的使用来说,只需要访问一个文件,只要知道文件在哪,内容可以读出来,需要往文件写入东西时,这个文件存在哪,这是操作系统需要解决的问题。

内存是临时存数据的地方,操作系统将其抽象为地址空间。多个应用程序交替执行时,就会有地址空间上的问题,到底将哪块空间分配给哪一块进程来执行,这是操作系统需要解决的问题。

这些分配算法和程序的分配算法有什么区别?这可以总结出操作系统内核的一些特征。

  • 并发:计算机系统中同时存在多个运行程序;
    • 原来理解计算机程序运行:计算机有一个 CPU,计算机程序拥有一个当前指令指针,伴随着从程序执行开始一直到程序执行结束。
    • 操作系统内核:需要管理多个正在运行的程序,让它们交替执行。一个进程占用 CPU 时,当前指令指针开始,执行到某一个位置,CPU 执行权被收回,需要记录当前执行到哪,保存哪些数据,将另一个进程上一次执行的状态恢复回来,继续执行。这种交替执行的方式,就是并发。
  • 共享:程序间”同时“访问互斥共享各种资源;
    • 在计算机系统中有多个应用程序执行,原来写程序时只关心我们当前的程序占用哪些资源,在操作系统中需要关心,多个应用程序同时访问同一个资源时,如何处理?
    • 比如两个程序的执行都需要使用 CPU,这个 CPU 如何分配给两个进程?对于 CPU 来说,只能一段时间给一个进程,另一段时间给另一个进程,这种共享如何实现?
    • 内存的共享,可以将一半资源给这个进程,另一半给另一个进程,但是 CPU 不行,对于操作系统来说,不同的资源需要制定不同的分享策略,这是操作系统需要解决的问题。
  • 虚拟:每个程序”独占“一个完整的计算机;
    • 原来写汇编程序时,是一个物理 CPU,有一个寄存器保存了当前指令指针的执行,现在有多个运行的进程,在计算机系统中执行,这时候每一个程序看上去都像在一个完整的、独立的计算机上执行,只是说和原来的区别是 CPU 有可能会暂停下来,将 CPU 让给另一个程序去执行,对于该程序来说,进程似乎拥有了一个独立的、完整的计算机在执行,这种”看上去,好像是一*立的计算机“,就是我们所说的虚拟。
    • 内存、磁盘都有类似的问题。将一个资源虚拟之后,让各个程序看上去都是独立的在使用全部资源,操作系统来协调这种共享方式。
  • 异步:服务的完成时间不确定,也可能失败;
    • 嵌入式系统中,可以使用延迟来实现等待的操作,但是在计算机内核中,一段程序执行的时间,可能会由于 CPU 给了别的程序执行,造成当前程序运行时间的不确定,这样应用程序在执行时,不能用时钟来数当前执行了多久,这种不确定性会让原来看上正确的逻辑产生一些麻烦,这是操作系统内核需要解决的问题。