抽象与分层是计算机科学中的一种基本思想方法,是降低计算机系统复杂度的有效方法。
抽象,本质上是一种泛化与概括的思维方式。
在计算机中核心资源就是CPU和内存,我们对CPU计算过程抽象的就是函数,函数是计算过程的泛化。而对内存中数据的抽象就是数据结构,数据结构是数据组织方式的泛化,而对象的本质就是二者的结合,将一部分相关的数据看为一个整体,并且绑定一系列与数据相关的函数。
而编程中模块化,面向对象正是抽象这一概念的衍生。
而分层就是基于抽象来进行的,我们对底层的数据和计算过程抽象之后,底层就可以通过调用接口对外提供某种服务,在这个基础上我们又可以进行更高一层的抽象,就这样一层一层的往上构建我们就可以得到内在结构高度自动化,对外通过接口提供强大的功能的虚拟机。
计算机系统的虚拟机可以根据抽象层次来划分层次:
最底层的虚拟机就是没有安装任何软件的裸机,我们可以称为VM0;
第二层的虚拟机就是运行在计算机上的操作系统,通过管理我们的硬件资源,对硬件资源进行抽象,构建出了地址空间,进程,线程等概念,我们可以称为VM1;
第三层就是我们的编程语言的虚拟机,例如著名的JVM,通过虚拟机这一间接层屏蔽了硬件的差异,极大的提高了代码的可移植性,使得“一次编程,处处运行”成为可能,我们可以称为VM2。
这三层结构清晰,底层为高层提供服务,同时隐藏了内部的细节,从而化简计算机系统的复杂度,使得计算机结构清晰,同时也提高的计算机的易用性。
但是结构复杂而使用简单的计算机也带来很多问题:
(1)间接层过多导致编程人员很多时候难以理解计算机的本质,编程变得混乱。
(2)缺乏对底层的了解,容易出现BUG。
(3)编程变得简单,门槛降低,导致从业人员参差不齐。