2005-10-24

虚拟的虚拟机一个仿生电脑的雏议 - China Linux Forum

ykz (stranger) 05-10-09 21:10
虚拟的虚拟机
一个仿生电脑的雏议


不用你的幻想, 去创造生命, 而仅仅用来对付生活上的烦恼, 这是一种浪费.
--- 罗曼罗兰 ---

毕业时, 同学各奔前程, 记念册上的字句, 无时不在耳边徊响.


生命开始于自动机, 感受了外界的讯息, 作出了反应, 维持了一个亚稳状态, 延长了生命的过程.

两只眼睛的线虫, 和欧基里德几和学, 有什么联系, 与物理的多维弦学一样, 尚待探讨. 小学时, 追问乘数表, 园周率的来源, 中学时, 总弄不明白, 为什么要有几何公理, 直线从何而来?

无论如何, 几何学是成熟的科学, 同样成熟的易经可能被人忘记, 但易经的内涵, 将深深在中华文化上, 盖上了烙印.


“别动我的园”!! --- 真的, 罗马武士没有动他的园, 欧洲文明, 沉睡了两千年.

直到牛顿, 莱布尼滋. 数学分析精确地定义了函数, 极限, 微积分. 本来是动力学的研究, 移植到电磁上, 于是有了麦克斯韦尔, 赫兹的电磁方程. 马可尼, 波波夫, 实现了硬件, 无线电, 使玉皇大帝的顺风耳, 从虚拟, 变成了现实.

电子管的发明, 却是先于控制论和信息论, 理论和实际, 软件和硬件的先后, 作了一次翻转.

晶体管, 应该是立足在相对论和固体物理之上, 结合了照相的光刻, 化学的结晶, 外延, 半个世纪, 硬件都在领先软件.

因为, 我们的软件, 大部份都困在冯.纽曼的框框里, 互联网跳出了框框, 得到的成功, 有目共睹. 如果再跳出网外, 效果又如何?

在另一个领域, 遗传学的研究, 也在前进, 从发表, 到被遗忘, 又在发展, 在半个世界被视为异端, 道路也算坎坷, 今日能发扬光大, 医学, 农业, 很快就论到工业, 会把它作为一个理论的基础. 理论又领先了实践.

在医学, 五十年前, 医生只需学好中学的数理化, 就能走遍天下, 听筒, 配上显微镜, 血压计, 人体状态的资讯, 多用化学方法, 和医疗经验取得. 今日, X-光发明后, 透视, 电子显微镜, 超声, 核磁共振, 基因晶片, 造就了今日的医疗基础. 人,能不能活到120岁, 要比较身体老化的速度, 和技术进展的速度, 我看, 有希望呢.

近代神经生物学的研究, 确认了脑虽然是最大的信息处理器官, 但很多讯号, 都在周围系统上, 作了初步处理. 如视觉, 杆状,镰状,细胞处理的, 亮度和色度讯号, 在传到大脑前, 已作了很多变换, 视觉, 不只是一组固定的数据, 而是讯号在眼, 额叶, 中脑... 等的徊环, 由此而发现了视觉, 思维, 梦等的关联关系.

软件中的固定的程序, 和运作中的进程, 会不会有类似的关系呢?

有人在比较人脑和电脑, 一米长的染色体, 展开后, 好像也是有 300G 核酸. 与人脑细胞, 今日电脑磁盘, 同一个数量级.

线虫却简单多了, 除了神经线的数量.

神经细胞状态可能只有壹和零, 而突触却有七八个.

要学习或仿造我们的老祖宗, 传感器, 换能器, 逻辑器, 记忆器, 冯纽曼器, 我们都很强, 要改进的是, 沟通能力, 很多元件, 功能瓶颈都在带宽. 还有要改进的,就是软件架构.

系统分析, 场景描述, 类和对像的抽象, 数据功能的隐藏,屏蔽和分离, 多态, 应用软件, 已渐渐拉近和人脑思维的距离,

系统软件, 处于系统的最底层, 加上六十年代后, 版权法其实并不完善, PC 一家独大, 稳坐汉诺夫塔的底层, 谁有这样的魄力和能力, 把它搬开? 其他的人, 像在建造巴比伦塔, 说起不同的语言. Linux, BSD, 都建在冯纽曼的基础上, 能望出窗口外, 平起平坐, 已是万幸.

就像塞翁失马, 雷峰塔倒了, 在工业革命之后, 西方文化带来的, 鸦片战争, 八国联军, 甲午风云中, 五千年的巨龙, 倒了下来, 睡在一片黍蓠麦秀之中.

可幸的是, 除了血和泪, KMP, 西方还带来现代科技. 睡醒的龙, 迭代蟠攀. 出口单货物, 由土特产, 来料加工, 纺织品, 鞋, 玩具, 小电器, 一路增升.

