万维网操作系统初论

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




【去年思考道指令应用时,突然有一个把道指令扩展到互联网的想法,不是很成熟,但基本原理可行,陆陆续续写了几段,以后有时间再完善一下】

万维网操作系统初论 起源

最初的互联网只是科学家用来传输数据的工具,开始的应用也都与数据传输有关,如最早的FTP、EMAIL等,现在最流行的应用WWW也一样。万维网最初是物理学家为了查找资料方便而开发出来的一种网络应用,所以它的的本质都是为查阅文本资料而设计的,虽然后来衍生了很多基于web的应用,但这些应用没有一个不是基于页面阅读而设计的,如BBS、blog、Twitter、facebook等。那么基于Web页面的设计有什么显著的特性呢? 基于web页面设计的应用无非就是都是把网络服务器的数据用网页在客户浏览器中呈现出来,并允许用户再次对数据操作,用户的各种操作都必须经浏览器、web服务器、数据服务器再原路返回,每次的操作都可能启动各种计算设备上无数的程序来完成。这样基于web的应用与普通计算机程序就会有显著不同:基于web的应用已经没有普通计算机程序的相关功能,如进程、线程、堆栈、地址等。缺少普通计算机程序功能的web应用因此没有像计算机程序一样发展出各种管理程序的功能出来,简单地说,它本质上不能有操作系统的概念。可能有的人会有异议,说分布式操作系统、网格操作系统就是web的操作系统,分布式操作系统、网格操作系统本质上都是对计算机硬件资源的综合管理,它没有对web的应用这种更上层的应用没有提供有效的管理手段,如在分布式操作系统、网格操作系统建立web应用,那么也必须有浏览器、web服务器、数据服务器的处理步骤,与普通计算机一样。这些问题就给我们提出一个相当重要的历史任务,既如何建立web操作系统。

基本原理

由于web的弊端,基于web的应用没有本地计算机程序的相应概念,如进程、线程、堆栈、地址等,造成用户浏览器仅仅是呈现服务器数据及简单把用户数据发送工具,不能像本地程序一样,有数据空间、进程空间来包容各种用户数据。现在的脚本程序也可以在本地处理一些简单数据,但对于复杂数据处理起来非常繁琐,使用像ajax、xml等其他辅助技术来处理复杂数据。由于这些因素的存在,现在基于web应用对初学者来与学习本地编程语言不可比较。因此,本文尝试用一种结合本地技术与远程数据的技术,使得客户端程序处理远程数据时可像本地一样方便。为此,提出如下的基本解决方案。 1、 进程空间定义 Www协议的定义只是为了呈现用户文档数据,完全没有程序的概念,在web上建立应用时,就必须建立各种虚拟的数据空间,如cooke技术。任何人访问统一网站时,浏览器就会偷偷建立cooke文件,以便识别用户的访问,这是一种非常不和谐的技术。如果像本地程序一样,当用户打开应用程序时,操作系统便建立了一个程序运行的内存空间—进程,除非程序设计需要原因以外,进程不会在本地上再建立多余的文件,程序的运行只是对内存数据的处理,而web应用因为没有进程空间概念,浏览器也仅仅只是呈现数据样式,没有办法再进一步处理。为了让web应用像本地程序一样,本文提出可以像本地进程一样,定义一个进程空间。为方便,这里简单用xml来表示web进程的定义: <进程 ID=“8888”程序名=“facebook”> < … > < … > 如上所示,当用户访问各种网站应用时,web服务器返回的只是该应用服务的进程数据给浏览器,用户浏览器再根据进程数据位用户在本地建立进程空间。 2、 函数空间定义只有进程空间定义,web应用是没有办法运行起来的。操作系统出了会建立进程空间,为了并行计算方便,他还会建立诸如线程、纤程、对象等概念的相对独立的空间,这些空间的相对简单,且都是平等的概念,每个线程空间都是分布的进程空间线性范围内,不会交叉在一起,因此,web应用模仿操作系统也定义相似的概念—函数空间。函数空间用来包含用户数据,把用户数据相对分割开来,并提供函数内安全保护。简单表示如下: <进程 ID=“8888”程序名=“facebook”> <好友> <乔布斯ID=“1”/> <….> <粉丝> <…> <…> 这种表示方法与XHTML非常相似,但是这是有本质区别的,本文是为了web应用而定义的,而XHTML是为文档服务的。上述的表示方法基本上与本地进程一样,只是对空间进行简单的线性分割,采取这样的模型主要是为web应用设计方便。

