我们前面谈到了一个可执行程序首先会到内存进行预先加载~而在我们的计算机中第一个被加载的软件就是操作系统~
操作系统的主要工作就是对软硬件资源进行管理~
这里我们先从操作系统下层开始讲起~
我们把操作系统类比为校长,驱动程序类比为辅导员,底层硬件类比为学生~
试问如果校长想要管理学生,需要和学生进行直接接触吗?——不需要,校长只需要得到学生的相关数据就行了~校长做出决策需要整理学生数据~辅导员落实决策,去收集学生的数据最后交给校长~
管理的本质从来都不是谁与谁去见面,而是获取到它的数据,然后对数据进行管理!
那么当校长获取到大量的数据时又应该如何去管理呢?——借助数据结构
校长不可能事无巨细去观察每一位学生的具体细节, 所以他需要一个能大概整体概括学生的基本数据~
而在我们学习的语言中,有这么一种方式是用来描述一类事物特征的——结构体~
我们通过结构体对学生进行描述,里面添加关于学生的基本信息。
然后结构体构造大量对象~每个对象基本属性一致但数据各不相同~这是描述过程
校长不可能只对一位学生作管理,所以需要像链表一样把所有学生的结构体对象都链接起来~这是组织过程,当然组织的形式有许多种,但无论哪一种背后都是利用容器(vector,list等等)进行组织!
先描述,再组织,最终形成对数据的增删查改,而这就是对数据的管理~
所以管理的本质就是对数据的管理,而实现的方法就是对数据进行描述再组织起来!
而操作系统会对驱动程序进行管理~也会对底层硬件进行管理~本质都是对数据进行管理!
接着我们再对操作系统的上层进行分析~
这里我们用银行来类比操作系统~
银行当前的功能就是帮助用户进行资产的管理~
那么是直接开放大门让用户进银行里面亲自存钱,取钱吗?——当然不可能,你怎么保证他会不会多取钱或者少存钱进行虚报呢?
所以银行设置了一批窗口~让用户到这些窗口填写个人的基本信息,由我们银行的工作人员进行信息核对,再替代用户进行用户对资产的管理!而这种窗口也称为系统调用窗口~用户想要去访问操作系统底下所管理的底层硬件就必须通过系统调用接口,实际上系统调用接口是操作系统为用户开发的公共类~它可以代替用户访问底层硬件~但它本质是归操作系统所管理~
可是不是所有人都会想到系统调用接口的,就比如一位80岁老大爷,他在银行窗口面前大字不识一个无从下手呀~而这时候银行的经理就会出现手把手来帮助大爷。而银行经理就是用户操作接口~
用户操作接口里面封装了系统调用接口,但从形式上会更加便捷~因为是他帮你调用系统接口,不是你自己来,你只需要调用用户操作接口就行了~而用户操作接口里面最经典的就有c语言标准库,我们平时使用的printf,scanf就相当于用户操作接口,而在printf,scanf内部则是封装了调用系统接口的函数~用户操作接口的出现可以减少系统调用接口的使用成本~
另外用户操作接口还可以根据你所在的平台不同而去调用不同平台的系统调用接口~
所以最后我们总结一下:为什么我们计算机中操作系统会是第一个被加载进内存的软件呢?
因为操作系统对下能够管理好硬件资源~对上能够提供出一个良好的运行环境!