1.2 什么是操作系统
前言
操作系统类型的所有博客,均是《清华大学公开课:操作系统》 向勇、陈渝所教授的课程。
对于我来说,学习操作系统,主要是为了更好的学习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的讲解。
对于操作系统的位置,我们需要知道它面向硬件,在硬件之上,软件之下的。
对于操作系统的特征,我们需要记住并发、共享、虚拟、异步。
上一篇: 计算n阶乘中尾部零的个数
下一篇: Java/888.两句话中不常见的单词
推荐阅读
-
南农是什么档次的211大学?南京农大是名牌大学吗?
-
看下下面的地址是用的什么框架呢解决方案
-
什么是项目实训课程,与专业课程有什么区别,什么样人可以学习实训课程?该如何解决
-
请教这段代码是做什么用的
-
SQL查询中的{}是干什么的?该如何处理
-
谁知道segmentfault本站是用什么框架或编程语言开发的?
-
protected static $member_id; //这行代码什么意思 我没这样写过 ,瞬间看不懂是干嘛的
-
union这个连接是有什么用的和INNER JOIN有什么区别
-
Zend Framework中insert时是组合的?小弟我的sql一直有有关问题。supportsParameters是什么意思
-
pytorch中的kl散度,为什么kl散度是负数?