Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67918
  • 博文数量: 15
  • 博客积分: 575
  • 博客等级: 中士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-25 14:49
文章分类

全部博文(15)

文章存档

2011年(1)

2006年(14)

我的朋友

分类:

2006-05-25 15:06:36

第一章  介绍

 

    这章介绍OS/400的几个主要概念,这些概念在以后的章节中会陆续介绍。

    系统操作是由以下几个方面控制的:

    CL命令:它用在交互和批作业及CL程序或过程中。

    菜单选项:由选择一个菜单的选项来控制系统操作,交互用户也能用菜单来完成许多

  系统任务。

    系统信息:用在程序和过程之间的通讯以及程序、过程和用户之间的通讯,它也能报

  告状态信息及错误条件。

 

1.1  控制语言

     控制语言(CL)是与操作系统的主要接口,不同工作站用户可同时使用它们。单个的控制语言语句叫做一个命令,能用下列方式进入命令:

    从工作站分别进入

    批作业的一部分

    做为源语句生成CL程序或过程

命令也能从命令行或命令入口显示中分别进入。为了简化使用CL,所有的命令都用一个一致的语法规则。另外,对所有的命令,操作系统都支持一个提示,对大多数命令参数给出缺省值,也有有效性检查,以便保证在实现命令功能前保证命令的正确性。这样,CL对不同的系统用户使用不同的系统功能提供一个简单的灵活的接口。

    过程:是一个独立的高级语言语句。它完成某一特别功能或任务,然后返回到调用者。

          CL中,过程通常由PGM语句开始,用ENDPGM语句结束。

    模块:它是编译源语句产生的结果。模块要连编到程序中才能运行。一个CL模块由

         用户写的过程和由CL编译生成的程序入口例程组成。在其它高级语言中(例如

         C),一个模块可以包括多个过程。

    程序:一个ILE程序是由一个或多个模块组合在一起的目标。模块连编到程序中才能

         运行。一个程序必须要有一个程序入口例程,在生成每个模块时,CL编译器生

         成一个程序入口例程。一个OPM  CL程序是用CRTCLPGM命令编译源码产生

 的目标。

    服务程序:它是由一个或多个模块组成的目标,不能直接调用服务程序,可以用程序

  中的过程或服务程序调用另外服务程序中的过程。

    命令语法:一个命令由命令名和参数组成。命令名通常由一个动词(动作)后跟一个

              名词或词组,它给出动作的接收者。做为命令名的字一般缩写或三个字母,

              例如,CL的发送信息命令,命令名为SNDMSG,用户用它往信息队列发

              送信息。CL命令中的参数如是键字参数,键字通常也用缩写形式。在进入

  命令时,某些参数可按现定顺序来省略键字不写,这叫做位置参数格式。

 

1.2  CL过程

    CL程序和过程是由CL命令组成的。命令编译OPM程序或模块,模块可与用CL或其它语言写的模块连编到一起构成程序。使用CL程序或过程的优点是:

它比单个输入命令和运行命令要快。

它对相同的命令及逻辑过程提供一致的处理。

某些功能不允许进入单个的CL命令,必须是程序或过程的一部分。能象其它HLL程序和过程一样测试和调试,能把参数传递给它,这样能根据使用要求分别完成操作。

能把CL模块与其它ILE高级语言过程或模块连编成程序。

       CL程序和过程能用于多种应用开发中,下面是些例子:

对交互应用的用户提供一个接口,通过它用户请求应用程序功能而不必了解所用的命令,这就使工作站用户作业变得很容易操作且减少由于进入命令产生错误的机会。

              在应用程序中使用变量(例如:日期、时间或外部指针)来控制操作。规定应用

程序使用的库列表,这就保证了无论何时运行应用程序都能完成预定操作。