万维网操作系统—空间意义

计算机被发明出来时,仅仅只是用来处理数字计算的工具,计算是第一功能,数据管理处于次要位置,特别为计算方便,设计的指令大部分都是计算型指令。后来由于多任务,程序开发、操作系统设计需要才加入各种管理程序任务(指令片段)的指令,但对数据的管理还是不太重视。如为管理动态数据的程序堆栈空间,与管理程序函数调用的功能混在一起,造成很多不便,大量病毒、木马就是利用管理程序函数调用的栈空间把伪装指令地址的数据加载到栈空间上,程序函数返回又不得不利用栈空间取回返回地址。这种涉及机制只能是对数据空间、指令空间不太重视的后果,管理程序调用的重要数据为何不能另外涉及一个空间来容纳?为何要与函数动态数据混杂在一起?一切都是为程序指令运行而不顾数据的重要性采取的措施,这个错误设计产生的不良后果已经大大超出他带来的微小效益。堆栈空间的设计不止带来空间溢出这种弊端外,影响了程序设计。栈空间是为容纳函数运行时的动态数据设计的,只有函数运行时才存在,当函数不运行时,所有的栈空间数据就消失了,因此为保存一些有用的动态数据,就必须采用申请其他内存空间的做法。一般都是在程序堆空间上申请,那么这种做法就会造成各种函数申请的堆空间都是同一个空间,程序没有办法为函数分配不同的堆空间,函数没有能力保护其动态数据的能力,随时都可能被其他函数破坏,这对可重入而设计的函数是一个灾难。但人类不会因为一个蹩脚的设计而去重新设计的,只好用一个更蹩脚的设计来代替,为了应付多任务运行,不得不在函数调用的基础上发展出诸如像线程的机制。但是线程虽然可以暂时解决多任务运行时的一些弊端,如保护私有数据,但对于一些小的多任务来说,线程太庞大了,如对象。按道理各种对象应独立运行在自己的对象空间中,但是因为指令设计的原因,各种对象也只是一堆积聚在一起的函数和数据,本质上都没有真正分开。这种设计的后果就是,对象不能真正单独存在,它必须在程序在精巧设计下,一步一步运行才能起作用。如要同时对大量对象发送消息,也必须通过循环才能做到。

万维网操作系统—空间意义之二

既然传统的计算机空间存在问题,那么如何设计新的计算空间形式?这里有几个必须考虑的因素:运行效率,支持进程、线程、对象,存储结构等,基于这几个因素,采用简单的进程空间内的函数分段模式。以前的x86设计有任务段,这个任务段可以支持当任务切换时,自动保存任务的寄存器等数据,在一个任务内,他不能保存函数切换时的栈地址、堆地址,对函数调用的栈溢出也不能防范,而且在开发操作系统时段模式也没有得到很好的使用,如windows操作系统的程序进程各段都一样,没有分出各种内存空间段,这样用户程序事实上可以存储任何数据包括指令部分。因为这种不明确的分段模式,造成程序员在编程时不认真规划数据结构,指令与数据混在在一起,内存经常违规存取、超界、溢出。如果当初设计函数调用功能时,设计出可以让函数自身方便管理的函数段模式就不会出现这种弊端了。另外由于计算机内存事实上是一种线性结构,他的内存单元是按照地址存取的,相邻内存单元的地址相差一个固定值,这种内存结构可以方便存取,但必须为各种数据精心安排内存单元数量,并让指令按内存单元地址存取数值。这样的设计对于机器运行效率很高,但对于编程人员来说是一种负担,必须时刻保证数据内容地址的正确性,否则计算出来的数据可能是错误的。为了方便程序员编程方便,web应用程序的函数空间数据不用地址存取,直接用数据的标号存取,这样程序员不用在费神去计算数据地址,也不用去动态安排数据空间。如乔布斯=“伟人” QQ=“山寨集成” … 乔布斯 与 QQ 两个数据在函数空间直接用数据标示就可以存取了,不存在数据地址,程序员也根本没有办法找到数据的地址。Java语言号称消灭指针,但语言中还再用 new 来分配数据空间,他只能是一个表面没有地址而内部有地址的语言设计,而javascript 语言在数据空间设计中比java更加超前,也直接用符号来存取数据,程序员再设计javascript脚本时,就完全不用考虑数据空间的问题(不过,现代的编译器非常厉害,在动态编译javascript脚本时,可能会用真实的地址去代替符号的访问方式)。总结上述,为web应用程序及操作系统设计的空间为开发效率、多任务运行的需要,简化了日常程序语言开发中的各种数据结构,采用分段式的函数空间组成进程空间可以满足web应用程序开发设计的需要,后面将论述web应用模型。

