关于统一内存和外存
文章目录
- 关于统一内存和外存
- 理想世界
- 记忆谱系
- 程序设计语言
- Language Based System
- 疑问
理想世界
一台理想的计算机中有无限的存储空间。等一下,为什么需要存储空间?
我们为什么要使用计算机?这个问题其实还挺复杂的。先假设我们使用计算机纯粹为了做计算,更确切地,λ 演算。λ 演算只是一个将表达式归约到一个值的过程,存储的概念不在其中。所以,从概念上说,存储是实现计算所需,不是计算所需。
另一个更从实践角度出发的理想模型是图灵机。图灵机假设了无限的存储空间,其实也反映出存储是实现计算所必须,却又不是计算的一部分。身体是灵魂的必须,却不是灵魂的组分。
所以呢?所以体现内存结构的代码,可以被抽象隔离在计算之外。
记忆谱系
我们都知道,内存是分级的。可能在计算机刚诞生的时候就是如此了,因为在冯·诺伊曼的《计算机与人脑》中提到了”记忆谱系“。
我们也知道,计算的局部性原理,越快的存储越贵云云。
- 寄存器
- 高速缓存
- 内存
- 外存
程序设计语言
语言 | 暴露 | 隐藏 |
汇编 | 寄存器 内存(空间) 外存(硬盘) | 高速缓存 |
C | 内存(结构) 外存(文件) | 寄存器 高速缓存 |
Java | 内存(类) 外存(文件) | 寄存器 高速缓存 |
SQL | 外存(表) | 寄存器 高速缓存 内存 |
SQL 不是通用的程序设计语言,可是我们难道不能用数据库管理系统的技术强化高级语言的运行时系统吗?
Language Based System
如果一切以计算为中心,那把计算机的操作系统设计为高级语言的运行时系统的拓展版就是很自然的思路了。
以 Java 虚拟机为例,它已经有了管理线程和内存(垃圾回收)的能力,何不赋予它管理外存的能力?这样一来,标记为 persistent 的对象(甚至可以是整个名称空间)将进入持久化名称空间,在某个时机写入外存。
这样的系统可能实现吗?请想想 SQL,难道不能用同样的技术支持高级语言的运行吗?
疑问
计算机还有控制等一系列接口技术的应用,它们是否破坏了设计?
我想,高级语言与外设的交互方式应当如此:
- 高级语言创建一个驱动程序包提供的数据结构(创建过程可以是主动的或者被动的)。
- 外存将数据”内存映射“到结构中。
之后,这个包含 IO 信息的数据结构就和其他数据结构无异了。