body, table{font-family: 微软雅黑}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

    有些FORTH系统可以处理多道任务,因此,可以增加任意数量的附加任务。这些任务可以是把一个FORTH的整个交互功能置于在终端上的某人管理下的“终端任务”,也可以是一个控制没有终端的硬件设备的“控制任务”。
    每个任务都需要有自己的“用户区”。用户区的大小和内容取决于任务类型; 
    每个终端任务具有自己的专用词典,pad,参数堆栈,输入信息缓冲区,返回堆栈和用户变量区。各个终端的词什么的不能通用。
    每个控制任务具有一对堆栈和一小组用户变量。由于控制任务不使用终端,它就不用它自己的词典,pad和信息缓冲区。

用户变量
    用户变量不同于一般的变量。对于 VARIABLE 定义的一般变量,其值是保存在词典条目的参数域中。但是每个用户变量中,其值是保存在称为“用户表”的数组中。它们的词典条目被设置在另一个地方,词典条目中包含一个检索用户表的位移量。当执行这个用户变量名时,比如DP,这个位移量被加到用户表的起始地址上。就得到了DP在用户表数组中的值的起始地址。这时候就可以用词@或!来操作。
用户变量的优点是:任意多个任务都可以使用变量的同一定义但可各自取得它自己的值。节省大量的空间。
比如执行  BASE  @  的任务都是从它自己的用户表中取得 BASE 的值。这就在系统中节省了大量的空间,而且仍然允许每个任务独立执行变量。
用户变量由词 USER 来定义。用户表中变量的次序和位移量依各个系统而定。
USER  (n  ---  )   使用形式:n  USER  名称   为定义词汇,它在指定的用户存储区内生成带有偏移 n 的用户变量。当以后执行<名称>时,留下16位存储单元的地址。由<名称>传送的初始地址内容显然是非定义的。是系统自己分配的。为 LMI 的使用保留了偏移0-57(0-39H),因此,应用软件应使用 64-127(40-7FH)范围内的偏移。
FORTH系统中有三种类型的变量:其值由整个FORTH系统使用的系统变量;其定义能被系统中的所有任务使用,但其值只对应单个任务的用户变量;第三种是普通变量。它既能由整个系统访问,又能仅由单个任务使用,这取决于他们是在OPERATOR中定义的,还是在专用任务中定义的。

词汇
----------------------------------------------------------------------------------------------------------------------------|
'   (  ---  addr  )----------------------------------------------------------------------------------------------------|
使用形式:   '   名称      (试图在词典中找到来自输入流中“名称”的词的地址)--------------------------------------------|
留下词典中该词汇“名称”的代码域地址。如果未在当前现役检索顺序中找到,“名称”就存在错误。它被称为小标---------|
----------------------------------------------------------------------------------------------------------------------------|
    FORTH 系统中有三类标准词汇:FORTH词汇,编辑程序词汇和汇编程序词汇。
除了属于编辑程序词汇的编辑命令之外,做笔记到现在所涉及的词都属于FORTH词汇。汇编程序词汇所包含的命令用来为特定机器编写汇编语言代码。汇编语言代码依机器不同而变化。
    FORTH系统中不管是属于哪一类词汇,所有定义都是按照被编辑的顺序加入词典。因此这些词汇的构成不是把词典分为几个不同的部分,而是互相交织但又独立链接成表的。
    如图所示,下图中三类词汇,每一类都有一个相同的词CURRENTER,但是 ' 词沿着篮球链搜寻时,只能找到在篮球词汇中的那个自己的词。
执行FORTH  ,EDITOR 或 ASSEMBLER 这三个命令中的任一个命令,可以改变词典的搜索范围。
FORTH  (  ---  )  主词汇支的名称。执行FORTH时它成为检索顺序中的第一个词汇支。FORTH是初始编译词汇支,并且是检索顺序中的第一个词汇支,新的定义成为FORTH词汇支的一部分,直到不同的编译词汇支被建立
EDITOR (  ---  )  把EDITOR词汇支选为当前检索顺序之首。
ASSEMBLER (  ---  )  如果覆盖(overlay)汇编程序未被装入,则将它装入。如果汇编程序已经驻留在内,则选择ASSEMBLER词汇支。    
FORTH 保证搜索的是FORTH词汇。但是,通常FORTH系统自动为我们改变搜索范围。
eg:系统开始处于FORTH词汇,当我们想把一个应用程序输入到块,某个编辑程序命令会把搜索范围自动转向编辑程序词汇。一直到装配该块并定义之前,系统都处于编辑程序词汇内。装配编译时,词 : 将自动使搜素范围回到它开始所处的词汇——FORTH词汇。
CONTEXT  (  ---  addr )  含有指向词汇支指针的变量;这个词汇支是当前检索顺序中的第一个词汇支。
CURRENT  (  ---  addr )  它把指定编译词汇支的用户变量的地址留在堆栈中。
DEFINITIONS  (  ---  )  使用形式:cccc  DEFINITIONS  把汇编词汇支改成与现役检索顺序中第一个词汇相同。
INTERPRET  ( --- )  解释输入流,由 >IN 索引,直到全部解释完。
EXECUTE  (  addr ---  )  执行其参数域地址在栈顶的词典条目。
>IN  (  --- addr  )  指向输入流中当前位置的指针
BLK  (  --- addr  )  若非0,指向由LOAD正在解释的块。若为0表示从终端(通过输入信息缓冲区)解释。
将要被搜索的词汇是由用户变量 CONTEXT 指明的。一些新的定义将要链接于词汇。链接词汇是由另一个称为 CURRENT 的变量指明。由于CURRENT一般指向FORTH词汇,所以新的定义通常都链接于FORTH词汇。
如果要将系统编译词链接于编辑程序和汇编程序词汇中,就要通过词 DEFINITIONS 来实现。
EDITOR  DEFINITIONS  中,EDITOR 置 CONTEXT 指向“编辑程序”。而词 DEFINITIONS 把 CONTEXT 中的内容复制进 CURRENT 。: DEFINITIONS     CONTEXT  @  CORRENT !  ;     执行这个命令之后,编译的任何词都将属于编译程序词汇,直到键入:  FORTH  DEFINITIONS  重新把CURRENT复位到指向“FORTH 词汇”为止。

