跳到主要内容

1. NIL 中引入的基本概念

1.1 NIL 的目标​

NIL 的两个主要目标是:

  1. 描述程序执行所处的环境(其补充部分);这涉及对以下内容的描述:

    • 数据格式与数据结构
    • 与输入输出设备的交换,以及对这些设备所期望的特性
    • 与操作系统的接口
  2. 表达交互式系统的前端部分:

    在交互式系统中,数据流通常随着数据接近系统内核而减少:假定在许多交互式系统中,存在或可以定义一个可分离的模块,它与用户交换大量数据,而与系统其余部分交换的数据则少得多。这个模块称为前端(Front-End)。重要的是,系统的响应时间应尽可能少地受到额外传输延迟的影响。此外,也希望网络上的数据速率尽可能低。

假定前端的迁移并不意味着要解决程序可移植性的全部问题。

1.2 NIL 的子类划分​

正如 S. Volansky [ ] 所指出的,按照语言的主要功能将其划分为若干子语言是方便的。因此,NIL 被细分为:

  • 控制子语言
  • 操作子语言
  • 数据声明子语言
  • 环境子语言

1.2.1 控制子语言​

控制子语言说明计算在何时(WHEN)进行:它描述控制流,即计算的先后次序。借助语言其他部分所包含的一些信息,它还说明计算应在何处(WHERE)执行。

由于计算机网络在多个系统之间引入了松散的连接,网络机器的控制语言在较完善的版本中应能够把计算分配给可用的处理器,同时考虑其中涉及的时间延迟和资源分配问题。目前我们无意考虑这一层次。

1.2.2 操作子语言​

操作子语言描述要对数据执行的操作,而不指明操作之间的先后次序;它回答的是操作如何(HOW)执行的问题。操作被细分为两组。

  • 计算组
  • 数据操纵组

后者是 NIL 最重要的部分,因为 NIL 的主要用途是对数据结构和模式进行变换。

1.2.3 数据声明子语言​

数据声明子语言用于声明对其执行操作的变量和数据结构。

它提供了用称为珠(bead)的原子元素构建结构的能力。NIL 提供一组在“标准模式”下使用的标准珠;在“扩展模式”下,用户可以定义新的珠以及由它们构成的新结构。

1.2.4 环境子语言​

环境子语言表达程序预期在其中运行的上下文:外围设备的预期特性,以及通过特定操作系统与外部世界进行交换的语义。

因此,一个完整的“程序描述符”将包含四个不同的部分:

  • 环境部分
  • 数据声明部分
  • 控制部分
  • 操作部分

标识部分被省略,因为它对应于初始化过程中的登录和套接字获取部分。

1.3 网络机器​

NIL 中的一个基本概念是抽象的网络机器(Network Machine),它具有以下特性:

  • 无限的内存:在这种机器中不存在内存分配或垃圾回收的问题。但由于数据项必须可访问,它仍然必须有地址。

  • 可变字长:字可以看作最小的可理解、可寻址的数据项。称为珠的原子元素实际上就是机器字。每种类型的珠的结构和长度在数据定义子语言中表达。

如图 1.3.1 所示,一个 HOST 只与网络机器通信,网络机器可在两种模式下运行。

                                                  Network
+--------+ Machine
| HOST | <----------------------------------(
+--------+

图 1.3.1

  • 标准模式:珠、珠的结构以及允许对它们进行的变换都是标准的,无需重新定义;标准珠和标准结构为每个 HOST 所知

  • 扩展模式:在标准数据定义和操纵之外或取而代之,HOST 可以指定新的珠、结构和变换。扩展模式允许用户把自己的机器定义为网络机器。这就相当于 Ancona 在 RFC #42 中提出的 MY LOCAL、YOUR LOCAL 模式。如果某个名称的定义未被更改,则采用标准定义。

数据定义子语言同样用于记载标准珠集合。

网络机器的指令集处于较高层次,允许对数据结构进行全局变换。

网络机器的环境由服务器 HOST 环境中被执行中的程序所使用的那个子集决定;HOST-网络机器系统可以采取图 1.3.2 所示的两种主要配置。

   +----------+                     / Network
| user | <------------------( Machine
| HOST | \ (server)
+----------+

Network +------------+
Machine (user) ---------------( | server |
| HOST |
+------------+
  1. 网络机器充当由 HOST(服务器 HOST)所提供程序的用户

  2. HOST 机器是由网络机器所提供程序的用户。

    服务器机器将其硬件环境分配给用户机器。之所以这样选择,是为了让程序无需修改即可被远程使用;由远程程序的用户来调整自己及自己的环境。

    因此,当网络机器是服务器时,由它来定义数据定义部分和环境部分。

图 1.3.2

1.4 实现​

数据定义子语言和环境定义子语言应当既能描述 HOST 中的环境和数据,也能描述网络机器中的数据。在极限情况下,只要两个用不同语言编写的程序所使用的数据表示可以用数据描述子语言表达,它就应能使这两个程序相互通信。

每个 HOST 中将实现一个“生成器”,它接受描述该 HOST 数据结构和环境的规则,并生成一个适当的翻译器,把它们翻译成网络机器格式,如图 1.4.1 所示。

   HOST description      Network Machine
(description
non standard mode) +---------------------+
| Network Machine |
| standard mode |
+---------------------+
| |
v |
+-------------+ |
| GENERATOR | |
+-------------+ |
| |
v |
Data in +--------------+ Data is |
HOST | TRANSLATOR | Network Machine |
format +--------------+ format |
| |
+-------------------------------------------------+

图 1.4.1

一旦网络机器的标准确定下来,考虑用微程序单元来仿真翻译器似乎是有价值的,该单元可以添加到 Host 上,或者更可取地添加到 IMP" 上,从而避免翻译带来的负载,因为翻译可能涉及冗长的位级操作——(图 1.4.2。)

   +--------+            +--------+                /  Network
| HOST | <----------| HOST | <-------------( Machine
+--------+ +--------+ \

图 1.4.2