晶片, 芯片, 今日虽然仍然是婴儿, 但是, 趁着呀呀学语的时候, 除了数学的1234, 英语的abcd 外, 我们可以在破碎的雷峰塔中, 找回东方的,人之初, 性本善, 搭建一个, 有中国特色的, 更大,更结实, 有更深基础的平台, 更新的雷峰塔.

如果成功, 汉洛夫塔, 金字塔, 也可以容纳, 只要有足够沟通, 全人类合作, 通到天上的巴比伦塔也不难建成.
说这大堆多余的话, 目的是想说明, 虚拟的虚拟机想建在什么平台, 或者周围环境之上.

我想象中, 新一代的智能机器, 应该模拟生物, 经过悠悠的年代进化的生物. 这里我替他起个名字, 叫做小虫. 简称虫, 是龙的传人, 也是龙的祖宗.

生物通过感觉器官, 接受外界环境信息, 通过运动, 改变周围环境. 这可以看作参与者, 与智能系统交互. UML 语言, 对系统和参与者, 有详细的描述.

虫通过物理接口, 与看作参与者的周边装置互动. 虫的接口, 主要是会分辩零和壹的讯号, 五态的1000M 接口, 和连续的模拟接口, 暂时都须要通过变换, 换成零和壹的数码. 生物的四种氨基酸, 编码更复杂, 今日的技术, 未能接上.

物理接口可以有由 1,2,4,8,16,32,64,... 等组合起来.

按钮是典型的1线输入装置, 指示灯是典型的1线输出.串口, RS232, 422, Ethernet, USB, 等都是2线数据讯号的接口, 加上一点辅助讯号而已. DMA和某些线路控制, 会用到4线, ASCII 数据的8线, 地址的16,32,64,.... 总线接口,会是这些单元的组合. 用作内部通信.

智能生物都有神经线, 早期的S100个人电脑, 也有总线, 小虫也有. 虫的神经线, 可以是总线, 连成树, 或网状. 虫内的物件, 对象, (Object), 可以看成虫的细胞, 总线连结, 沟通虫内各个细胞, 使之行动一致, 成为一条虫, 而不是一堆菌. 看开一点, 一堆虫, 如果有足够的沟通, 便可以化成腾云驾雾的巨龙.

总线也是虫内的物件, 通常由一个装置得到控制权, 令牌, 向其他细胞发放讯息. 总线的扩展扇面(Fan Out) 越大, 频宽越高, 效益越好. 不过, 总线不是唯一的, 虫内会有很多消息传送机制. 中断是另一个极端.

中断, 与总线相反, 最好是一对一, 带宽要求不高, 注重的却是反应速度. 总线与中断, 对应于运作中软件进程的黑白双环, 这里提一提, 以后再详述.

与,或,逻辑门, 求和器, 单稳, 双稳, 寄存器, 位移寄存器, 数模转换, 记忆体, 处理器, .... 一直到系统集成的 SoC, 都可以是虫的对象物件或组件. 当然, 少不了的还有时钟.

特别要提到的是, 由数据, 地址, 程序, 指令, 运算, 等寄存器聚合的处理器, 加上编好线性地址的内存, 组成的冯纽曼机器, 也是虫的细胞, 干细胞. 封装前的机器, 以记忆体表示状态, 以处理器指令为反应行为, 指令集是最小基本集合, 程序由指令堆砌而成, 把数据空间, 这里是指线性地址确定的记忆状态, 从输入集合, 变换成另一个集合, 放到输出集合中去.

通过汇编语言(ASM), 和 C , 我们可以用较接近人类语言, 把想要做的变换, 编成机器看得懂的文本, 经编译器, 转回0和1的处理器指令. 不过, 无论是机器和人, 看到和要管理的, 都是记忆体的线性空间.

宏, 复杂指令, 库, 等把经常用到的组合指令, 规范化起来, 简化了常用的工作, 但仍未脱离记忆体的线性空间.

很多操作系统, 如 Unix, Linux, WinX, 等, 通过多线程, 把一台冯纽曼机器, 分割成多台小冯机器, 以应付现实中多对象的复杂结构. 编译器通过基本类, 把数据影射到线性内存, 再堆砌成实用数据. 但仍是离不了线性地址, 每次引用基本类, 都会检查类别, 编译器承担了大量工作.

解释器, 过滤器, 服务器, 数据库, 等从另一个角度, 直接对命令器反应, 向他发消息时, 会有反应行为. 事实上, 这些都是收到输入(命令和参数), 返回输出的函数机器. 同时或多 (如数据库), 或少 (如过滤器) 带点记忆体. 加上封装, 不一定可以看到机器的内部, 只知他们有唯一的标称, 有外面看到的状态, 和行为.

