[理论]
1. 每个 VLM 实例都需要先定义一个站点 (site), 然后运行在这个 site 上. Lisp Machine 原本是支持分布式计算的, 多个 site 之间可以互相跨 site 操作.
2. 一个 VLM site 在定义的同时也定义了与宿主机的文件系统映射关系, VLM 实际上并不管理文件系统, 它通过 NFS 访问宿主机的文件系统. 当然, 这和原始 Lisp Machine 上是不一样的. 文件系统映射带来的另外一个好处是, VLM 可以访问到几乎所有源代码了. opengenera2.tar.bz2 里含有 130 万行 Lisp 源代码, 采用 ANSI Common Lisp 或者 ZetaLisp 语法写成. 值得注意的是这并不是全部的源代码, 仅仅是分发给最终用户的可用来扩展系统的那部分源代码.
[实践]
1. 首次启动 Open Genera 环境时, 可以看到如下屏幕提示:
Symbolics Open Genera(TM) 2.0
This machine is Distribution DIS-LOCAL-HOST, a Symbolics Virtual Lisp Machine(TM),
running on Distribution DIS-EMB-HOST, a DEC Alpha workstation.
Symbolics Open Genera 2.0
Loaded from HOST:Genera-8-5.vlod
409.0M words virtual memory requested, 398.0M words still available.
Open Genera 2.0
Genera 8.5
Genera program 9.0
DEC OSF/1 V127
其中 DIS-LOCAL-HOST 是 VLM 的初始 site 名称, 这是软件分发时提供的初始 site, 最后要被改掉.
另外我们可以看到一些版本信息:
DEC OSF/1 大概是最初 VLM 所运行的操作系统信息 (DEC OSF/1 on Alpha)
Genera program 是作为操作系统接口的启动程序, 版本 9.0
Genera 是 Lisp Machine 系统映像, 版本 8.5
Open Genera 是 Genera 在 DEC Tru64 UNIX 上的移植, 版本 2.0
(OSF/1 和 Tru64 是 DEC 的两种不同的操作系统, 前者跟 Lisp Machine 的关系我不是很清楚...)
最后的屏幕提示是
Please login.
Command:
2. 下面新建一个 site, 可以取任何名字, 不区分大小写, 命名规则跟 Lisp Symbol 一致. 这里我用的是 "testing"
:Define Site (site name) testing
注意我首先输入的是 :define 然后我输入空格, :define 就自动变成 :Define 了, 然后我输入 site 再按空格就得到了 :Define Site (site name), 这时我再输入 testing 然后回车, 可以看到下列信息:
Defining site TESTING with the local host as the Primary Namespace Server
Namespace Server Name: /the name of the primary namespace server/
Lisp Machine 的 UI 设计很有意思, 它提示你没有设置 Namespace Server, 设置的方法是用鼠标点一个那些斜体小字 /the name of the primary namespace server/, 然后就可以得到一个输入焦点了.
由于 Linux 移植本身的限制, 这个地方必须填 wide-vlm, 是符号名, 不区分大小写. Linux 移植版本认为 VLM 所在的主机名是 wide-vlm, 而宿主机的主机名是 wide.
输入了所需的 Namespace Server Name (wide-vlm) 以后回车, 就会出现更多的信息:
System File Directory: HOST:/var/lib/symbolics/sys.sct/site/
Namespace Descriptor File: HOST:/var/lib/symbolics/sys.sct/site/testing-namespace.text
Unix Host Name: /the name of the DEC AXP host on which Open Genera is running
Default Login: Lisp-Machine
Host for Bug Reports: wide-vlm
Local Timezone: EDT
Standalone Site: [Yes] No
和前面一样, 需要用鼠标点击每个需要修改的属性, 填写正确的信息. 如果需要在原值的基础上修改, 一个方法是把鼠标移到需要修改的条目上, 等到该条目周围出现了边框, 按鼠标右键就能得到一个弹出式菜单:
+----------------------------------------------+
|Operation on #
|----------------------------------------------+
|Edit this field |
|Remove this field |
|Replace this field |
|/Presentation debugging menu/ |
|/System menu/ |
|/Window operation menu/ |
+----------------------------------------------+
左键选择第一项 "Edit this field" 就可以直接编辑当前内容了. 注意, 编辑环境的键绑定是类 Emacs 的.
假设我在宿主机上把 og2 目录解压在 /home/binghe/og2, 我宿主机的真实主机名 ddb-3.lab.163.org, IP 地址为
172.16.3.3 (IP 地址信息可以自动检测到, 如果正确配置了 NIS), 默认登录用户为 binghe, 那么最后的屏幕上应该是这个样子:
:Define Site (site name) testing
Defining site TESTING with the local host as the Primary Namespace Server
Namespace Server Name: wide-vlm
System File Directory: WIDE:/home/binghe/og2/sys.sct/site/
Namespace Descriptor File: WIDE:/home/binghe/og2/sys.sct/site/testing-namespace.text
Unix Host Name: ddb-3.lab.163.org
System Type for WIDE: UNIX42
Address for WIDE: INTERNET 172.16.3.3
File Protocol for accessing WIDE: NFS
Default Login: binghe
Host for Bug Reports: wide-vlm
Local Timezone: EDT
Standalone Site: [Yes] No
当这些输入都完成以后, 按键盘 END 或者鼠标点击一下屏幕上的
The local host is now WIDE-VLM
[09:50:12 Namespace on DIS-LOCAL-HOST: Reloading namespace TESTING.
Recent servers contacted are DIS-LOCAL-HOST]
[09:50:13 Namespace TESTING has become unloaded:
No longer server for this namespace.]
3. 然后重启一下网络:
Command: :Reset Network
[09:50:23 Namespace on WIDE-VLM: Reloading namespace TESTING.
Recent servers contacted are WIDE-VLM]
[09:50:23 The local host WIDE-VLM did not have address 10.0.0.2 on network INTERNET with name eth0 but it was specified in the FEP. The namespace needs to be fixed.]
4. 接下来要做的是映射文件系统, 以便日后能方便地访问源代码和文档:
Command: (si:login-to-sys-host)
NIL
Command: (fs:set-logical-pathname-host "SYS" :translations '(("**;*.*" "WIDE:/home/binghe/og2/sys.sct/**/*.*")))
#
5. 然手利用源码重建调试信息数据库:
Command: (si:enable-who-calls :all-remake)
Scanning all compiled functions...
Scanning all symbols...
Loading macro callers from SYS:PATCH;SYSTEM-452;MACRO-CALLS.VBIN.8.
Who calls database made.
New definitions will be added automatically.
:ALL
6. 安装结束之前的最后一步是把所有成果保存到一个新的文件里 (binghe.vlod)
Command: :Save World (on file [default WIDE:Genera-8-5.vlod]) WIDE:/home/binghe/snap4/binghe.vlod
Estimated size is 54092 blocks.
Symbolics System, /home/binghe/snap4/binghe.vlod
Virtual Lisp Machine Processor, 409.0M words virtual memory requested, 396.0M words still available.
Open Genera 2.0
Genera 8.5
Genera program 9.0
DEC OSF/1 V127
Testing WIDE-VLM
Are you satisfied with this herald? (Y or N) Yes.
The title for this world on the disk label is
"Open Genera 2.0, Genera 8.5".
OK? (Y or N)
然后我只要按一下 Y, 就开始 dump 整个 world 了. 窗口一度消失, 然后再恢复.
7. 接下来测试 New World 的可用性. 首先要把当前环境退出, 我还不知道怎么用命令退出, 所以直接在宿主机上面 Ctrl+C 把 genera 程序中断了...
然后修改 .VLM 文件, 把
genera.world: Genera-8-5.vlod
改为
genera.world: binghe.vlod
然后用 sudo ./genera 重新启动.
8. 新的图形窗口如果顺利产生了, 那么可能将会是这个样子:
Symbolics Open Genera(TM) 2.0
This machine is Testing WIDE-VLM, a Symbolics Virtual Lisp Machine(TM),
running on Testing WIDE, a DEC Alpha workstation.
Symbolics Open Genera 2.0
Loaded from HOST:Genera-8-5.vlod
409.0M words virtual memory requested, 398.0M words still available.
Open Genera 2.0
Genera 8.5
Genera program 9.0
DEC OSF/1 V127
注意到宿主机和虚拟机的名字都发生变化了. 接下来最重要的操作是看文档, 有两种方法: 一是用快捷键, 先按 F1, 再按字母 d. 或者通过右键的系统菜单选择 Document Examiner.
文档窗口里分为三部分, 左边是文档浏览窗口, 右上是文档入口, 右下是书签. 选择一个文档入口, 然后在左边窗口里就可以浏览该文档了. 翻页的快捷键是
文档里可以学到关于 Lisp Machine 的几乎所有知识, 所以从这里开始就不需要我再多做说明了.
9. 我还不太清楚用户登录的具体作用, 不过我知道如何登录:
Command: :Login (user name) binghe (keywords) :Host (the name of a host) WIDE
Password for logging in to WIDE as binghe (or Escape to change user id): ********
No init file: Unable to find any of the files ......
Command:
登录时所需的密码是该用户在宿主机上的系统密码, VLM 通过 NIS 来做认证的. 然后可以看到状态栏里当前登录用户是 binghe 了.
没有评论:
发表评论