为系统操作员提供预定的例程,例如启动子系统,提供文件备份。它能减少操作员频繁使用命令的数量,保证系统操作的一致性。

       由系统提供的大多数命令都能用在CL程序或过程中,有些命令只能用在程序或过程中不能单个使用,这些命令包括:

              逻辑控制命令:根据已存在的条件控制操作。

              数据操作:提供与工作站用户通讯的方式。

              程序或过程给工作站用户发送信息的命令。

              接收信息的命令,它在程序和过程之间提供正常的通讯,指出错误及例外条件。

              使用变量或参数在程序或过程的命令之间或在程序和过程之间传递信息。

              调用其它过程。(仅能从命令行或批作业流中调用程序)

       使用CL程序或过程,应用程序对某个功能可设计各自的程序或过程或CL程序或控制在应用程序中运行哪个程序或过程,应用程序由CL程序或其它HLL程序或过程组成,在这类应用程序,CL程序或过程用于:

              确定运行应用程序中的哪个程序或过程。

              提供其它HLL语言不能完成的功能。

              提供与应用程序用户的接口。

       CL程序或过程提供给应用程序用户很灵活的选择各种操作及运行必须过程的方法。

 

1.3  命令定义

    命令定义允许系统用户建立适合特别的应用需求的命令。这些命令与系统命令很类似。

    系统中的每个命令都有一个命令定义和命令处理程序(CPP),命令定义定义这个命令,其中包括:

              命令名

              CPP

              命令中有效的参数及值

              有效性检查信息,系统可用它来检查命令的有效性

              如果要命令提示,给出提示的说明内容

              联机帮助信息

       CPP是命令进入时调用的程序,这时系统对命令本身进行有效性检查,不检查传给它的参数是否有效。

       命令定义功能用于:

              在要保持一个一致接口时,为系统用户建立一个唯一的命令。

              CL命令定义一个交互对话以满足系统用户的要求,这个功能可包括不同的参

        数缺省值。这样不用对某些参数输入值即可执行命令,对这个参数也可定义常量

值。

        IBM提供的命令是不能修改的。

 

       有关命令定义详细的内容,请看第九章。

 

1.4  菜单

       系统提供了大量的菜单,允许用户只要选择菜单选项就能完成很多功能。用菜单来完成系统任务有很多好处:

              用户不用了解CL命令和命令语法

              大大减少输入量及产生错误的机会

在“应用显示程序设计”一书中有建立菜单的详细信息。

 

1.5  目标和库

       一个目标是一个有名的存储空间。它由一组说明其属性的内容和一些数据组成。目标要占有一定的存储空间,能完成某个操作。目标的属性包括名字、类型、大小、生成目期、以及生成它的用户给出的一些说明。目标的值是存储在目标中信息的集合。例如,程序的值就是组成程序的编码,文件的值是组成文件记录的集合。目标的概念就是给出一个简单的术语,能用它来引用存在系统中的不同项目,而不用管这些项目到底是什么。

 

1.5.1  目标

       大多数CL命令所完成的功能都是应用于目标的。一些命令能用于所有类型的目标而有一些仅能用于特别类型的目标。系统支持规定的目标类型,某些类型与大多数数据处理系统相类似。例如:

       文件、程序、命令、库、队列、模块、服务程序

而有些则有很大不同,例如:

       用户配置文件、作业描述、系统描述、设备描述

不同类型的目标有不同的操作属性,这些不同使每种类型都是唯一的。例如,由于文件是有数据的目标,它的操作属性就不同于包括指令的程序。

       每个目标都有一个名字,目标名和目标类型用来标识这个目标。目标名是由建立目标的用户分配的,目标类型是由建立这个目标所用的命令确定的。例如,已生成了一个程序名为OEUPDT,那么总用这个名来引用这个程序,系统用目标名(OEUPDT)和类型(PGM)来查找目标并完成操作。几个目标可以有相同的名字,但它们必须有不同的类型或存在不同的库中,系统依据目标类型来维护完整性以避免造成功能上的混乱。例如,CALL命令要调用一个程序目标来运行,如果规定CALL和一个文件名,那么命令要出错。

 

