前些天买了一台新电脑,双核的CPU、4GB内存、500GB硬盘、1GB独显、DVD刻录、14”屏幕,感觉用起来还可以。
后来开始考虑一个问题:程序是运行于内存之中的,内存有不够的时候,于是有人发明了虚拟内存。虚拟内存把内存中的数据写到硬盘上;硬盘比内存慢,于是又有人发明了缓冲,把硬盘上的数据储存在内存中。究竟是应该从内存到硬盘,还是从硬盘到内存,我糊涂了。
然后有了一个大胆的想法:把500GB硬盘完全作为虚拟内存,这样我就能运行很大的程序了。反过来想,把4GB内存完全作为磁盘缓冲,那么效率不是可以相当高了吗?到底是500GB的虚拟内存,还是4GB的磁盘缓冲?
最后选择了后者。其实也谈不上选择,我又不会改操作系统的内核,只能说是个人偏好于4GB缓冲的方案。这样一来,可以认为程序是运行于硬盘之上的,malloc函数分配文件而不是内存,它可以返回一个路径而不是一个地址,返回空字符串相当于返回NULL等等。当然,还有缓冲在,只要内存中还有空间,它还是优先分配内存的。
更进一步的想法,内存-->硬盘-->网络,程序可以运行于硬盘之上,难道它不可以运行于网络之上吗?可是仔细一想,网络上其他计算机的数据也是存储在硬盘上的,所以可以使用网络文件系统。
总之,程序应该运行在硬盘上,也就是存储程序的地方。软件方面,这个想法要想成为现实,需要合并操作系统的FS和MM模块;硬件方面,CPU可以内置一个文件系统,现有的文件系统这么多,是时候统一它们了。