目录
一,关于操作系统
二,计算机的层次设计
2.1 硬件层
2.2 驱动层
2.3 操作系统层
2.4 用户层
2.5 系统调用接口
2.6 用户调用接口
三,操作系统管理的精髓 —— 先描述,再组织
3.1 什么是先描述?
3.2 什么是再组织
3.3 总结
一,关于操作系统
先抛结论:操作系统是一款进行软硬件资源管理的软件,是当代大部分计算机资源管理的解决方案
计算机只能识别和运行二进制机器语言,也就是由0和1组成的二进制序列。所以,最简单例子就是,我们复制粘贴文件,绝对不是我们Ctrl+c和Ctrl+v就能解决的,前面说的,计算机只能识别二进制序列,所以一定是由一个东西介于我们和机器之间,将我们的请求通过某种方法转化成了二进制语言给机器,所以OS就是干这个的,介于我们使用者和机器之间,进行资源管理。
设计操作系统的目的:
①与硬件交互,管理所有的软硬件资源
②为用户(应用程序)提供一个良好的执行和运行环境
所以,操作系统的定位就是:一款纯正的 ” 搞管理 “的软件
二,计算机的层次设计
2.1 硬件层
硬件层应该是我们计算机中和我们距离最近的了,因为我们肉眼看到的就是计算机实物,也就是计算机底层的硬件。这些硬件看似杂乱无章,但是我们不能简单的下结论,因为作为第三和第四次工业革命的产物,其所蕴含的知识绝不是目前的我们能够完全了解的。硬件的排列虽然杂乱无章,但是都是严格遵循冯·诺伊曼体系结构的
由于我们是应用层开发方向,硬件层暂不细究
2.2 驱动层
单单只有硬件是不够的,例如:内存何时从输入设备读取数据,读取多少?数据何时从内存刷新到输出设备?等等,由于这些东西都和内存有关,所以可以引入软件来做这些事,而这个软件就是”操作系统(Operator System)”
那么这就有个问题,OS直接和硬件交互吗?当然不是
举个例子:我们最熟悉的输出方式就是内存把数据打印到显示器上让我们看到,但是我们也知道网卡也可以作为输出设备,所以将数据打印到屏幕上和网卡往网络里发送数据是两种完全不同的数据输出形式,那么OS的内核源代码就需要针对各种不同的输出形式进行重新编译,这相当于把OS和硬件层合为一体了,维护成本巨大。所以我们在硬件层和OS层中间加上了驱动层,驱动层的工作就是单独去控制底层硬件。
例如网卡有网卡驱动,硬盘有硬盘驱动,声卡有声卡驱动等等,每个硬件都有对应的驱动,OS就用某种技术想办法将所有驱动识别成一种类型然后单独针对该类型进行管理,这样就能完成OS层和硬件层的解耦。
2.3 操作系统层
操作系统是一款搞管理的软件,管理啥呢?主要管理下面着四个:
①内存管理:内存的分配,共享,扩张和保护等等
②驱动管理:对计算机设备驱动程序的分类,更新和删除等操作
③文件管理:文件的存储空间的管理,目录管理,文件各种操作管理以及文件数据等管理
④进程管理:主要负责进程的调度
2.4 用户层
OS之上就是用户层,就是我们所处的位置,在这里我们可以用命令行或是图形化界面进行各种操作
2.5 系统调用接口
但前面也说了,“ 人 ” 不适合直接与系统打交道,所以OS为了保护自己,只堆上暴露了一些接口供用户使用,而不会让用户直接访问操作系统,这一系列接口我们成为系统调用接口
2.6 用户调用接口
虽然系统调用能方便我们操作,但是它的学习和使用成本对普通用户来说还是太高太高,所以能够让用户更好的访问操作系统,在系统调用之上构建除了“ 库 ” 的概念,比如我们使用的printf和scanf,就是库给我们提供的,这些库又对系统接口进行封装等处理,从而让普通用户能够高效使用
一个好的产品是把用户当傻瓜的,要想想办法让用户用起来又快又爽,抖音就是一个让用户用起来又快又爽的成功例子,上至80岁的老人,下至10岁的小孩都能用抖音刷视频。
操作系统也是这样,所以有了服务层:shell外壳(主要是Linux)和图形化界面(主要是Windows)
第三方库也就是这样,对操作系统的各种接口进行再封装,如果说操作系统的服务层是为了更好服务用户,那么第三方库激素更好地方便程序员编写代码(C,C++,Java,Python等)
三,操作系统管理的精髓 —— 先描述,再组织
操作系统是一款纯正的“搞管理”的软件,那么OS是如何做到管理这么多东西的呢?
要想学号操作系统,就必须正确理解什么是“管理”
3.1 什么是先描述?
我们来举一个简单的例子,如下图:
一个学校有三个角色,为学生,辅导员和校长,校长是管理者,学生是被管理者,那么辅导员充当什么角色呢?
我们先了解下什么是“ 决策 ”和“ 执行 ”
完成任何一件事都要经过两种过程:
①首先是绝对一件事要不要做和如何去做 —— 决策
②然后就是具体落实做这件事 —— 执行
校长作为管理者管理学生,那么校长就是决策的那个人,但是校长一般不 直接执行决策,会把决策交给辅导员去执行,所以辅导员扮演的角色就是“执行者”,执行管理者的决策。
虽说校长是管理学生的,但是我们一般在学校是根本遇不见校长的,校长也没有单独和我们见面,那么校长是如何做到不和我们本人进行交流的情况下对我们进行管理的呢?
我们第一次入学前,都会把我们的信息录入学校数据库,比如基本信息,成绩信息,社会面貌等等信息,我们可以讲:这些信息描述了一个学生。
这这种信息描述学生的方式,我们在C语言有一个东西叫做“结构体”,在C++等OO语言中我们叫做“面向对象”,操作系统也一样,由于Linux是用C语言写的,所以底层就是用的结构体作为描述的基本单位,讲底层的各种部件全部抽象成结构体,这就是“先描述”
3.2 什么是再组织
校长就通过这些信息的管理就实现了对学生的管理。当学生数量躲起来了,校长就可以把这些信息组织起来,用链表,顺序表,树等结构把这些描述学生信息的结构体全部搞成数据结构
这样,校长就只需要对上面双链表进行增删查改,就可以间接实现对很多学生的管理。有新生入学时就增加一个节点,有人毕业时就删除节点、
操作系统也是如此,以Linux为例,当系统中结构体很多时,就可以用各种数据结构把结构体全部串联起来,然后OS只需要对数据结构进行各种操作,就可以完成对结构体的操作,这就是“再组织” ,这套原理适用于所有操作系统,网络也是
3.3 总结
管理者要管理被管理者,实际上是先用各种信息对被管理者进行描述,然后讲很多个这种描述的信息用特点数据结构组织起来,最后管理者管理被管理者其实就是对数据结构的管理,这样可以大大减少管理者管理的成本,而且能够大大提高管理者管理的效率,是现代计算机操作系统设计的精髓所在