关于统一内存和外存

关于统一内存和外存

理想世界

一台理想的计算机中有无限的存储空间。等一下,为什么需要存储空间?

我们为什么要使用计算机?这个问题其实还挺复杂的。先假设我们使用计算机纯粹为了做计算,更确切地,λ 演算。λ 演算只是一个将表达式归约到一个值的过程,存储的概念不在其中。所以,从概念上说,存储是实现计算所需,不是计算所需。

另一个更从实践角度出发的理想模型是图灵机。图灵机假设了无限的存储空间,其实也反映出存储是实现计算所必须,却又不是计算的一部分。身体是灵魂的必须,却不是灵魂的组分。

所以呢?所以体现内存结构的代码,可以被抽象隔离在计算之外

记忆谱系

我们都知道,内存是分级的。可能在计算机刚诞生的时候就是如此了,因为在冯·诺伊曼的《计算机与人脑》中提到了”记忆谱系“。

我们也知道,计算的局部性原理,越快的存储越贵云云。

  • 寄存器
  • 高速缓存
  • 内存
  • 外存

程序设计语言

语言暴露隐藏
汇编寄存器 内存(空间) 外存(硬盘)高速缓存
C内存(结构) 外存(文件)寄存器 高速缓存
Java内存(类) 外存(文件)寄存器 高速缓存
SQL外存(表)寄存器 高速缓存 内存

SQL 不是通用的程序设计语言,可是我们难道不能用数据库管理系统的技术强化高级语言的运行时系统吗?

Language Based System

如果一切以计算为中心,那把计算机的操作系统设计为高级语言的运行时系统的拓展版就是很自然的思路了。

以 Java 虚拟机为例,它已经有了管理线程和内存(垃圾回收)的能力,何不赋予它管理外存的能力?这样一来,标记为 persistent 的对象(甚至可以是整个名称空间)将进入持久化名称空间,在某个时机写入外存。

这样的系统可能实现吗?请想想 SQL,难道不能用同样的技术支持高级语言的运行吗?

疑问

计算机还有控制等一系列接口技术的应用,它们是否破坏了设计?

我想,高级语言与外设的交互方式应当如此:

  1. 高级语言创建一个驱动程序包提供的数据结构(创建过程可以是主动的或者被动的)。
  2. 外存将数据”内存映射“到结构中。

之后,这个包含 IO 信息的数据结构就和其他数据结构无异了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值