计算机程序的动态适应环境的制作方法

文档序号:6405281阅读:211来源:国知局
专利名称:计算机程序的动态适应环境的制作方法
技术领域
本发明与操作系统命令有关,特别是涉及在使用同一个命令处理程序时提供多种命令版本的方法。
当计算机制造商决定采用新的操作系统以便获得更好的硬件、更好的可用性和新的标准等方面的好处时,有一个关键问题,这就是大量的使用老操作系统的用户应该能够在新的操作系统下运行他们的应用程序。这是为了保护用户在他们的应用中的投资,对于某些大的用户来说,他们的投资高达几百万美元之多。
过去解决这个问题的一个方法是采用转换程序。转换程序把用户应用程序的源码进行转换,使之使用新操作系统命令。这种方法的缺陷是某些源语句已被丢失,或者说,对某些应用来说,没有相应的源语句。另外,源语言的转换是一个长过程,它将减慢现有应用程序在新系统中的执行速度。
解决这一问题的另一方法是由计算机制造商提供多种执行环境。用让执行相同功能的老版本和新版本的系统程序都被保留的方法来保持现有的接口(指用户可用的系统命令)。这种方法需要用户选择将要使用的应用程序的环境,而且需要维护和存贮两套操作系统程序。如果用户不把应用程序完整地转换成使用新的操作系统环境的话,他就不能把新操作系统提供的功能结合到现有的应用程序中去。
后一种方法的例子可以从美国专利No4,691,278中找到。其中,提供了多系统体系结构方式。有一个寄存器,它包含方式选择器值。程序的一条指令将调用一串微指令,对于不同的方式来说,这一串微指令是不同的。由于程序选择的方式不同,对于相同的指令来说,微指令的开始地址是不同的。在这种方法中,必须有不同的几套微指令。和高级语言比较,用这样的低级语言编程序一般来说更为困难。
设计一个计算机系统,使之能动态地适合使用多种版本的操作系统命令。用户所希望的版本可以用交互式对话来识别,也可以由用户希望运行的程序的属性来识别。
给定的系统命令的多个版本能够由单一的操作系统程序运行。要实现这一点,对命令的每一个版本要有一个命令定义,所有版本的每一个命令定义要有类型一致的参数,而且命令的每一个版本都要能用那个版本的命令定义将它转换成单个操作系统程序所能接受的格式。
多组命令定义被分别放在称为库的存储目录中,当相应的命令被处理时,搜索库以查出命令定义。库的搜索顺序是以所希望的系统命令版本号为依据来控制的。
命令定义由命令处理程序的名字和程序运行有关的参数定义组成。命令的版本不同,参数的数目不同,从而提供的功能范围也发生变化。用命令定义将每一种命令版本变换,使之有相同的参数个数被传送到命令处理程序。在不同的版本中,当参数值被忽略时,使用常数代替。因此,对每一个命令来说,仅仅只有一个操作系统程序运行该命令的不同版本。
用户应用程序通常是由多个程序组成的,每一个程序包含一个确定希望的系统命令版本号的属性,因此,应用程序是使用不同版本系统命令的程序的组合。如果用户逐渐转移到操作系统的增强型版本上,可以使用新版本的系统命令为现有的应用写出新的程序。现有应用程序就可能成为这个样子一部份是重写的,有先进功能的优点,一部份是保留的,使用老版本系统命令。
具有增强功能的新版本系统命令常常具有许多外加的新命令,这些新的命令能够使用在标明为老版本系统命令的程序中。这是因为在处理时先搜索包含老版本系统命令定义的库,如果没有找到,将搜索新版本命令定义,第一个与希望的命令匹配的命令定义将被处理。因此,如果希望的新功能是包含在新的命令中,用户不需要转换整个程序。


图1A图示说明本发明如何适应操作系统不同版本的命令以便在单个操作系统下运行。
图1B是存储在图1A的库中的命令定义的格式。
图1C是命令字符串的格式。
图2A是本发明优选实施例的数据流程图。
图2B是图2A所示的QCL/QCMD程序的流程图。
图3A和3B是图2A所示的命令分析器程序操作的流程图。
图4是图2A所示的命令处理程序的概括性流程图。
图5是图2A所示的编译程序操作的流程图。
图6是表明系统命令版本库搜索顺序的方框图,它是依赖于被处理程序的版本属性的。
图7、8、9是一个例子,它表明不同版本的相应的命令,不同版本的命令定义和不同的语法。
图10是一个应用程序框图举例,在这个例子中,使用了程序嵌套,还使用了多个不同版本的系统命令。
每一个应用程序都期望象原来写法一样使用在原来的操作系统中使用过的一个特定版本的系统命令。如果人们比较一下各种操作系统的系统命令就会发现,一个操作系统的系统命令与其它操作系统的相应系统命令是类似的。这些对应的系统命令可使用相同的名字,也可使用不同的名字,它们对每一个命令,可能使用不同的参数,也可能使用不同的参数个数。
从题为“IBM系统/38控制语言参考手册”(SC21-7731)1986中可以看到IBM系统/38的操作系统的完整的命令集。往后,我们将此命令集称为版本1(V1)命令集,第二个命令集称为版本2(V2)命令集,它包括了V1版的几乎全部约500条命令,还增加了大约200条命令。V2版和V1版中类似的命令可能有相同的名字,也可能有不同的名字。它们可能有更多的参数,相同数目的参数或者较少的参数。
图1A图示说明命令处理程序16执行由系统命令11调用的任务或任务组合的过程,不管系统命令来自操作系统的哪一个命令集或哪一个版本,为版本1,2或N写的命令能够用同一个命令处理程序来处理。(在个别情况下,不同版本系统相应的命令之间的功能差异是很大的,以致于每一个相应的命令都要有它自己的命令处理程序。)为了做到这一点,要把命令的数据进行转换,使得不同版本之间的所有对应的程序都具有相同的名字和相同数目的参数。
命令分析器程序36以命令的每一个版本的命令定义为基础执行上述转换过程。不同版本的相应命令的命令定义有相同数目的参数,参数之间的定位和顺序关系也完全相同。相应命令定义的这种通用格式被用来把实际的命令字符串转换成与那个命令的命令处理程序16兼容的形式。
在图1A中,不同版本的系统命令定义被存储在库12、14和15中。库12中的第1版是一组IBM系统/38操作系统的系统命令定义,库14中的第2版是一组IBM系统/38增强版操作系统的系统命令定义,库15中的第N版是一组专用的或未来的操作系统的系统命令定义,这表示可以使用任意多的版本。
在图1A中画出了每一个版本库中相应的命令的名字。在库12中,作废写命令定义18的名字叫CNLWTR,而在库14中,作为第2版存放的相应功能的命令定义的名字叫ENDWTR,在第N版的库15中,相应功能的命令定义的名字却叫做STOPWTR。在这个例子中,相应功能的命令名随版本的不同而变化,按照它们的定义,所有的这些命令都将调用名为结束写16A的同一个命令处理程序。
在库12、15和14中相应的命令定义22、23和24表示产生作业队列命令,它们具有相同的名字CRTJOBQ,对于CRTJOBQ来说,虽然各个版本关键字不同,但它们的每一个定义的参数个数是相同的。清软磁盘命令使用相同的名字CLRDKT,在库中的命令定义分别为25、26和29,但是每一个版本的命令有不同的参数数目,在版本1和版本2中,这些命令采用不同的语法,並且具有不同的命令定义。这一点如图7-9所示並且在以后将详细地进行讨论。
对每一个版本来说,产生控制语言程序命令使用相同的名字CRTCLPGM,並且在每一个命令定义库中,相应的命令定义27、28和30有不同的参数数目,这些命令的命令处理程序是编译器34,它的功能和操作将在图5中作详细叙述。
命令定义和命令的实际格式分别如图1B和1C所示。在图1C中,每一个命令以命令名开始(如ENDWTR或CRTJOBQ),接着是命令参数的关键字和值。命令中参数的顺序是不重要的,图1C中参数的顺序不是像图1B中的命令定义的顺序安排的。在图1B中,命令定义的格式由被调用的命令处理程序的名字和该命令的参数定义组成。命令分析器36(图2)使用这些参数定义来解释它收到的包含命令和命令参数的命令字符串。命令分析器检查命令串的语法並且建立参数信息指针表,该指针表所指的参数由被调用的命令处理程序使用。这个过程将在以后参考图2A作更详细的叙述。
版本库中为每一个命令定义的每一个参数存储的参数定义单元有关键字、长度、数据类型、默认值或常数和影射逻辑。关键字标识参数的身份,长度指出参数的合法长度,超过长度限制的命令将被拒绝。数据类型指明数据变化的规律,数据类型包括名字,十进制数,二进制数等种类。默认值是当那个命令的那个参数的关键字省略时将要实际插入的值。常数是系统将为那个参数插入的值,它不能由用户插入。影射逻辑指的是从名字到表示名字的值的参数逻辑变换。
图2A、2B、3A、3B和4表示了本发明的一个优选实施例,它将运行由交互方式输入的各种版本的命令,或者作为被选程序的一部份来看待。用户可以在终端上交互式地打入命令和参数的字符串向系统输入命令。用交互式对话70表示的一个用户能够以交互式会话方式使用版本1的命令,同时,在同一系统中,用交互式对话72表示的第二个用户能够发出版本2的命令。第一个用户发版本1命令的对话过程是由名字叫做QCL的命令输入屏幕控制程序74控制的。QCL程序可以由用户调用,或者由系统程序员在系统定义时预置,或者由用户预先指定,以便当用户每次通过工作站登记时就调用QCL程序。
QCL(或QCMD)程序的功能是起工作站显示和命令分析器程序36之间的接口作用,QCL/QCMD程序由图2B来说明。当操作系统把控制权交给QCL程序时,QCL在102步发出接收信息的信号,这就使信息队列把它顶部的信息传送给QCL。在判断步104程序被分支为三种情况在队列中没有信息;信息是命令;信息是命令之外的其它信息(如错误信息或诊断信息)。
如果没有信息,106步在工作站上显示命令输入屏,然后QCL在107步等待用户输入命令。在用户输入命令之后,QCL在108步把命令存入信息队列中。QCL再返回到120步接收信息,並且在判断步104检查队列中的信息。因为现在队列中有一个命令,QCL就分支到112步。在这里,112步把命令字符串及其选择项信息传送给命令分析器36(图2A)。选择项信息包括版本识别信息和要被执行的程序的指示器。在命令和选择项被传送后,QCL进入114步,调用命令分析器程序。在这之后,QCL返回到准备接收信息。
对于本发明来说,最重要的是如果这个信息是一条命令,114步调用命令分析器,112步把命令112A和包含版本识别信息的选择项传送给命令分析器。如果正在运行的程序是QCL,则传送的版本识别信息是版本1,如果正在运行的程序是QCMD,则传送的版本信息是版本2。不用不同的程序来传送版本识别信息,对于熟悉这方面专业的人来说是显而易见的,因为可以使用单个程序来做这件事,由用户或系统工程师来改变该程序的轮廓以便指明所希望的版本识别信息就行了。
判断步104的最后一个分支是“其它信息”。如果有了不是命令的信息,108步和110步引起工作站显示信息(116步)。QCL程序再一次返回到接收信息步102。
不管图2A中交互式对话70、71和72的哪一个运行,命令及其版本指示V1、V2或V“N”一起被送到命令分析器36,在那里,按照相应版本库中的命令定义进行语法和语意检查。像上面所说的那样,版本识别信息V1、V2或V“N”被送到命令分析器,而命令分析器是由QCL74或者由QCMD76调用,命令分析器在适当的一组库80、81或82中搜索命令定义。
命令分析器使用相应库中存储的命令的参数定义和由QCL或QCMD传送来的命令字符串中的实际参数。命令分析器根据参数定义检查命令串的语法和语义。如果命令串有错误,错误信息送回QCL74或QCMD76,並由QCL和QCMD将之显示在用户工作台上。如果命令串是正确的,命令分析器建立一个指针表84,这个表由命令处理程序在执行命令时使用。
指针表84是按照在被分析的命令的命令定义中预先确定的参数串PARM1到PARMX来建立的。表中的每一项将指向存储器工作区86的某一存储位置,在那里,存储有命令字符串中收到的参数信息和命令分析器加上的参数信息。常数和默认参数的指针也要加到表84上,按照版本库的参数定义把参数数据送到工作区86,使得被送版本的命令与命令处理程序兼容。
在命令分析器36建立了指针表之后,程序控制权转移到被选的命令处理程序16。在程序控制转移之后,命令分析器程序从程序的请求栈中退出。这样,就使得命令处理程序的信息送到QCL或QCMD。命令处理程序(CPP)取出指针表84指引的参数並且执行这个命令,然后CCP返回适当的信息送给QCL以便在工作站上向用户显示。
要处理的命令的另一个来源是存储的程序。为各种版本的操作系统所写的程序的源码经常是存放在磁盘上。在图2A中,三种版本的源码由31、32和33表示,它们可能是相同的程序,也可能是不同的程序。在31上的源语句是为版本1写的,32上的源语句是为版本2写的,33上的源语句是为版本N写的。在这些源码程序能够运行之前要先进行编译。
为了编译一个程序,用户要输入CRLCTPGM(产生控制语言程序)命令,並且指出识别被编译的源程序的参数。用户借助于QCL或QCMD程序输入CRTCLPGM命令,QCL或QCMD程序传送一个选件标志(OPTIONTAG)以指示CRTCLPGR命令的版本号,这个选件标志也指示CRTCLPGM命令处理程序要开始执行。
像任何其它命令一样,命令分析器36根据选件标志的版本识别信息为CRTCLPGM取出命令定义,然后分析器为CRTCLPGM在工作区86中建立参数数据和相应的指针表84。当指针表和参数数据是完整的时后,CRTCLPGR被调来执行。CRTCLPGR命令的参数数据中有一个常数指出被编译源语句的版本号。
CRTCLPGR命令程序与别的命令处理程序16的不同之处是CRTCLPGR命令的程序是一个编译器程序34。编译器34使用指针表和参数数据运行,其参数数据和指针表是根据参数和为CRTCLPGM建立的参数定义产生的。
编译器34(CRTCLPGR命令执行程序)的流程图如图5所示。编译器在200步使用指针表在工作区获取输入参数。这些参数包括·编译产生的程序名200A(通常它的名字与被编译的源文件名相同)。
·被编译的源文件名200B。
·表示在编译源码时用的命令的版本号或识别符200C。
编译器34在212步打开由参数200B所标识的源文件31、32或33。编译器在214步读源文件一个完整的命令(源语句)並把它传送给命令分析器。判断步216测试源文件是否结束,如果文件未结束,到218步。
在218步,把从源文件中读出的单个命令送到临时参数存储区,选件项被置成仅仅编译,在220步,调用命令分析器。命令分析器扫描命令字符串並且产生该命令的分析和验证后的形式,这个结果要送回编译器34。如果在语句中发现了错误,要把它记录下来,以便将来在232和234步引用,在判断步222立即返回到214步读下一条语句。如果命令分析器没有发现错误,判断步222分支到224步,在那里,编译程序将命令的分析后形式扩展成程序指令。在225步,把这组程序指令存储到正在被产生的程序的编译过的版本38、39或40中。在多数情况下,程序指令就简单地是命令的解析形式。
编译程序在214步继续读源语句,一直到发现源文件结束。在216步,当发现源文件结束时,在230步编译程序关闭源文件。如果判断步232指出源文件有错误,在234步把信息发给调用者QCL或QCMD,没有程序产生。
如果在处理源文件的过程中没有发现错误,编译程序将在236步产生一个程序並且用输入参数200A作为编译好的文件的文件名。版本识别信息200C也要存储到编译好的文件中,其目的是,当这个程序被调用时,它能够把版本识别信息传送给命令分析器。把版本识别信息作为程序的一部份存储在程序中将允许一个版本的程序调用另一个版本的程序。因此,系统将动态地适应存储在程序中的版本。
当选定该程序运行时,编译后的版本再一次通过命令分析器运行。这次,选件项信息是“执行”。像处理其它命令一样,命令分析器转换字符串数据,将数据加载到工作区86,建立指针表84並且调用带有名字的命令处理程序16。
程序控制权转移到带有名字的命令处理程序16之后,命令处理程序(CPP)使用指针表取回指针所指引的参数並且执行相应的命令。CPP把适当的信息送给正在运行的编译后的程序38、39或40。当CPP把控制权交给编译后的程序时,下一个命令被送交命令分析器执行。但是,如果在执行中有错误发生,返回给编译后程序的信息能够使程序向QCL或QCMD发错误信息,以便QCL或QCMD把它显示在用户工作台上。
命令分析器程序的操作更详细地如图3A和3B所示。在120步程序以取回命令字符串和选择项标志(版本识别信息、编译、执行)开始执行。在判断步122,程序根据版本识别信息分支到分析程序124、126或128之一。被选中的分析程序把命令字符串分解成字並按照被选版本V1、V2和V“N”的语法规则解释这些字。
在命令经过文法分析被分解成参数以后,程序在相应的版本库(130、132或134步)中搜索被处理命令的命令定义。如果在被选的版本库中找到了命令定义,判断步138分支到图3B的142步。在142步,程序从库中取回命令定义。如果在被选的库中没有找到命令定义,判断步138分支到搜索程序144。
搜索程序144在不同的库中搜索命令定义,按照库清单中的顺序依次搜索各个库。库和清单是由用户建立的,用户可以选择采用一列清单或一组清单,在这些清单中,库的排列顺序是不一样的。清单的选择建立在版本识别信息的基础上。
例如,有一个命令,在判断步122判明它是V2版命令,但是在132步並不能找到命令定义。这样的命令就用搜索程序144来搜索,其搜索顺序按版本库的优先权进行-V1库,V“N”库,用户库1,用户库2等等。这种优先权或者该库清单的顺序对于每一个版本来说是不同的並且能够按照版本识别信息用相同的方法来选择,在本例中,判断步122选择搜索版本1。
版本库的逻辑搜索顺序如图6所示。当程序的属性表明是版本1的程序在运行时,库的搜索顺序表示在60中。首先搜索版本1库,如果被搜索的命令在版本1库12中没有找到,就搜索版本2库。如果又没有找到,就搜索第一个用户库,然后是第二个用户库。用户库是用户指明的库,通常包括用户应用程序、文件、命令和其它目标。
如果程序的属性表明某程序是版本2程序,这个程序的库的搜索顺序如图6中的62所示。从图中可以看出,对于版本2的程序来说,不会搜索版本1的命令定义。这是因为在特定的实施例中,某些版本2的命令与版本1的命令具有相同的名字。为了保证版本2的命令真正被处理,必须首先搜索版本2库。
库的搜索顺序是由版本识别信息所指出的第一个库控制的,並在130步,132步和134步进行搜索,搜索顺序还要受库清单中的后随的一些库的控制。图6中的库列表的结构类型与系统/38中使用的结构一样。库清单包含一个指向库的指针表,这些库是有关的程序运行时系统需要使用的库。这个清单是由专用应用程序确定的。
现在再回到图3A,如果搜索程序144搜索成功,判断步146分支到图3B的142步取回命令定义。如果搜索程序不成功,程序分支到148步把错误信息送回到调用者,调用者可能是QCL,QCMD或者是被编译的程序,或者是执行程序。
图3B表明命令分析器程序在找到命令定义之后如何处理命令字符串。在142步取回命令定义之后,验证程序把命令与命令定义进行对照检查,它由参数数据的每一个字的校验组成,校验方法是把参数数据的每一个字与在命令定义中那个参数的定义进行对照。像前面参照图1B所叙述的那样,每一个参数由关键字、长度、数据类型、默认值或常数和影射逻辑定义。验证还包括检查所有需要的参数是否都已指出而且没有一个参数被重复定义。
验证程序150对照参数定义校验命令字符串中的每一个参数。程序150连续地从命令定义中取出每一个参数,並且用寻找参数中关键字的方法检查命令控制串中的对应参数。如果关键字没有伴随的值输入,验证程序将把参数定义中那个关键字的默认值赋予它。如果某一个关键字在命令中省略了,验证程序将把命令定义中的默认值插入以代替那个省略的参数。每一个参数都临时存放起来,其顺序与命令定义中的参数顺序一样。
如果参数数据没有查到它的定义,判断步152分支到154步,154步把错误信息送回调用者,程序控制权也返回调用程序。
如果命令的参数没有错误,判断步152分支到另一判断步156。判断步使程序转到两个路径之一,这由程序是被编译还是被执行来决定,伴随命令而来的选择项信息会表明这一点。如果程序是被编译,程序控制权返回到编译器。如果程序是被执行,控制权转移到建立指针表84(图2A)的循环158。
循环158把现在包括了默认值和常数的验证后的命令控制串转换为命令处理程序所使用的参数数据。而且,这个循环还要产生指向组成每个参数的数据的存储位置的指针表。在进入循环之前,在160步命令分析器程序设置指向命令定义中第一个参数本身的指针。判断步162测试指针,看一看命令中的最后一个参数是否已处理了。如果还未处理最后一个参数,则进到164步由转换程序164得到程序控制权。
转换程序164取回指针所指的参数定义和验证程序临时存放的对应的参数的值。转换程序164使用参数定义把参数的值转换成命令处理程序所预期的形式,这个形式与命令定义所指示的形式一样。在参数定义的基础上,参数数据可能用空白来填充,以便使它有正确的长度,它也可以在影射逻辑的基础上转换成另一种数据形式。因此,转换程序164要为命令定义中的每一个参数产生转换后的参数数据。
在转换后的数据产生之后,166步把它存储在存储器的工作区86中(图2A)。然后,在168步命令分析器程序在指针表84(图2A)中产生和存储命令处理程序(CPP)指针。现在,为命令处理程序使用的参数已经就绪,循环158可以处理下一个参数了。
为了得到下一个参数定义,每一个参数结束就是下一个参数的开始。在158的170步,程序产生下一个参数定义指针,程序环返回到判断步162。如果参数定义指针为0,判断步162知道最后一个参数定义已经处理完了,程序转移到172步,把程序控制权从命令分析器程序移交给命令处理程序。如果参数定义指针指到下一个参数定义,转换程序164再一次把命令字符串的参数转换成与命令处理程序兼容的形式。
每一个命令处理程序由于它执行的功能不同而不同,因此它的总的流程图只能在高层次描述,如图4所示。在176步,CPP用指针表获得转换后的数据,对命令中的所有参数都要做这件事。在所有的转换后的参数数据都得到以后,判断步178判断所有的对象是否存在,所谓对象包括设备、文件、命令、程序等等资源。如果存在,程序分支到180步,使用所有这些参数来执行该命令,执行之后,程序控制权返回到命令源,QCL、QCMD或者正在运行的编译后的程序。如果在系统中,有一个或多个对象不存在,判断步178分支到182步。182步把错误信息发回命令执行请求者、QCL、QCMD或被编译后的程序。
被选版本1和版本2命令说明版本1CNLWTR(作废写)命令版本2ENDWTR(结束写)命令当图1A中18所表示的版本1的命令CNLWTR(作废写)由程序或交互式用户对话使用时,参看图7a,它的命令定义从版本1库12中被取出,送到命令处理程序16A供处理。命令处理程序是与命令名无关的,因此,CNLWTR和ENDWTR都执行相同的功能。
CNLWTR命令和ENDWTR命令的命令定义如图7A和7B所示,这些命令的作用是使假脱机写操作结束,並且使有关的输出设备成为可供系统使用。在两个版本中,写操作可以立即结束,也可以使用选择项关键字来控制,可以选择的关键字是CNTRLD((可控)、IMMED(立即)和PAGEEND(页结束)。如果是立即结束,就立即停止写文件操作,在输出队列中的文件再一次成为可用的。如果以可控的方式结束,写操作在结束之前要完成对现行文件的写操作(或者是拷贝文件),或者要完成文件的一个打印页的输出。版本2的ENDWTR具有附加的功能。它能够指出要结束系统中所有的写操作,也能够用调整参数的办法来结束某些写操作。而版本1命令仅仅能够把写操作所用设备的名字(WRITER-NAME)看作为关键字WTR的值。
图7C表示了版本1的CNLWTR命令的语法。WTR是必须的参数,用户在使用这个命令时,必须在WTR之后输入设备的名字。选择项是一个选择参数,当用户不输入关键词时,它使用默认值*CNTRLD。
图7D表示了版本2的ENDWTR命令的语法。除了命令名不同之外,版本2的WTR参数有更多可用值。
版本1CRTJOBQ(产生作业队列)命令版本2CRTJOBQ(产生作业队列)命令命令名为CRTJOBQ(产生作业队列)的一对命令也有它们各自的命令定义库,如图1A中的22和24所示。对这两个版本来说,这两个命令的命令名是相同的,但它们的参数却很不相同,这一点可以从图8A和8B看到。版本1命令及其参数的完整定义可以在前面提到的系统/38的手册中找到。
CRTJOBQ命令的作用是产生一个新的作业队列。作业队列中包含了若干系统要运行的作业的入口点,控制队列中的作业的一些命令有提交作业(SBMJOB)、提交数据库作业(SBMDBJOB)、提交磁盘作业(SBMDKTJOB)和传输作业(TFRJOB)。从图8A和8B中,可以看到两个版本的CRTJOBQ命令的命令定义是不同的。从版本1到版本2的第一个变化是关键词“job-queue-name”出现在关键词值“library-name/”的后面。这样,在版本1命令中,作业队列的名字看起来是“OBJ.LIB”形式,而在版本2命令集中,作业队列的名字看起来是LIB/OBJ形式。名字语法上的差异在图3A中用不同的分析程序(124、126)处理。
两个版本的库名默认值也是不同的,版本库1是QGPL,版本库2是CURLIB。其它的差别表现在选择项关键词和它们的值中。版本1中的关键词PUBAUT在版本2中变成了AUT,该关键词的值也变化了,只有值ALL是相同的。仅仅把参数按位置传送到命令处理程序,而不传送关键词的名字,如图12所示。因此,关键词的名字与命令处理程序无关。图8C和8D表示了版本1和版本2的CRTJOBQ命令之间的语法差异。库的默认值从QGPL变成*CURLIB,库名约定从XXX,LIB变成了LIB/XXX,关键词PUBAUT变成了AUT,最后,PUBAUT的值的数目也与AUT的不同。
版本1CLRDKT(清软磁盘)版本2CLRDKT(清软磁盘)命令名为CLRDKT的一对命令有它们各自的命令定义库,如图1A中的25和26所示。两个版本的这个命令的命令名是相同的,从图9A和图9B中的参数定义可以看出它们的参数是很不一样的。命令第二版的常数的作用是使参数的数目与命令处理程序16C(图1A)兼容。常数是设计时加上的,並且对用户透明。这允许关键词“LOC”和“SUFFIX”隐含在第二版本中。换句话说,一个包含了用版本1的命令集写的几个程序的应用程序不用改变就可以在具有版本1和版本2命令集的计算机上运行。
版本1的CLRDKT命令用擦除每个磁盘上的磁盘标识区上的数据文件标识符的方法擦除一个或多个软磁盘上所有激活的和未激活的数据文件。在版本2命令中,取消了在版本1中具有的关键词LOC和SUFFIX。在版本2库的内部描述中,关键词LOC被赋于常数*S1(它意味着在计算机系统中的物理位置-槽1)。在版本2命令中关键词SUFFIX被赋于常数*NO。对应于这个命令的命令处理程序将会收到5个参数DEV、LOC、VOL、CHECK和SUFFIX,因此,这些就是图9A和9B中的命令定义的五个参数。
图9C和9D表示了版本1和版本2的CLRDKT命令之间在语法上的差别。关键词DEV仅仅在版本2中才有,关键词LOC和SUFFIX仅仅在版本1中才有,在关键词VOL中有不同的默认值。在版本2的命令定义中(图9B)加入的常数对用户来说是不可见的。
下面是两种版本的CLRDKT命令的简化表示,其中表明了常数的用法,符号“-”表示允许用户输入的内容。
关键词版本1版本2DEV常数-QDKT-LOC - 常数=(*S1*FIRST*LAST)VOL--SUFFIX - 常数=*NO每一个参数究竟传送什么在IBM系统/38程序员指南(1986)第十版十四章中有详细叙述。下面是CLRDKT命令的一个例子。这个例子使用关键词SPCVAL(专用值)来识别影射逻辑。影射逻辑的专用值表明外部项是如何被影射成程序所预期的内部值的。
SPCVAL((*LAST-5)(*ONLY-3))在这里当指定为*LAST时,程序得到-5当指定为*ONLY时,程序得到-3命令处理程序是与字*LAST和*ONLY无关的,使用专用值允许外部项改变而不影响应用程序。所有的参数和专用值的影射都由命令分析器处理,使得命令处理程序得到的参数变换成以影射逻辑为基础的值。
CLRDKT命令的版本1的例子如下CLRDKTCMDPARMKWD(DEV)+TYPE(*NAME)LEN(10)MIN(1)MAX(1)+PARMKWD(LOC)+TYPE(EI)PARMKWD(VOL)+TYPE(*CHAR)LEN(8)RSTD(*NO)+DFT(*MOUNTED)PARMKWD(CHECK)+TYPE(*CHAR)LEN(1)DFT(*YES)SPCVAL((*YES Y)(*NON))PARMKWD(SUFFIX)+TYPE(*CHAR)LEN(1)CONSTANT(*NO)SPCVAL((*NO N)(*YES Y))E1 ELEM TYPE(*CHAR)LEN(5)CONSTANT(*S1)ELEM TYPE(*INT2)RSTD(*NO)+SPCVAL((*FIRST-4))CONSTANT(*FIRST)
ELEM TYPE(*INT2)RSTD(*NO)SPCVAL((*LAST-5)(*ONLY-3)+CONSTANT(*LAST)CLRDKT命令的版本2的例子如下CLRDKTCMDPARMKWD(DEV)+TYPE(*NAME)LEN(10)+CONSTANT(QDKT)PARMKWD(LOC)+TYPE(E1)PARMKWD(VOL)+TYPE(*CHAR)LEN(8)DET(*LOC)SPCVAL((*LOC*MOUNTED))PARMKWD(CHECK)+TYPE(*CHAR)LEN(1)+DFT(*YES)SPCVAL((*YES Y)(*NON))PARMKWD(SUFFIX)+TYPE(*CHAR)LEN(1)+RSTD(*YES)DFT(*NO)SPCVAL((*NO N)(*YES Y))E1 ELEM TYPE(*CHAR)LEN(5)MIN(0)MAX(1)+VALUES(8M12*M1*M2*S1*S2*S3*S12*S23*S123)
ELEM TYPE(*INT2)RSTD(*NO)+DFT(*FIRST)RANGE(1 10)SPCVAL((*FIRST-4))ELEM TYPE(*INT2)RSTD(*NO)+DFT(*LAST)RANGE(1 10)SPCVAL((*LAST-5)(*ONLY-3))参照图10,本发明能容易地扩展成多于两个版本的命令集,只要有足够大的程序属性字段,就能够适应三个或更多的版本。版本库的有规则的排列允许首先搜索任意一个版本库。因为每一个程序都有它自己的属性,所以一个应用程序可以有使用不同版本命令的程序组成。
在图10中,应用程序有一个使用版本1的输入程序(框181),输入程序调用程序183,程序183的属性表明,它是一个版本2程序。程序181还要调用使用版本3的程序185,程序185本身又调用用版本2写的程序187。使用本发明,对于用不同版本的命令集写的程序的嵌套没有概念上的限制。
用版本1写的应用程序中的巨大的财力资源不需要变换成版本2或版本3,甚至还可以加上一些用包含有更先进功能的版本写的程序。在用户空间时,可以把应用程序中的一部份程序重写,以便逐步改进程序的性能,这比一次全部修改整个应用程序要好得多。
权利要求
1.能够运行与多种版本的系统命令兼容的一组程序的动态调节的计算机系统,其特征在于存储第一种版本的系统命令定义的装置;至少存储第二种版本的系统命令定义的装置;程序中指示该程序需要的系统命令的版本的装置;从存储的命令中取回命令定义的装置,取回的命令定义的版本与指示系统命令的希望版本的装置有关;以及命令处理装置,它响应取回的要处理的命令的命令定义,使得各种命令版本都与该命令处理装置兼容。
2.如权利要求1所述的动态调节的计算机系统,其特征在于,系统命令用一个或多个参数表示,每个参数包括指出其特定作用的关键词;以及至少有一个为了定义与关键词有关的选择项並与该关键词有关的值。
3.如权利要求2所述的动态调节的计算机系统,其特征在于,在系统命令的不同版本之间,参数的数目是不同的。
4.如权利要求3所述的动态调节的计算机系统,其特征在于,对于那些在其它版本中没有对应参数的关键词,命令定义版本中包含有常数。
5.如权利要求4所述的动态调节的计算机系统,其特征在于,存储不同版本命令定义的装置要按预先确定的顺序把定义参数送给命令处理装置。
6.如权利要求1所述的动态调节的计算机系统,其特征在于,各种版本的命令定义存储的格式应包括与命令处理装置中的程序对应的名字;以及识别处理命令的希望的结果的命令参数。
7.如权利要求6所述的动态调节的计算机系统,其特征在于,对于多于一种版本的命令来说,命令处理装置中的程序的名字是相同的。
8.如权利要求7所述的动态调节的计算机系统,其特征在于,几个不同版本的相应的命令的命令定义具有相同数目的参数。
9.如权利要求1所述的动态调节的计算机系统,其特征在于,一组程序的每一个指明了它所希望的命令版本,使得应用程序按照被处理的特定程序的指示使用不同版本的命令来处理。
10.一个为了执行用户程序的计算机系统,其特征是存储系统命令的第一个版本的库;存储系统命令的第二个版本的库;为用户程序调用的系统命令搜索上述库的装置;确定搜索顺序的装置,以这种顺序为用户程序搜索上述的库;从库中接收命令並执行用户程序调用的系统命令的命令执行程序,其中同一个命令执行程序能够执行两种版本的系统命令。
11.如权利要求10所述的计算机系统,其特征在于,确定库搜索顺序的机构包括在每一个程序内识别在执行上述命令时所使用的系统命令版本的机构;把来自带有识别机构的每个程序的命令提供给搜索机构的机制,该机制应使搜索机构首先搜索由识别机构所指明的库。
12.计算机操作系统动态适应多种版本的计算机命令的方法,以下面步骤为特征取回与命令处理有关的命令字符串及其选择项信息;以上述选择项为基础取回命令的命令定义;按照命令定义把命令字符串转换成转换后的数据,其格式与命令处理的要求一致;为了能执行任何版本的命令,用指定给那个命令其所有版本的类似命令的命令处理程序来处理转换后的数据。
13.如权利要求12所述的方法,其特征在于,上述选择项信息包括版本识别符。
14.如权利要求13所述的方法,其特征在于,上述命令定义取回步骤包括把命令定义的每一个版本集中在预先确定的版本库中,使得给定版本的所有命令定义都在单个库中;从选择项信息中检测出命令的版本识别符;搜索由版本识别符指明的版本库以取回命令定义。
15.如权利要求14所述的方法,其特征在于,上述搜索步骤还包括以预先确定的顺序搜索多个版本库,一直到找到命令定义。
16.如权利要求12所述的方法,其特征在于,在多种版本的命令中相对应的命令都有与命令处理程序步骤有连系的预先确定的格式,命令处理程序执行所有版本的命令。
17.如权利要求16所述的方法,其特征在于,对于所有的各种版本的命令,其预先确定的命令定义格式具有相同数目的参数。
18.如权利要求16所述的方法,其特征在于,对于所有的各种版本的命令,其预先确定的命令定义格式具有相同顺序的参数。
全文摘要
多种版本的系统命令在单个操作系统下运行,每个命令使用一个命令处理程序,不管命令是哪个版本。每个版本的命令都有一个命令定义,对于各个版本的同一命令,其命令定义都有相同的格式。命令分析器程序以那个版本的命令定义为依据把命令字符串的参数变换成适合相应的命令处理程序的正确的格式。多个命令定义集被分别放在称为库的存储目录中。按照版本识别符搜索这些库以找到命令的命令定义。交互式输入的或者由系统输入的程序属性来指明版本识别符。
文档编号G06F9/44GK1035374SQ8810781
公开日1989年9月6日 申请日期1988年11月12日 优先权日1987年11月17日
发明者瓦格纳·O·尼尔 申请人:国际商用机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1