虫把冯纽曼器, 解释器, 过滤器, 变换器, 服务器, 数据库, 及下文说到的 M机器, 等等. 也看作系统内的对象或组件. 通过虚拟, 用户看到的虫, 可以是冯纽曼机器, WinX, Unix, Linux, 也可以是 M机器, Java机器, .Net机器等。

我建议虫多一点应用 M机器的语言解释器,它有二十多个指令, 二十多个函数, 和十多个算符, 它把多元字串空间变换到另一个字串空间. 后面有一段 M 语言的简介.

我的设想是, 用机器语言写一个 M解析器, 把冯纽曼机包装起来, 其他对象, 会作为M机器的一个进程, 读写M机器的全局变量, 与M机器和其他进入M机器的进程通讯.

M 可以像C, C++, 堆彻成子程序库, 对象, 服务器等. 好处是语言简单, 又不必编译, 同时, 因为带有建在内部的层叠式数据库, 在高端应用程序, 特别是处理多重继承的对象, 和XML等的迭代数据, 速度很快, 效率很高. 这方面笔者有一点实际经验.

我相信, 在底层系统软件, 用M编写资源管理, 对象间通讯, 的程序也会有其优越的一面, 能否与C 争长短, 则要做出来再比较了.

在堆彻子程序库, 对象, 和变量令名时, 我希望多用中文, 因为每个字节256个符号, 英文字母只用26个, 大小写又容易混肴. 中文用了94个, 每两个字节, 更连上汉字, 无论GB或BIG5, 字字有意思, 双字词, 三字经, 四字成文, 五言诗, 讯息量比英文多很多. 学系统分析知到, 对象名称越接近实体, 越容易理解. 解析语言读名字要花CPU时间, 短小精悍的名称会提高效率. 为了方便外国人, 可以加一个别名.


虫的软件

硬件是不会动的, 加电或放开复位按钮后, 就像普罗米修斯盗到天火, 启动程序才被激活, 处理器开始自检, 然后, 以迭代地, 把操作系统的组件一件一件地搬到内存, 并把控制交到内核. 虫的启动, 会分别有胚胎生长, 冻蛙复稣, 和睡眠唤醒的形式.

虫的内核, 由黑白双环构成, 最好能有两个以上的处理器. 黑环有规律地操作, 管理系统内部资源, 实时地管理硬件和软件的状态, 记忆体, 处理器, 公共通讯线, 信令, 网络开关, 内部网管, 进程, 邮局, 邮差, 邮件, 等的配套. 白环对外, 接受用户的要求, 作出反应. 统过输入, 输出, 外围网络, 可以扮演各种操作系统的命令处理器, 服务器, 公共数据库, 等等.

黑白双环, 有点像实时Linux, 实时部分把Linux看成一个工作, Linux 又把实时部分, 看成一个进程.

黑环和白环, 都可以按工作的性质, 再分成组件和个别对象.

回顾现时多数的操作系统, 上面都同时运行著多个进程, 若果我们对每一个进程, 都分配一个处理器, 不必频密地交换上下文, 效率可不是更高? 特别是, 我们的CPU主频, 是以对数式的硬件资源和功耗堆成的, 分散开来, 会不会有更高的纵合计算能力?

理想的虫, 操作系统, 对每一个对象, 都分配一个处理器, 甚至更多, 为了提高可靠性, 我们可以有雍余的记忆体, 雍余的通讯线, 为甚么不可以有雍余的处理器? 雍余的处理器, 可以提高对突发事件的反应能力, 何乐而不为.

处理器数量多了, 现实又不可以让每一进程, 分配唯一的处理器, 我们便需要应用, 处理器控制机制, 就像内存控制, 进程控制一样. 最简单的控制, 是固定的表, 对每个处理器编个号就成. 复杂一点, 可以指定某处理器, 只能为某一组进程服务. 更复杂的可以用某些算法, 动态地计算出服务进程的队列.

另一个需要控制的是公共通讯线, 虫实质上是一个网络, 组件间, 有些会有固定的讯号线, 有些则利用公共的通讯线. 线路可以像接口一样, 用1,2,4,8,16,... 等组合器来, 分配读, 写权限, 动态地编成数据线, 地址线, 控制线, 总线, 信令线, 等等. 当然, 简单地, 列出一个静态权限表也可.

当黑环在分配系统内部资源的同时, 白环则通过轮询, 或中断, 检测周边装置送来的信息, 对外界做出反应. 一个新的消息, 通常会启动一个工作, 带起一系列的进程和线程, 同步或异步地返回结果, 记录在记忆体上, 或送到周边装置, 对外界起反应.




这里我总结一下:

