欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1.2 什么是操作系统

程序员文章站 2022-05-12 13:53:18
...

前言

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

思维导图

1.2 什么是操作系统

操作系统的定义

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

  • 对上
  • 对下

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

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

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

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

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

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

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

  • 功能软件
  • 操作系统

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

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

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

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

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

操作系统架构层次结构

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

操作系统内核的特征

  • 并发
    我们可以在计算机中同时运行多个应用程序,操作系统对它们进行管理。这里我们需要注意一下并发与并行的区别,并发指的是一个时间段内,多个程序运行。并行指的是一个时间点内,多个程序运行。当我们只有一个CPU的时候,并行是不存在的
  • 共享
    共享让我们的应用程序可以访问各种各样的资源。共享有两种类型,一种是互斥共享,一种是“共享”访问。我们的操作系统管理的资源,其实在一个时间点上,是一个应用服务只能访问一个资源,当然,这是跟资源的粒度相关。
  • 虚拟
    这个我们在前面已经提到了,就是将CPU虚拟成了进程,磁盘抽象成了文件等。在虚拟的条件下,我们可以将一台物理机器,虚拟成多台机器。
  • 异步
    我们的程序执行并不是一贯到底,而是走走停停,向前推进的速度不可预知。但是只要运行的环境相同,我们程序异步执行的结果都会是一样的,例如1+1=2,在同等环境下,异步执行的结果都会是一样的。

总结

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

相关标签: 操作系统