为什么会想到操作系统
大概一年以前,我有一个想法,就是基于不可变值实现OpenGL的渲染器。我把这个想法发到博客上了,并且在Hacker News和Reddit上得到了不少关注。还有些人甚至给我发来了邮件。
在吊床上思考了很长一段时间后,最后这个想法转移了操作系统的身上。大致是:如果操作系统是由不可变值组成的会是怎样的呢?
不可变的操作系统?世界都是一直改变的
不可变值是观察世界来说是一个非常合理的方式。作为一个观察者,你看着这个世界随着时间流逝在不停的变化。当你想要做些什么的时候,你会拍下张照片。这个照片是静止的,你愿意花多长时间去分析它都无所谓。
再回到操作系统这个话题上来。在这里唯一可变的只有一个交换操作。你会有一个叫原子(atom)这么个东西,它会指向一个不可变的值。你可以随时获取到它当前指向的不可变值。从原子这总能获取到一个完整的值,正如它名字所说的,它是个原子。你可以给它赋值,这样的话这个原子会指向另一个新的不可变值。你不能够直接修改某个值。原子应该有某些机制来保证,上次读完后没人进行更新的话,才能对它进行修改,这样的话,它会更可控些。
细心的读者会发现,我刚才说的其实就是Clojure里面的状态模型。这也正是我这个操作系统将要实现的,状态就是由一系列的不可变值组成的。
不可变的内存模型
那么,一个进程会拥有很多指向不可变值的原子,而所有这些值都是无法修改的。没错,这里我说的就是所有。你可以将字节序列存储到一个值里,不过这些字节是不可变的。位移操作?创建一个新的值来完成。要修改第四个字节?也是创建新值。
在这个模型里面,内存可以在进程间安全的进行共享。把一个不可变值传给另外一个进程有什么关系呢?没事。非常安全。这里也不需要什么保护性拷贝或者别的保护机制。只有原子本身需要保护。应该有一个机制来管理进程间原子共享,只有创建这个原子的进程可以去共享它。
创建进程几乎就没有任何开销。在Linux里面,fork操作有个非常聪明的写时复制(C0W)的机制,因此fork操作一开始什么也不干,一旦这两个进程有人开始修改内存里的值的时候,才会发生拷贝操作。当然这也有有一定的开销的。但如果值是不可变的话,这就完全没有任何开销了,根本就不需要进行拷贝。不可变的就是不可变的!唯一的开销就是原子本身了,可以用拷贝模式(时间复杂度是O(n)),也可以使用Linux系统的COW的机制。
如果可以进行指针运算的话就一切都完蛋了。解决方法就是对于这个操作系统上的开发语言而言,它是没有指针的。指针还会占内存,我们可不喜欢占地方的东西。我们要存储的只是值。
当然了,还可以进行许多优化。Clojure有一个transients的概念,它的意思是”当你在一个函数里创建一个值的时候,你可以对它进行修改,一旦它从函数里返回了,它就是不可变的。因此从外面看来,函数没有修改任何范西,因为这个可变的值只是函数内部可见的。我会替你自动检测这个。我们还可以监测是否有别人引用了你的值,如果没有的话,你可以对这些值进行修改。这只是一个优化,对程序员来说完全是不可见的。
垃圾回收
一个不可变值组成的系统也是需要垃圾回收的。这些都会在系统底层来完成。
如果垃圾回收器知道所有这些值都是不可变的,那么事情就非常有意思了。一般来说,垃圾回收器在整理老生代堆的内存碎片的时候,会暂停所有的操作(stop the world)。当所有值都不可变的时候,如果要碎片整理,你就把一个值拷贝到另一块区域,然后更新下内部的指针就好了。
还有一点,通过这种拷贝并交换指针的方式,你还可以优化内部的字节编码,而不用暂停程序的运行。假设我们发现老生代中的值X是一个map,并且它已经很久没有更新了。或话我们可以把它优化成某种结构,也就是把它拷贝到内存中另外一个地方,不过用一种不同的可能是更高效的方式来进行存储。除了内核没人知道这事,也不需要暂停程序的执行。
性能
我们一直都在努力能更好的
与硬件进行协作以提升性能。事实上,尽可能把操作系统的C代码来硬件来实现。我有一个荒谬的想法就是让英特尔在硬件层来实现我这个操作系统,观众席上有人大声高喊,”我们终于可以用XXX换掉我们的内存啦!“或者类似的。我不是一个硬件工程师。那么在硬件里实现不可变值的垃圾回收?想想罢了。
这并不是说我自己不去提升性能。也许这个操作系统在某些方面比传统的操作系统性能要好,因为它不需要写时复制或者保护性拷贝,它的值可以自由的共享。在处理器看来,代码也是不可变的,缓存了代码的处理器的效率可比缓存了数据的要快得多。如果CPU知道内存中的哪些数据页是不可变的话,那么一级缓存和二级缓存应该会高效得多。或许我们可以通过将数据拷贝到不同的芯片上来解决冯诺依曼体系的瓶颈问题?因为这是完全不可变的数据,你可以放心的去拷贝。不过谁知道的,时间或许能证明这一切。
文件系统
这块想的不是很多。说实话我自己很少在程序中使用文件,我一般直接访问数据库。所以我想这个系统的持久层应该是一个key/value的数据库。或许跟Datomic那样只能追加数据,不能修改?又或者在这个不可变系统里,文件系统也存储在一个不可变的地方?好吧,谁知道呢。
开发语言
当然是Lisp。我会为Lisp定制一种字节码格式,可能会和EDN很像。这不完全是编译后的字节码,所以字节码这个说法可能欠妥。我的想法是Lisp的抽象语法树(AST)应该用一种编码后的巧妙的格式存储,而不仅仅是纯文本。纯文本太痛苦了。最后会有一个JIT编译器来读取这种格式,然后编译成本地的机器码。
代码当然是不可变的。因此可以放心去做热部署,已有的代码会继续运行,新的调用会分发到新部署的代码上。
没想好应该用静态语言还是动态语言。哪个更容易实现就用哪个吧。
再强调一遍,这个系统看起来很像是Clojure的一个衍生物。我也不太确定是不是就用Clojure作为开发语言就好了(Clojure已经移植到不同的平台上了,JS,JVM,CLR)。还是那句话,谁知道呢。
这很可能是个错误的想法
这是我写的第一个操作系统。
很有可能我讲的每一点都是错的。这也正是我实现它的原因。这只是一个研究性的项目,没有什么实际的目的,比如解决程序缺陷过多什么的。我只能说,这只是一个爱好,不会像GNU那样那么专业全面。在我证明这个想法可行之前,不会考虑到什么会议上去分享这些想法。
这个系统还有很长的路要走,因此现在
实现的东西还不多。等我先把进程和GC这块搞完再向大家汇报进度吧。
原创文章转载请注明出处:
http://it.deepinmind.com
英文原文链接
分享到:
相关推荐
反过来也是信息交流的不可或缺,使得即时通信系统更加具备研究价值,互联网对其的重视从不减少,反倒是与日俱增,人们对其的功能构想更是丰富多样,更是推动了互联网大环境的发展。 这篇文章就设计一个简单的即时...
3、面向对象关系数据库系统的应用实例 3.1 系统构想。设想这个是物流信息 MIS 系统。该 MIS 系统有几种验证方法:(1)通过使用的代理和选择的物流公司。如果其代理在其业务的 代理IP段的话,就认为是在物流公司...
在嵌入式系统的人脸识别技术构想中,作者首先进行图像的采集,嵌入式的处理以及最后的识别三部分,从这三处大的方面着手实践操作。首先在进行图片采集时主要是借助摄像的方式实现图片的采集。其次,是进行各种软硬件...
在这次的课程设计中,由于要编写的程序的篇幅较大,因此不可避免地出现了相当多的错误,调试程序花了我不少的时间。我发现调试程序是有规律和技巧可寻的。/**/注释符号的灵活运用提供了较大的空间。通过程序的...
1. 综合原则:要综合各种知识,因此要听取各种意见,取其所长,互相弥补,以帮助获得关于实践对象的可达的想定(scenario)。 2. 参与原则:全员参与,或不同的人员(或小组)之间通过参与而建立良好的沟通,有助于...
在不仅仅是列举思想的研究中,研究人员通常选择以下三个结构中的一个或多个,这些结构通常可作为因变量进行操作:1)概念质量,2)概念新颖性,有时也称为稀有性或不寻常,以及3)创意。 一直以来,比较各个研究的...
另外,经办人信息和 厂家信息管理也是超市信息管理中一个必不可少的部分,它提供着与入库和出库相关的 地一些信息,使得整个系统更加完整,更加实用。 通过对超市管理日常工作的详细调查,搜集了大量的资料,从系统...
煤矿机器人工作在井下危险气体环境下,特别是对于井下移动式巡检井下机器人,其...通过井下巡检机器人专用充电硐室和智能岔轨技术的设计,可实现巡检类机器人井下在轨充电,有利于煤矿机器人井下不间断智能巡检作业。
根据城管局信息化总体规划的指导思想、建设原则、总体目标、实施战略,由城市管理局组织主要编写了《XX市树木管理系统规划方案》,以既有应用系统现行信息系统为参考,数据对接,提出整合优化的构想,提出在2018年...
目录 前 言 1 一、 系统描述: 2 1、设计目的 2 2、需求分析 2 3、设计任务要求 3 4、系统主要包括以下几项功能: 3 5、界面构建 3 二、课程设计内容: 3 1、 数据库系统简介 3 2 、JDBC数据库连接 4 3 、建立JDBC...
煤矿机器人工作在井下危险气体环境下,特别是对于井下移动式巡检井下机器人,其动力...通过井下巡检机器人专用充电硐室和智能岔轨技术的设计,可实现巡检类机器人井下在轨充电,有利于mk机器人井下不间断智能巡检作业。
虚拟现实系统按其功能高低大体可分为四类:桌面虚拟现实系统、沉浸式虚拟现实系统、分布式虚拟现实系统和增强现实(Augmented Reality,简称 AR)系统。桌面虚拟现实系统可以通过桌上型机实现,成本较低,功能也最...
不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况...
摘要:任意波形发生器是信号处理领域中必不可少的仪器设备,而很多任意波形发生器不能产生快速、有效、连续而且易于定制的信号波形。本文提出了一种利用缓冲区快速交换数据、基于PCI总线的任意波形发生器的设计构想...
构想性强调虚拟现实应具有广阔的可想像空间,可拓宽人类的认知范围,不仅可以再现真实存在的环境,也可以随意构想客观不存在的对象甚至是不可能发生的环境。 触觉交互技术对于虚拟现实系统的交互性具有重要价值,在...
设计论证过程包括对此设计项目建立研究模型、需求调研和可用性设计指标设定等,然后把经分析得出的关于此项目的可用性设计指标和之前提出的触摸屏界面通用设计原则构想进行对比,查看出入点,随后做出原型设计并提交...
它利用现代计算机技术、现代通信技术、现代自动控制技术和现代图像显示技术等现代信息技术以及其他现代高新技术与建筑技术为建筑本体提供基本或配套设施,并成为建筑物不可或缺的一部分。 智能建筑的发展前景非常...
在模型不能满足用户所有需求的情况 下,bAduVMS推出一些互动的模块对系统进行补充,尽量满足用户的需求。 八度志愿者管理系统是国内少有的以公司力量来支撑的志愿者管理系统软件,在八度公司的研发支撑下,为广大...
由于区块链数 是确定下来的,不可随意变更,因此,在此基础上的智能家居系统收集的用户数据绝对可打保票,因而能为用户舒适的智能家居体验提供保障。也能拓展到更多方向。例如,根据智能家居收集的用户健康数据,可...
bAdu VMS系统整合了CMS(新闻内容管理系统)、VEMS(志愿者活动管理系统)、VRMS(志愿者注册管理系统)、VCMS(志愿者认证管理系统)、VTMS(志愿者服务时数管理系统)等模块。通过这些系统模块帮助您的组织实现无...