多任务Forth系统内存布局的更多相关文章

  1. linux系统进程的内存布局

    内存管理模块是操作系统的心脏:它对应用程序和系统管理非常重要.今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕.由于不少概念是通用的,所以文中大部分例子取自32位x86平台的Lin ...

  2. Anatomy of a Program in Memory.剖析程序的内存布局

    原文标题:Anatomy of a Program in Memory 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译 ...

  3. Linux进程地址空间 && 进程内存布局[转]

    一 进程空间分布概述       对于一个进程,其空间分布如下图所示: 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始 ...

  4. c++ 对象的内存布局

    之前介绍过了普通对象比如系统自带的int等对象的对齐方式,在学习类型转换的时候遇到了自定义类型的继承体系中的downcast与upcast. 于是顺藤摸瓜,摸到了这里.发现还是 陈皓的博客里面写的最早 ...

  5. .NET对象的内存布局

    每个虚拟机都有它自己的对象布局,本文我们将针对sscli源码和windbg调试器来查看不同类型的.net对象布局. 在.net虚拟机里,每个对象都需要保存这些信息: 对象的类型: 对象实例的成员属性( ...

  6. Linux 内存布局

         本文主要简介在X86体系结构下和在ARM体系结构下,Linux内存布局的概况,力求简单明了,不过多深入概念,多以图示的方式来记忆理解,一图胜万言. Technorati 标签: 内存 布局 ...

  7. Qemu对x86静态内存布局的模拟

    快乐虾 http://blog.csdn.net/lights_joy/ lights@hb165.com 本文适用于 QEMU-0.10.5 VS2008 欢迎转载,但请保留作者信息 在PC机中,由 ...

  8. C++ 对象的内存布局(上)

    C++ 对象的内存布局(上) 陈皓 http://blog.csdn.net/haoel 点击这里查看下篇>>> 前言 07年12月,我写了一篇<C++虚函数表解析>的文 ...

  9. 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别

    探讨C++ 变量生命周期.栈分配方式.类内存布局.Debug和Release程序的区别(一) 今天看博客园的文章,发现博问栏目中有一个网友的问题挺有趣的,就点进去看了下,标题是“C++生存期问题”,给 ...

随机推荐

  1. C#设计模式(9)——装饰者模式(Decorator Pattern)(转)

    一.引言 在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手机类).A ...

  2. arch----------arch下的一些命令,亲测

    1.taoyanghao 不在 sudoers 文件中.此事将被报告. 这个是使用sudo以后报出的错误提示,sudo确定已经安装了. 解决方案:编辑/etc/sudoers文件.找到这一 行:&qu ...

  3. GALV_maptravel研究分析(1)

    强大的地图传送式插件~~ 我以自带demo进行分析,本篇地图Init setting map 1.---------------------------------- 实例 创建地图 Galv.MAP ...

  4. 深入FM和FFM原理与实践

    FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩.美团点评技术团队在搭建DSP的过 ...

  5. 2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)

    #1231 : Border Length 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Garlic-Counting Chicken is a special spe ...

  6. windows 如何创建硬链接

    输入代码:mklink /d F:\ D:\pdf mklink /d 是命令语句,空格,接着是放置硬链接的位置,空格,再是目标文件夹.

  7. 记录Ok6410 sd 启动uboot

    1\参考资料https://github.com/SeanXP/ARM-Tiny6410/tree/master/no-os/sd-no-os/u-boot 2\参考资料https://blog.cs ...

  8. Idea 全局替换指定字符

    最近使用idea开发,刚接触不久,然后碰到需要全局替换的时候,懵逼了.之前使用eclipse 直接Ctrl+F 就可以操作了. 现在使用idea 摁Ctrl+F竟然只能搜,不能替换....尴尬的一匹. ...

  9. Codeforces 438E The Child and Binary Tree - 生成函数 - 多项式

    题目传送门 传送点I 传送点II 传送点III 题目大意 每个点的权值$c\in {c_{1}, c_{2}, \cdots, c_{n}}$,问对于每个$1\leqslant s\leqslant ...

  10. 手游折扣app排行榜前10名_2018哪个折扣app最低最好

    2018游戏圈白皮书发布,PC端游的份额继续下降,页游的比例也在下降,但手游的比例持续3年上升.以渠道为阵营,逐渐小的平台和公会被逐渐淘汰.流量集中在少数几个大的平台.但是这样带来的问题是,平台越来越 ...