万维网操作系统–应用模型

普通应用程序虽软件需求不一样,但开发出来的程序却有千篇一律的模式可以遵循,基本上都遵循这样的规律:程序大部分分为数据处理段、数据段,其中数据处理段部分必定包含在程序当中,而数据部分可放在程序中,也可放在独立的文件中,当程序运行时,才由程序调入数据。由于数据与指令的这样存放位置不同的差别,造成今天各种各样的程序,最初程序数据处理与数据都放在一起,如一些简单的小游戏,后来,程序数据处理部分开始与数据分开,数据独立存放同一机器的单独文件里,如编辑器,这是单机时代,再后来,程序数据处理部分开始与数据不但分开,而且数据独立存放在不同机器里,这是网络时代,再后来,程序数据处理部分开始与数据不但分开,而且数据独立存放在很多不同机器里,这是云计算时代。程序数据处理部分与数据部分分开这是由于数据处理部分一般较小、经常要修改,又与机器的指令相关,不同指令类型的机器,必须有不同的数据处理部分,而数据对处理算法来说,不会因机器指令不同而不同,数据是他们共同的部分。在Web时代应用程序本质也没有发生改变,都是数据处理与数据分开的模型,但web应用程序与前面介绍的程序又有不同。在web应用程序里,数据处理部分已经被统一化,即浏览器、web服务器作为web应用程序共同的数据处理部分。浏览器负责处理数据的呈现,web服务负责提供、存储、处理数据,而程序员只要编写一些文本数据就可以了,当然一些高级web程序,还是必须编写脚本程序。应用程序从以前按照机器指令运行进化到按照数据运行,其中浏览器起着非常重要的作用,浏览器相当于web时代的程序机器,是一个非常大的进步。但这个进步随着技术的发展,目前出现的应用让浏览器编程越来越困难,如html、xml、css、script、sql、cloud等,这些都是要一大堆高级的技术来支持,非常不利于程序员的编程学习,要解决这个问题必须用比浏览器更为上层的技术来代替,所以本文尝试提出一个新的web应用程序模型。操作系统的主要功能是管理计算机运行的任务、内存、IO等,广义的web操作系统也相应定义了任务、内存。用户打开一个页面时,不再是简单的返回html页面,而是虚拟为这个应用分配应用进程空间、进程号、函数空间。因为Web应用永远在线的特点,广义操作系统分配的进程空间、进程号、函数空间都是永远存在的,不会因为用户下线了,相应的进程空间、进程号、函数空间被消除了。这样用户的进程就要被赋予特别的意义,如打开facebook时,广义操作系统为我打开一个已经存在的进程(也可以重新创建),但重新创建一个用户函数空间,每个用户端产生的其他数据也都是用函数空间来表示。当广义操作系统用这种方式管理数据时,其数据保存就不需要特定的存储设备,如数据库服务器、云存储等,我们可以自定义函数空间的存储方式,只要方便用户就可以。比如,sns应用中的粉丝应用,函数空间简单定义如下: <粉丝关系函数空间 ID=456346> <用户=“道指令创始人”/> <粉丝=“爱因斯坦”/> <粉丝关系函数空间ID=3215> <用户=“道指令创始人”/> <粉丝=“牛顿”/> <粉丝关系函数空间ID=5322> <用户=“道指令创始人”/> <粉丝=“猿人”/> 当各种不同用途的函数空间被定义及创建后,整个进程空间就会会有大量的函数空间数据片段,广义操作系统的任务就是负责对这些空间数据的创建、保存、处理、销毁。实现这种空间定义非常简单,如用数据库实现时,最简单的方式,只要一个数据库表格就可以,程序员只要利用这个表格就可以开发出各种各样的web应用(这个本人已经开发出了模型),把这个简单的表格转化为其他的存储方式也很简单。广义操作系统的应用模型经过简化后就与最原始的程序一样,所有数据都在机器中运行,终于程序发展从单机、网络、web又回到单机时代。《未完待续》