1. 我想建立一个模拟生物的智能机器, 称为小虫.
2. 小虫会跳出冯纽曼的框框, 以多处理器组成网络服务器为模型.
3. 虫会强化内部通信机制, 动态地控制公共通讯线.
4. 除了内存控制和进程控制, 虫同样重视处理器控制和通信控制.
5. 大部分的应用程序, 会用简单的M语言, 和字符串数据类, 作为基本集合, 堆彻起来.
6. 建在 M语言内的层叠式数据库, 很容易处理多重继承的对象, 和XML等的迭代数据.
7. 虫的母语是中文, 受中华文化影响很深, 又读过一点西方的科学和历史, 响往兼容.

建立小虫的方案:

1. 把虫的概念描述出来, 让大家评点, 找出一个可行的方案.
2. 找寻龙芯或其它中国的处理器, 现成的硬件系统.
3. 测试虫的一些组件, 如编译器, 命令解析器, 内存-外存同步器等等.
4. 构建多于一个处理器的硬件, 在上面测试软件.特别是处理器控制软件.
5. 构建含大量处理器, 强大的通讯网络的机器, 测试通讯控制器.
6. 把模型推出市场.




希望两三年后, 联想的机壳上会贴上 Worm Inside,
有一天, 汽车, 飞机, 太空船上会贴上 Dragon Inside



我有一个梦,

.... 在悠扬的歌声里, 歌唱我们的祖国, 从今走向繁荣富强.





M 语言的简介:

M是一种非常简的语言,只有二十多个指令,和二十多个函数,十多个算符。

程序员要控制的都是字符串,常量用引号如“Abc”包括,变量则用字母开头的名称如Name=“Abc” 表示,或用多元函数如X(a,b,c)=“Abc” 代表。

字符串放在记忆体的B+树内, 长度不必固定,也不多占记忆空间。

数字则以字符串前的数字为准,有字母开始以后都不算。空字符或没以数字开头的都当零。

M 是多用户,多进程系统,变量分为本地和全局两种,全局变量前放一个 ^ 符号区分, 记在硬盘,任何进程都可读和写。本地变量通常记在RAM, 进程完毕便自动消失。网络化的 M, 网络变量可以用 Namespace.Name 表示.


进程用Job, Break, Halt, Quit 控制。

变量用Set, Kill, New, 指令来产生和清除。用Lock 来同步。

周边装置或文本数据出入,用read, write, open, close, use 几个命令控制。

其他的流程指令如Do, Goto, If, Else, For, 与Basic 非常相似。

产生进程工作的Job 和日誌指令Journal 则是其他简单系统没有的。

M 是合符IEEE 标准的语言,支持M 的运作系统很多,用标准 M 编写的程式,很容易在PC, Sun, Unix, Linux, 等机种上互换。

不同机种上的特别硬件,可以新创专用指令。 M 的专用指令以Z 字母开始的。

M虽简单,处理普通文字和数据已足够。对于图像,可以新创指令直接控制显卡。




文章选项:

tpu (addict) 05-10-10 10:43
Re: 虚拟的虚拟机一个仿生电脑的雏议 [re: ykz]


你的描述很精彩!但不管怎么样,你的虫还是等效为一个简单的自动机啊。仍然等效为冯诺伊曼架构。

--------------------
精益求精!


ykz (stranger) 05-10-11 00:23
虫内有很多动态的冯机器 [re: tpu]


虫内有很多动态的冯机器

我心目中的冯诺依曼机器, 是指有一个中央控制机构, 和有一组物理线性地址的内存的机器, 控制器通过总线地址, 指定内存, 把数据从寄存器和内存间搬来搬去.

在冯诺依曼机器上编程, 最终会编译成机器语言, 按前述方法搬动数据. 程序员通过地址, 指针, 变量表, 可以控制内存每一个字符. 包括程序内的字符.

虫有多个控制机构, 多组内存, 多组通信线路. 每一组件都相对独立. 当每一个控制器, 通过一组总线, 配上一组内存, 便组成一个临时的冯机器, 可以运行一个进程. 当进程受阻, 冯机器解散, 硬件资源重新组合, 运行另一个进程.

虫内有很多动态的冯机器, 而不是一个高速的中央控制器. 也可以说是一个网络而不是单机.

另一方面, 虫内的进程, 大部份都封装成对象, 通过消息传递, 与其他进程沟通, 外部对象, 包括编程员, 看到的只是一个虚拟机器, 或者说是服务器, 看不到, 也控制不了内存地址和数据.


文章选项:

tpu (addict) 05-10-12 01:20
Re: 虫内有很多动态的冯机器 [re: ykz]


这么说吧,使用现有的硬件技术,无论怎样排列组合,都超不出自动机的范畴。或许量子计算会是一个突破。


--------------------
精益求精!

No comments: