正文

Forth 语言概要(4)2005-08-05 14:12:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/forth/3456.html

分享到:

13. 多任务
多任务在 Forth 中从一开始时就有了。这些系统不仅仅是语言处理器,而且包含操作系统的特点,许多集成系统完全是独立运行的,执行所有操作系统的功能。

Forth 的操作环境运行速度快,所以基于 Forth 的系统就能够支持多用户和多任务,甚至在那些看似不能实现这些功能的计算机硬件上也是这样。例如,一个电话交换板的生产商在一个 Z80 上执行 50 个任务。在 IBM PC 上也有几个多任务产品,有些甚至能够支持多用户。在一般支持多用户操作的计算机上,可以支持的用户数就更多了,一个运行在单个 MC68000 处理器上的数据库应用系统能够支持 100 个终端更新和数据库请示,而运行速度却没有明显的降低。

多用户系统可以支持多个程序员同时工作,每个程序员都有自己的私有字典、堆栈和一系列变量来控制任务。私有字典连接到一个共享的、可再入的、包含全部标准 Forth 功能的字典。私有字典可以用来开发应用程序代码,这些代码以后可以加入到共享字典中。

图 6 给出了 Forth 系统实现多任务的典型方法。这是一个“轮循调度算法” 调度器,是 Forth 系统中实现多任务最常用的方法。然而,有一些实现使用时间片调度或者基于优先级的调度以及其它可剥夺的算法,在这样的系统中每个任务都有自己的用户区以保存控制变量、私有字典和堆栈。用户区的第一个字段是 STATUS 变量。这个变量有两个可能的值:唤醒或者休眠。



图 6 在循环调度队列中的 4 个任务

可以被选择调度执行的任务必须处于唤醒状态。当任务被选择执行时它的状态就被复位到休眠状态。任务一直执行直到调度器执行到字 PAUSE ,这将把任务的状态置为唤醒,控制重新返回到调度器。当调度器再次轮循到这个任务时,将从 PAUSE 的指令之后继续执行。

除了 PAUSE 字之外,任务也可以执行 STOP 字将控制返回到调度器。这与 PAUSE 类似,但是任务的状态并不切换到唤醒状态。这样,当调度器再次轮循到这个任务时,当前的状态仍然是休眠。这意味着这个任务不能再被执行了,除非它的状态被另外的任务或者中断设置为唤醒。

系统以这种方式编程并允许中断。当一个中断发生时,一些与机器有关的代码将指定的任务状态置为唤醒,这样当调度器再次到达这些任务时它们将被执行。当任务执行时, STATUS 变量被置为休眠,这就允许一个任务执行时可以发生中断。因此,如果一个任务执行了 STOP 指令而它的状态没有改变,在它执行中一个中断设置了它的状态为唤醒,它就可以再次被调度,于是我们能够缓冲一个中断。然而,这也就意味着当一个任务主动放弃处理器并希望下一次调度继续执行时,它必须把状态设为唤醒。

轮循调度器使用存储在 LINK 用户变量中的地址作为下一个任务的地址。如果这个任务的 STATUS 是唤醒的,该任务将被调度执行,否则,调度器取出它的 LINK 地址转到下一个任务。

这种方法有两个主要问题:

•  当一个任务为了其它任务可以运行而主动放弃处理器时,从放弃到再次得到处理器的时间是不确定的;

•  中断设置一个任务为唤醒状态到这个任务实际执行之间的时间也是不可知的。

通过小心地使用 PAUSE ,再加上 Forth 的运行速度很快,已经在主要的应用系统中克服了这些问题。

14.Forth 硬件
早在1980年,ROCKWELL公司就生产了65F11处理器,这是一个6502处理器的变型,它在6502芯片的 ROM 中固化了 Forth 原语,这个芯片被成功地应用到了许多嵌入式系统中。

1981年, Chuck Moore开始设计一个 Forth 虚拟机芯片。这个工作首先在 Forth,INC. 进行,后来专门成立了一家公司来开发这个芯片。 1984 完成设计, 1985 年生产了第一个样片。后来, HARRIS(INTERSIL) ,Johns Hopkins University 和其它人也开发 Forth 硬件。基于 Forth 的芯片提供了极高的性能,一般可与 RSIC 芯片相比,但是它没有传统 RISC 的程序设计复杂性。

15. 标准
Forth 界认识到需要一个标准,使得应用和扩展都以此为基础。第一个这样的标准从上个世纪 70 年代中期 FIG(Forth 兴趣组织 ) 开始,这个标准后来变成了 FIG-Forth 标准。

第一个主要的 Forth 标准来自于 1977 年在 Utrecht 召开的一次会议,与会者提出了一个原始的标准并同意以后继续举行会议讨论, 1978 年的会议包括了 FIG 成员,经过一系列由用户和开发商参加的会议,产生了一个更加广泛的标准,称为 Forth-79.

尽管 Forth-79 标准的影响力是巨大的,但是许多 Forth 用户和开发商发现这个标准中有一些致命缺点。 1983 年,两次进一步的会议产生了 Forth-83 标准。

受到 Forth-83 标准被广泛接受的鼓舞,一组用户和开发商从 1986 开始讨论美国国家标准的可行性。美国国家标准 Forth 技术委员会,也称为 ANS ASC X3/X3J14 委员会,于 1987 年召开了第一次会议,目标是“达到一个可接受的标准,被 Forth 产品主要开发商接受,对现有在用产品的不利影响最小”。 1994 年,也就是大约 7 年之后,新的标准最终产生了,这是所有标准中走得最远的。使用来自 5 个国家的说明,通过开发商向社会公开。两年之后,国际标准化组织接受这个标准为国际标准。

16. 研讨会和定期出版物
由于人们使用 Forth 进行工作并不断做出有益的扩展,所以 Forth 语言也在不断地发展。有三个年会关注着 Forth 语言的发展:

Forth Modification Laboratory (FORML)

held at Mt. View in California and organised by the Forth Interest Group.

Rochester Forth Conference (RFC)

held at the University of Rochester in New York and organised by the Institute for Applied Forth Research Inc.

European Forth Conference (euroForth)

held in a different location each year. This is the only conference to provide a refereed (peer reviewed) section. Originally organised by the European Forth Interest Group, but now organised by various European based Forth vendors.

对于 Forth 的许多新的思想最先在这些 Forth 相关的杂志上出现:

Forth Dimensions (ISSN 0884-0822)

published six times a year by the Forth Interest Group for its members.

Journal of Forth Application and Research (ISSN 0738-2022)

published irregularly by the Institute for Applied Forth Research Inc. This is the only peer review (refereed) journal directed to the Forth language. The Journal is now published electronically on the Internet. A paper version of the Journal will be published at irregular intervals.

17. 总结
FROTH 可以被看成是有两个堆栈(参数栈和返回栈)的、有可扩展汇编语言的处理器。 Forth 解释器可以看成是这个抽象处理器的完全宏汇编器和完全集成的操作系统。

这就给我们提供了一个交互式的调试环境,使我们可以增加新的宏(高级定义)和新的指令(低级 CODE 定义)。它甚至允许我们通过定义新的数据类型(使用定义字 CREATE …… DOES> )扩展宏系统本身。因为这个解释器也是一个全功能的操作系统,所以程序员只需要学习一种工具。

Forth 有四个直接的优点:亲善、直接、可扩展和经济。它还有两个间接的优点:可理解和符号化。

Forth 不仅仅是一种语言,它更是一种解决问题的哲学思想。这可以用缩写 K.I.S.S 来概括( Keep It Simple and Stupid ,保持它的简洁和易用)。我们可以引用 Jerry Boutelle (owner of Nautilus Systems in Santa Cruz, California) 的话,当被问及“使用 Forth 是怎么影响你的思维”时,他回答:

“Forth 以许多方式改变了我的思维。从学习 Forth 开始,我已经使用了各种语言编程,包括汇编、 BASIC 、 FORTRAN 。我发现我一直在使用 Forth 的问题分解方式,通过创建字的方式把它们组合在一起。例如,在处理字符串的时候,我会像 Forth 的 CMOVE 、 -TRAILING 、 FILL 那样来定义子程序。更基本地, Forth 坚定了我对简单性的信念。在面对一个问题的时候,许多人使用特别复杂的工具,但是简单的工具也可以使用而且更有用。我试着简化我生活的方方面面。”

这里我引用中国哲学家老子的一句话:

“为学日益,为道日损”

或者引用 Antoine Lavoisier (1789) 的话:

“把科学和语言分离是不可能的,因为每一项自然科学总是包含三件事情:科学所基于的一系列现象,在头脑中命名这些现象的抽象概念,表达这些概念的词汇。为了说明一个概念,我们需要一个词汇;为了描绘一个现象,我们需要一个概念。所有这三件事情都反映了同一个现实。”

这就是包含在 Forth 语言背后的哲学。

18. 参考文献
略 ( 可参见原文 ) 

阅读(3131) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册