一、总论
这篇博客会从一个初学者的视角去积累一些科研中的常见“名词”,希望可以借此达到一个科普和入门的目的。
事实上我也没法以不是“非初学者”的视角去写,因为事实上我也刚知道这些东西不到一个上午。所以可能会有一些错误或者偏颇的地方,还望大家见谅。
此外因为我本人是做系统的,所以可能 AI 等方向我并不清楚,在下面的文章中也不会涉及。
一开始的用户程序 User Program 都是裸机程序,他们直接运行在硬件上。这种方式的缺点在于,任何程序都需要思考与其他程序的“共存方式”,内存空间的是具象的,所以就要思考自己要利用多少的内存,利用哪个部分的内存;CPU 是具象的,所以就要思考自己何时会被调度,以怎样的形式被调度;所有的硬件资源都是具象的,所以要思考的事情数不胜数。
正因如此,操作系统 Operating System 提供了一层抽象,OS 将原本的硬件资源全部进行了抽象表达,具象的硬件资源被操作系统接管,不再提供给用户程序具象的硬件资源,而是提供给用户抽象的“系统调用”,系统调用是操作系统提供的一种硬件资源的封装形式,用户程序使用系统调用来完成使用硬件资源的功能。
抽象的硬件资源相比于具象的硬件资源,其好处在于抽象资源要更加简单,内存空间变成了虚拟内存空间,不再有“有限”或者“非独占”的困扰;外存变成了文件,不再有复杂的驱动或者定位问题;CPU 的调度被简化成了线程的调度,由 OS 进行统一管理,再也不用思考与其他进程共享 CPU 的问题,所有的硬件资源都被抽象的十分简单,使得开发者不再需要考虑与设计本身无关的问题。
我们常听一个说法“在语法上,C++ 是 C 的超集”,这句话的意思是说,C++ 继承并发展了 C 。这是十分有道理的事情,但是这个说法往往造成两个常见的误解:
这两点其实并不正确。C++ 作为一门独立的语言,虽然起源于 C ,但是在设计思想上和 C 可以说是截然不同,但是又因为起源于 C ,在设计时又不可避免的带上了 C 的烙印,本文希望探讨一下 C++ 与 C 的继承和发展关系,故起名为“滥觞”。
这章可以看作是“CPP设计-寸步难行”的姊妹篇,这章介绍了 C 和 C++ 的不同,“寸步难行”介绍了 C 和 C++ 的相同之处。