我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成 ,(按照冯诺依曼体系结构组装)。


设备之间的数据流动,本质上是设备之间的数据的相互拷贝
那么,拷贝的整体速度不就是决定计算机效率的整体指标 。


引入内存为什么会让计算机运行速度变快呢? 就冲木桶原理来看,那最慢的外设不是还在吗? 内存的引入使得数据,不仅要从外备拷贝到内存,内存又拷贝到CPU上,反而还多了一层拷贝,速度不是应该更加慢了吗?

内存就是一个非常大的缓存,介于CPU和外设之间。 所以,在这个体系结构下,计算机的效率就以内存为主。


操作系统就是计算机第一个加载的软件。
操作系统是一个进行软硬件资源管理的软件。


操作系统是一个对软硬件做管理的软件。
那么怎么理解这个管理呢?
管理层面就有三个层面:做决策,做决策+做执行,做决策。 就相当于:校长(做决策),辅导员(执行校长的决策+对学生下决策),学生(做执行) 这也就对应着我们计算机的结构:操作系统,驱动程序,硬件。

在校长管理我们的时候(也就是希望对我们下决策的时候),他需要我们的信息,来帮助他对于我们来下决策(类似于这学期逃课超过五次的直接回家)。 在这种情况下,校长就需要通过逃课次数来锁定一个人,这时候也就是需要结构体,大量的数据方便存储,以及方便查阅,就需要数据结构。 结构体的引入就是先描述需要管理的数据的属性,再组织就是将数据放到合适的数据结构中。

那么如何管理驱动程序呢?当然也和上面的过程一样啦。

操作系统本质就是做管理工作 。为什么要有操作系统?也就转变成了为什么要有操作系统的管理?

为什么要有?就是希望操作系统能够管理好软硬件资源,给用户提供良好的使用环境。


所以,就有一个结论,就是任何人都不能越过系统调用接口直接访问操作系统的数据。
越级访问是绝对不被允许的。

系统调用和库函数一般就是上下层的关系。 一部分,会影响到硬件的库函数,都在实现的时候封装了系统调用接口。

所以,这类会直接影响到硬件的函数,其实上都是通过系统调用接口来实现功能的。

这套逻辑是每个操作系统的底层逻辑。
那么在写C语言时,无论是那个平台都可以使用printf和scanf,那是因为函数库在实现的时候就考虑到了,不同操作系统的兼容性,在不同平台下,调用的是不同的系统调用接口。 这就是语言的跨平台性、可移植性。