(8个打分, 平均:1.63 / 5)

雁过留声

“万维网操作系统初论”有31个回复

  1. kevint 于 2012-03-19 12:55 下午

    从头到尾只看见拿xml在扯淡。不知所云

  2. popy 于 2012-03-19 6:02 下午

    很害怕这种文章,宏观得空洞且无一物;清华园中有句“行深于言”;连想法都未曾有过任何实现或者实践,就开始了大论长篇;简单问一句,可行吗?怎么实践?怎么操作?

    我不反对先有好的想法,天马行空也是可以;但这世界,有想法的人其实不是太少,有时是太多;而有想法且能实行的人,才是真正的少之又少。

    建议作者去研究院或者国内的某些智囊团:)

  3. guocslock 于 2012-03-19 6:12 下午

    “起源”部分压根没有说清楚“建立web操作系统”这一“历史任务”的必要性,有什么历史的必要性和现实的需求要“建立web操作系统”呢?

  4. QGJ 于 2012-03-19 6:16 下午

    科学不是拍脑门拍出来的

  5. jkdo 于 2012-03-19 7:00 下午

    JSON RPC、DWR……已经在往这个方向走了,现在的浏览器也不仅仅是数据呈现,很大程度上也算得上是个run time environment了。个人觉得,现行的渐进的思路会更有生命力。楼主的标题太唬人。
    不过,还是顶楼主,这种思考总归是有价值的。

  6. beans 于 2012-03-19 8:16 下午

    那个什么matrix操作系统已经够让人跌眼镜的了。这个黄道长的两篇大作和matrix感觉风格差不多阿。
    我觉得2楼的Popy说的非常对。这牛都可以吹得山响,但是最后啥都没有,根本做不到,这就不是科学了。
    要不首席弄个科幻专版得了,把什么matrix系统,道指令这些文章都搞过去,也省得大家认真了。

  7. rr 于 2012-03-19 8:19 下午

    作者还是懂点格式的,但仅限于此。。。

  8. rr 于 2012-03-19 8:19 下午

    晕《html》被屏蔽?

  9. cracked 于 2012-03-19 8:34 下午

    道长的孤独不被人理解。。。。。。。。。。

  10. m0 于 2012-03-19 8:44 下午

    虽然有点民科,码字这么多也不容易。

    其实道长应投稿RFC,影响就大多了。

  11. 潜龙 于 2012-03-19 9:12 下午

    这玩意写RFC只能愚人节发表,前提要文字要写得足够幽默,否则IETF那些搞技术的人看不懂。

  12. 无语 于 2012-03-19 9:13 下午

    可实现行呢?有设想有数学才是有意义的讨论,否则到头来你的思考都是浮云

  13. tektalk 于 2012-03-19 11:50 下午

    我还是很支持道长的,有想法没什么不好,也不能社会上每个人都只搞工程,不搞基础理论啊,要不有了蒸汽动力,就没人研究电了

  14. t0p10 于 2012-03-19 11:50 下午

    这种文章以后不要发了

  15. matrixos 于 2012-03-20 1:04 上午

    看到还有网友对我的文章进行评论,特来做一下澄清:

    我本人不常来网上看文章,以前matrix发言并不是matrix操作系统作者本人,是我的一个徒弟,我的弯曲账号都是他帮我注册的,希望各位网友跟matrix的一些纠纷,不要再继续下去,在这里作者本人 matrixos 向那些被骂的网友致歉。

    同时感谢你们对我的文章的关注和评论,谢谢大家!

  16. huanghuihuang 于 2012-03-20 2:02 上午

    【楼上matrixos的评论应该发错了地方了】
    作为一个程序员如果对所用的操作系统、编程语言、指令、cpu结构的任何优缺点没有有所了解,并试图不去用自己的方式去解决弊端,那么这个程序员就不是合格的程序员,他与一个为生活而工作民工已经没有区别了。
    十年前,我因为感于万维网难于编程,就用自己的方式开发了《通用的信息处理系统》,随着对信息处理的了解加深,逐渐发展出《道cpu、道指令》及《万维网操作系统》。有的人以为这是空想是不对的,本人也对毫无边际的空想深恶痛绝,绝不会把没有实现可能的烂文发到这里来。所以如果有人不相信,等我再稍微对《通用的信息处理系统》改进一下就可以看到实物了。
    如果还有人对我已经做出来的《道cpu、道指令》语言及模拟器有怀疑,认为是科幻的话,那我也无话可说,只能说世界上不可理喻的人太多了。

  17. beans 于 2012-03-20 3:01 上午

    晕倒,就matrix还有徒弟….,那道长这水平的,还不得有十万教众阿。

  18. lenky 于 2012-03-20 4:52 上午

    第一段首先提出问题或阐明现存的不足:当前还“没有对web的应用这种更上层的应用【没有,应该是打多了吧?】提供有效的管理手段”。—》言下之意就是本文就是尝试建立一个万维网操作系统。

    第二段先提出“基于web的应用没有本地计算机程序的相应概念,如进程、线程、堆栈、地址等”,所以先为web应用定义这些概念:
    1,进程空间:简单用xml来表示web进程的定义: ,这个由服务器传回,然后本地浏览器根据这个进程定义创建进程。
    2,函数空间:函数空间用来包含用户数据,把用户数据相对分割开来,并提供函数内安全保护, 。

    第三段:描述传统操作系统在数据管理方面的缺点:比如数据空间和指令空间重叠、保存动态数据需要动态申请空间导致各种函数申请的堆空间重叠等等。(貌似主要缺点是空间重叠问题导致“对象不能真正单独存在”)

    第四段:介绍万维网操作系统的数据管理,主要设计思想是“采用简单的进程空间内的函数分段模式。”,另外介绍其可“直接用数据的标号存取”的特点。

    第五段:介绍万维网操作系统的运行示例:“用户打开一个页面时,不再是简单的返回html页面,而是虚拟为这个应用分配应用进程空间、进程号、函数空间。因为Web应用永远在线的特点,广义操作系统分配的进程空间、进程号、函数空间都是永远存在的,不会因为用户下线了,相应的进程空间、进程号、函数空间被消除了。这样用户的进程就要被赋予特别的意义,如打开facebook时,广义操作系统为我打开一个已经存在的进程(也可以重新创建),但重新创建一个用户函数空间,每个用户端产生的其他数据也都是用函数空间来表示。”

  19. lenky 于 2012-03-20 4:56 上午

    仔细看了一把,LZ要解决的主要是数据的管理问题,但是最后的结果不仍然是“客户浏览器中呈现出来,并允许用户再次对数据操作,用户的各种操作都必须经浏览器、web服务器、数据服务器再原路返回,每次的操作都可能启动各种计算设备上无数的程序来完成。”没看到如何避免这个?如果数据还在用户端,那这个数据的上传下达过程没法避免吧?

  20. fw 于 2012-03-20 6:33 上午

    看过REST吗?就知道扯啥WWW操作系统。WWW设计中有哪点直接应用传统OS的设计概念的哦。独立思考不等于漫无边际的胡乱思考。

  21. lenky 于 2012-03-20 7:45 上午

    个人还是支持道长的,粗看似无稽之谈,实着也许还真是那么回事,也许道长思想超前500年呢?我等岂不有福?O(∩_∩)O哈哈~

  22. huanghuihuang 于 2012-03-20 8:52 上午

    感谢lenky支持!
    提出web系统空间概念只是操作系统的第一步,后面还有web程序定义、用户界面定义、函数数据操作等。数据空间是www操作系统的中心结构,与普通的web页面相差太大,没有web开发经验的人是难于理解的。
    想想为什么xhtml定义了xml数据却不能得到广泛应用,web服务只设计了页面服务功能极大限制web地开发使用。更好的方法就是在web中只保留浏览器与广义的web服务,剩下的如数据库、网页、文件、平台等都取消,这时的web服务应该是一个大数据空间管理程序。

  23. foo 于 2012-03-20 4:29 下午

    比较扯淡, 已阅!

  24. popy 于 2012-03-20 7:04 下午

    何谓“也许”? 能等到500年后的WEB OS, 看来非张胡子拍出的猴子才可了,难咯。

    有想法,要的是能够精进该想法;要得是可以逐步实行;要的是能被验证(至上而下的思考方式或许黄道长这种敢于推倒一切重来的估计也看不上眼);不要总是停留在想法;难不成黄道长的是WEB OS公理啊:),没法证明,但就是对的:)

    顺便罗唆一句,道教在中国的历史上可以说不曾斗过外来的佛教;建议黄道长改名黄散人,或许可以做个500年的WEB OS,颠覆一把,正好计算机技术的理论基础不曾完善得很好,套用“lenky”的“也许”说不定,可能的开宗创派

    平心而论,我觉得很多的人不是不聪明,而是过了头,缺少能把事情做出来,做到无懈可击的态度;因此,我非常害怕上来就是一通天南地北的言论;而发布言论者的结论是我现在不会,以后也不会相信的所谓“这个技术xxx会解决现在所有碰到的问题”

  25. dew 于 2012-03-20 7:56 下午

    不,只能空想却啥也做不出来的,并不是”聪明过了头”,而只不过是看起来聪明的傻x。
    被这种人忽悠住的,是看起来就傻的傻x。

  26. 理客 于 2012-03-21 1:54 上午

    dew一醍醐警醒糊涂人

  27. Eety 于 2012-03-21 2:18 上午

    http://www.tektalk.org/2009/07/21/%e9%81%93cpu%e3%80%81%e9%81%93%e6%8c%87%e4%bb%a4%e3%80%81%e9%81%93%e7%bc%96%e7%a8%8b%e5%9f%ba%e6%9c%ac%e5%8e%9f%e7%90%86/
    不评论,各位自有眼光。
    希望诸位眼睛盯着后续某个什么狗屁部/国家的科技奖。这种东西,搞笑可以,千万别TMD让把纳税人的银子坑拐了。

  28. 人云亦云 于 2012-03-22 12:57 上午

    很扯淡!但类似扯淡的事情每天在身边发生。

  29. 淮西码农 于 2012-03-23 7:02 上午

    其实我没有看明白文章想说点什么,更不知道作者想说点什么。

  30. dddd 于 2012-03-23 8:23 下午

    作者就是想吹吹牛b而已,并没有想说什么,你以为他自己不知道这是在扯淡?

  31. ccTang 于 2012-03-24 9:48 下午

    没有具体的内容,大部分都是在叙述基于web的各种不好,没有看出你的方案哪里好。万维网操作系统可以说的再具体一点,清楚一点,必要时可以图文并茂。还有这个方案与当前比较热的基于内容为中心的网络有点儿相似,都是直接面向数据的。作者可以结合起来研究研究,CCN有具体的内容,不像万维网操作系统这么空洞。