1.5.2 

       一个库用来把相关目标组成一组,且由名字来查找使用的目标。这样一个库是一组目标的目录。也可用库来把目标组成不同意义上的集合,例如,可以根据安全需要、备份、或处理来把目标分组。一个库中有多少目标,系统中能有多少个库仅由存储总量来限定,但不能多于8000以便保证完成保存操作。

       目标由库分组是逻辑上的分组。当建立库时,可以规定库所在的用户辅存池(ASP)。在一个库中建立的所有目标都与库在同一个ASP中。库中的目标必须物理的一个挨一个。库中目标的大少不受存储中临近空间总数的限制,系统会为目标找到所需的空间。多数类型的目标可以在生成时存在一个库中。目标放在库中时要分配给它一个公共授权,这个授权是在用CRTLIB生成库时由CRTAUT参数来规定的。多数类型的目标可从一个库移到另一个库,但一个目标不能同时在多个库中,当把目标移到不同库时,目标在存储中实际上不移动,只是用新的库来分配它,大多数类型的目标也能改名和复制。

       库名用来给出目标名的另一级标识。如前所述,目标是由名字和类型来标识的,库名进一步限定目标名,目标名和库名放在一起组成目标的限定名,限定名告诉系统目标的名字和它所在的库名,下图给出两个库及库中目标的限定名:

 

 

 

    库:OELIB                  限定的目标名             库:PAYLIB

 


ORDFIL

OELIB/ORDFIL

OELIB/OEUPDT

OELIB/CUSTMAST

 

EMPMAST

PAYPGM

 

OEUPDT

 

PAYLIB/EMPMAST

PAYLIB/PAYPGM

PAYLIB/PAYHIST

PAYHIST

CUSTMAST

 

 

 

 

 


       同名及同类型的两 个目标可以放在不同的库中,两个同名目标要放在同一库中,它们的类型一定要不同,这种规定让程序用目标名引用目标来处理不同的目标。(目标名相同但所在库不同)。这样不用修改程序本身来达到运行程序的目的。而生成新目标的工作站用户也不需要考虑在其它库中是否有同名目标。例如,在下图中,名为MONTHUPD的文件要加到库OELIB中,但不能放到ACCTLIB中,这是因为在此库中已有名为MONTHUPD、类型为*FILE的目标了。

 

 

 

              库:OELIB                   库:ACCTLIB

 

 


ORDFIL

file

OEUPDT

(program)

CUSTMAST

   (file)

ORDFIL

  (file)

BILLING

(program)

MONTHUPD

    (file)

 MONTHUPD

   (新文件)

YES

NO

 

 

 

 

 

 

 

 

 

 

 

 

 


       库中的目标是由目标名和类型标识的,多数CL命令仅适合于一种类型,因此不一定要明确说明目标类型,对于适用于多种目标类型的命令,必须明确说明类型。

 

1.5.3  用库查找目标

       目标名可以是限定名也可以是仅目标名本身。如果用限定名,系统要在规定的库中找目标,如果仅用目标名,系统要检索库列表,直到找到此目标的第一次出现或检索完库列表中的所有库却没有找到给定的目标。要检索的库以及它们被检索的顺序,是由库列表决定的,系统在作业启动时为它建立一个初始库列表。

       注:库列表的初值及它的用户部分,可在系统值QSYSLIBLQUSRLIBL中找到。这些系统值可由作业描述规定的值来取代。

       一个库列表有四部分。第一部分是系统部分,它是最早检索的一些库。这部分规定了所有在系统中运行的作业使用的库。在安装系统时,这部分由QSYSQUSRSYSQHLPSYSQSYS2组成。

       第二部分是产品库。它是由系统在用户运行命令或菜单时修改的。根据完成功能的不同,产品库在作业运行时也各不相同。

    第三部分是当前库。它是建立目标时所用的缺省库。用户可用CL命令规定作业的当前库。

       第四部分是用户部分。它包括应用程序完成功能所使用的库。当安装系统时,它包括QGPLQTEMP,每个作业都有自己的QTEMP,其它作业看不到,当作业结束时,清空QTEMP库。

       当系统有多个用户定义的库时,不同作业的用户部分都不相同,下图给出库列表的一个例子:

 

 

 

系统部分

 

产品库1

产品库2

当前库

 

用户部分

检索顺序

QSYS

QUSRSYS

QHCPSYS

QPDA

QRPG

OELIB

