一、操作系统的概念理解
【概念】 : 操作系统是系统最基本最核心的软件,属于系统软件的组成部分,用于控制和管理整个计算机的硬件和软件资源。
我们先简单了解下操作系统的组成
操作系统包括:
- 内核 Kernel (操作系统最核心的部分,包含进程管理,内存管理,文件管理,驱动管理等)
- 其他程序 (例如 函数库,shell 程序等等)
二、操作系统设计的目的与定位
我们可以看下下面这张图,是一个计算机内部的软硬件系统框架图
可以看到,【操作系统】 位于 整个系统框架的中间层, 所以你可以理解为它是核心所在,对于操作系统而言,它可以对上管理软件,对下管理硬件,这就是它被设计出来的目的:
- 与硬件交互,管理所有的软硬件资源。
- 为用户程序(应用程序)提供一个良好的执行环境。
故,在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件。
操作系统之上之下分别有什么?
首先,对于计算机,最显而易见的就是计算机底层的硬件。也正是计算机的底层硬件才使得计算机软件的运行,而这些硬件,看似毫无关系,实则都遵循着冯诺依曼的组织方式。
而单单只有这些硬件是不够的,还需要有一个软件来对这些硬件进行管理。例如,内存应该何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备? 这些都是由一个软件来进行集中管理的,而这个软件就是操作系统(Operator System)。
此时就会有一个问题: 难道操作系统是直接和底层硬件打交道吗?
当然不是,实际上,底层硬件上也有一个所对应自身硬件特点的软件,而这个软件就是驱动,而驱动一般是硬件厂商根据操作系统编写的配置文件,而驱动所起到的作用就是驱使计算机里硬件动作的软件程序,访问某个硬件,访问这硬件的读、写以及硬件当前的状态等,驱动就是直接和硬件打交道的,可以说如果没有了驱动,那么计算机中的硬件也无法正常使用,于是,操作系统与底层硬件之间就增加了一层驱动层。
那么操作系统究竟管理些什么呢? 操作系统主要进行以下四项管理:
- 内存管理: 内存分配、内存共享、内存保护、以及内存扩张等等。
- 驱动管理: 对计算机设备驱动程序的分配、更新、删除等操作
- 文件管理: 文件存储空间的管理、目录管理、文件操作管理以及文件保护等等。
- 进程管理: 其工作主要是进程的调度。
而操作系统在往上就是我们所处的为止(用户),在这里我们就可以用命令行或是图形化界面进行各种操作,这一层也被称为用户层。
而操作系统为了保护自己,对上只会暴露一些接口,而不会让用户直接访问操作系统,这一系列接口被称为系统调用接口。
但这些系统调用接口对我们普通用户来说使用成本又太高了,因为要使用系统调用接口的前提是你的对系统有一定的了解。所以在系统调用接口之上又构建出了一批库,例如libc 和libc++,以及系统所对应的shell外壳。实际上在语言级别上使用的各种库,就是封装了系统调用接口的,我们就是通过调用这些库中的各种函数,来完成对系统调用接口的使用,进而完成了各种程序的编写。
至此,我们已经了解了计算机内部的软硬件系统架构和操作系统对上,对下的管理
总结: 为什么要有OS?
- 操作系统对下软硬件资源的管理,稳定的,高效的,安全的,能进行良好的工作(手段)
- 操作系统对上要给用户提供一个稳定的,高效的,安全的运行环境(目的!)
三、深度理解操作系统高度 “管理”
这里我们通过一些现实的场景案例来帮助大家来理解操作系统对软硬件资源管理是怎么进行的。
💦场景理解
这里我们以学校为背景,在学习中,存在着三种人:学生、辅导员、校长,而在三种人中,就存在着管理与被管理的存在,很明显,校长在这三种人中是管理者,学生是被管理者,那么辅导员是什么呢?
其实仔细想想,也就明白了,完成一件事,我们都需要经过抉择是否要做这件事(决策),然就是去完成这件事(执行),所以代入上面场景就是,校长是决策者,做出决策之后,自己不需要去执行,而是让辅导员去执行,所以辅导员的主要任务就是执行管理者的决策,我们称其为执行者。
那么问题就来了,校长虽然是管理学生的,但是,一般情况下学生是很少能够看到校长的,并且校长也很少能看到学生,那么校长是如何对学生进行管理的呢?
举个例子,现在校长要求辅导员将计算机成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的编程大赛,当辅导员将资料拿来后校长选出三名学生说:“就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的编程大赛。”然后校长就什么也不管了。
在这个过程中,校长根本就没有见过这三名同学,就其进行了管理,他根据的就是数据。
实际上,学校早就将我们每个学生的各种信息进行了管理,每一个信息代表一个学生,这样,校长通过对这些信息的管理就能够做到对学生的管理。而这样的一套信息,用C语言的描述就是结构体,而在C++中叫做类
当学生的数量多了起来,校长就可以将全部学生的信息组织起来,当然组织起来的方式有很多种(链表、顺序表、树),而每种组织方式都有其自己的优势,这便是管理数据的数据结构。
总结一下:
管理者管理被管理者,实际上是先将被管理者的各种信息进行描述(抽象成某种数据信息),然后再将多个被管理者的描述信息根据某种数据结构组织起来,最后管理者管理的被管理者实际上就是对数据结构的瓜拉尼
重点: 管理的本质就是: 先描述,再组织。
总结:
- 管理者和被管理者,其实是不需要直接沟通的!
- 管理的意义: 对被管理对象的数据做管理!!!
- 管理的本质: 先描述,再组织。
四、操作系统(OS)的“管理”
操作系统是如何进行管理呢?
上面我们所说的校长、辅导员、学生,校长我们就可以用到操作系统上,去重新定义它们之间的关系
- 校长【发布决策】 → 操作系统
- 辅导员 【执行决策】 → 硬件驱动
- 学生【参与执行】 → 硬件
向上对用户提供服务
- 计算机的底层有相应的硬件和驱动程序,操作系统内核对下可以管理好软硬件,同样也要管理进程,并且可以对外提供服务。
- 操作系统并不相信任何的用户,他不会将自己的任何数据结构、代码逻辑... 直接暴露给用户,为了防止用户恶意修改操作系统,所以操作系统是通过系统调用的方式,对外提供接口服务,类似于银行的工作人员提供一个一个小的窗口来给我们服务。linux操作系统使用C语言写的,这里所谓“接口”,本质就是C函数。我们学习系统编程,本质就是学习这里的系统接口。
- 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库函数(用户操作接口),有了库,用户和开发者的使用门槛也就降低了,更加有利于二次开发。