AS400服务程序总结
1、服务程序的创建和调用过程
1.1生成module
1.2编写BND文件确定输出接口
1.3生成服务程序
1.3.运行调用程序时,将服务程序导入到作业内存区active group,常驻内存
2、结合CPU进行总结
2.1
硬盘中代码库包含:module:BND文件:CLP程序:服务程序M:调用程序*PGM
代码库中的文件均已经过编译,调用程序编译时会包含服务程序的符号链接,按地址偏移量进行取值
当系统执行调用程序*PGM首次调用或涉及到到相应的服务程序时,CPU会将服务程序加入到active group中,此后,在此作业活跃期间,该服务程序将一直存在于active group中常驻内存。
在作业活跃期间,硬盘内容与active group并无关联,此时变动服务程序的module或者修改BND文件均不会影响内存区的服务程序
2.2
当作业条退出重新启动时,CPU在这个过程会清空此作业占用的内存空间,相应的,作业启动之后调用程序*PGM在涉及到服务程序时,CPU会重新导入服务程序至active group。
若在导入之前修改硬盘上服务程序的内容,譬如说改变了BND输出接口的顺序,则调用程序*PGM在调用时依旧按自身包含的之前的服务程序符号链接亦或是偏移地址进行调用,会出现逻辑错误,但如果参数吻合,并不会出现运行错误。
3、BND文件编写方式
服务程序在作业活跃期间是常驻内存的,所有涉及到此服务程序的调用程序都会使用该常驻内存的服务程序
BND文件确定输出接口时分两类
3.1根据BND文件的export procedure、data item的名称、数量、顺序决定唯一的signature,同时使用LEVEL CHECK(*YES/*NO)进行signature的检查。
在首次绑定时调用程序会保留原始的signature,当*PGM被调用的时候,PGM会激活Service program(即把Service program加入到active group中),在激活的过程中会比较*PGM中的signature值与*SRVPGM的signature值是否一致。
3.2、自定义signature。指明signature值为固定,不进行check。
以上两种方式都可以解决signature兼容性问题,但都存在一定问题。
1、对于自动生成signature的方式,当作业退出释放掉内存,常驻内存的服务程序被清空,如重启作业,当运行调用PGM时,系统会从硬盘重新导入服务程序至常驻内存块。如果在系统导入服务程序之前修改了BND文件,改变了输出接口的顺序,由于是直接导入,调用PGM在进行signature CHECK时会判明signature不一致,会导致运行出错
2、对于自定义signature,当作业退出释放掉内存,常驻内存的服务程序被清空,如重启作业,当运行调用PGM时,系统会从硬盘重新导入服务程序至常驻内存块。如果在系统导入服务程序之前修改了BND文件,改变了输出接口的顺序,由于未进行signature判断,系统不会报错,但因为是直接导入,调用PGM会直接根据之前的地址进行寻址,但由于顺序(偏移地址)已发生变化,实际调用的MODULE可能已经不是程序想要的,程序运行没有问题,但是结果可能并不符合逻辑。
以上两种方式的BND文件定义,在需要添加新的输出接口时,必须保证新追加的export procedure、data item要放export list的最后面。

浙公网安备 33010602011771号