QELIB

QGPL

QTEMP

 

 

 

       仅用目标名和库列表来检索目标能使AS/400系统更易使用和更灵活。可给每个作业设计一个库列表以保证不用限定名即可找到正确的目标。这样做的好处是:

·       容易测试应用程序。当测试程序时可生成有样板数据的库。库中的目标名与正常产品库中的名字相同。有测试目标的库在库列表中放在正常产品库的前面,当程序测试好后,从库列表中移出这个库,程序用放在产品库中的目标操作,而不用修改程序中的目标名。

·       灵活使用系统中的库。当处理需要修改时,已有的库可能需要分成多个库有助于容易识别系统中的目标。这种修改不用改程序中的目标名,仅用修改作业使用的库列表。

·       能使不同用户使用同一个应用程序来处理不同的目标,每个用户或某组用户可以建立不同的库,每个用户作业的库列表保证使用到正确的目标。

·       同一应用程序处理不同的数据。例如,可能有多个公司或一组公司要分开处理,那么每个公司或一组公司有一个库,这样就可以把数据分开来放置。

    由于有这些优点, 所以在使用已有目标时,不常用限定名,但此时要考虑可能出现的安全问题。例如,不用限定名调一个程序时,可能会由于某人修改了库列表而调用到了不同版本的程序,这时会出错。

 

1.6  信息

       信息是用户、程序及过程与另外的用户、程序及过程通讯发出的消息。多数数据处理系统在系统和操作员之间提供通讯来处理错误及操作期间发生的条件。OS/400也有信息处理功能支持程序和系统用户之间、程序之间、程序中的过程之间以及系统用户之间的双路通讯,它支持两类信息:

              立即信息:它是由程序或系统用户生成的。生成后即发送,不留在系统中。

              预先定义的信息:在使用之前已建立,建立时放在信息文件中,当使用时从这个文件中取出来。

       由于信息做通讯用,在开发应用程序时要考虑它。下面的信息处理概念对应用程序开发是很重要的。

       信息在信息文件中定义,它放在使用它的程序外部,在送信息时能在信息说明中给出不同的内容。这样,在信息修改时不用修改程序。这就允许同一程序使用和与不同语言传送信息的信息文件。

       信息是从信息队列发送和接收的,它是系统中独立的目标。送往队列的信息能保存在队列里直到它被程序或工作站用户明确的接收到。

       程序也能给需要程序信息的用户发送信息而不管用户是否在工作站注册,信息不必送往一个特别的设备。不同工作站可用一个程序而不用修改。

 

1.6.1  信息描述

       信息描述为OS/400定义信息,它包括信息正文和有关替换变量的内容,以及由发送信息者提供的变量数据。信息描述存在信息文件中,每个描述在信息文件中都有一个唯一的标识,当发送信息时,信息文件和信息标识告诉系统使用哪个信息描述。

 

1.6.2  信息队列

       当信息发送给过程、程序或一个系统用户时,它放在与之有关的信息队列中。程序及过程及用户用队列接收信息且能看到它。OS/400为下列目标提供信息队列:

              系统中的每个工作站

              在系统中注册的每个用户

              系统操作员

              系统历史日志

可为应用程序生成另外的信息队列,送往信息队列的信息可以保留,所以接收到信息后不一定要立即处理。

 

1.7  测试功能

       系统包括一些在程序运行时让程序员得到操作权的功能。这些功能用来设置一些不打算完成的操作。测试功能可用在工作站的批作业和交互作业。这时,要测试的程序必须放在测试环境中,这叫做调试方式。

       测试功能主要针对找错。这比在源语句中找错要困难。通常,错误经常在产生的输出不是要求的结果时才表现出来。要找到这些错误,需要在某些点(叫做断点)把程序停下来, 检查程序变量内容是否正确, 在程序继续进行之前也要修改这些变量。使用测试功能,用户不需知道机器语言指令,也不用了解程序中有哪些特别的指令。

OS/400测试功能让你做:

       在断点停止运行程序

       显示断点时的变量内容,在程序继续运行前修改变量值。说细内容请看第十
阅读(1563) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~