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的最后面。

AS400服务程序总结的更多相关文章

  1. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

  2. C# 服务程序 - 调试服务

    前言:本篇文章环境是VS2015,win10.如果有任何的差别,请注意 1. 创建服务程序 1)用VC创建服务程序,叫做 MyTestWindowsService 创建完成之后,可以看到 2)添加安装 ...

  3. 使用Python写Windows Service服务程序

    1.背景 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32 ...

  4. WIN32服务程序(三):完整的服务程序实例

    前面我们所讲的“服务程序”,更准确地说是服务控制程序,例如我们通过输入应用的路径,将一个应用程序添加到服务控制管理器.一个服务控制程序可以将一个程序添加到服务控制管理器中,并控制它的运行.停止和删除等 ...

  5. WIN32服务程序(二):卸载服务

    卸载服务的过程是这样的,用OpenSCManager打开SCM,使用OpenService打开准备卸载的服务,通过QueryServiceStatus查询该服务的状态是否停止,如果否,则先停止该服务C ...

  6. 云服务程序在启动的时候执行Powershell脚本

    如果在云服务程序启动时候,需要执行Powershell脚本,我们需要将脚本嵌入到程序中,并且编写一个cmd来执行这个脚本,具体如下: 1.编写测试的Powershell脚本:每隔10分钟 检测dns ...

  7. C#写Windows Service(windows服务程序)

    背景:        要学习使用一个新东西,我们必须知道他是个什么东西.对于我们此次研究的windows服务来说,他又是个什么东西,其实也没有什么高深的了. windows service概述: 一个 ...

  8. 关于开发Windows服务程序容易搞混的地方!

    在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的) ...

  9. Delphi开发Windows服务程序

    开发步骤: 1.New->Other->Service Application 2.现在一个服务程序的框架已经搭起来了 打开Service1窗口,有几个属性说明一下: AllowPause ...

随机推荐

  1. 并不对劲的bzoj1758:p4292:[WC2010]重建计划

    题目大意 \(n\)(\(n\leq10^5\))个点的一棵树,有边权\(w\),给定\(l,r\),求边数在\([l,r]\)中的路径的平均边权的最大值 题解 二分答案,判断时将边权变成\(w-mi ...

  2. Android应用开发完全退出程序的通用方法

    在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个"退出程序"菜单,这里就要完全退出程序了,所以今天给大家分享的是Android应 ...

  3. Runnable、Callable、Future和FutureTask之二:源码解析

    一.Callable与Future类图 1.类图 许多任务实际上都是存在延迟的计算,对于这些任务,Callable是一种更好的抽象:它会返回一个值,并可能抛出一个异常.Callable接口: V ca ...

  4. input type=password 浏览器会自动填充密码的问题

    解决办法是在form上或input上添加autoComplete="off"这个属性. form表单的属性如下所示: 但是这个解决方案在谷歌和火狐上均有bug,下面来一个一个解决. ...

  5. HTTP node静态资源请求加载demo

    MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串组成, ...

  6. Node.js之网游服务器实践

    此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 随着Node.js的不断发展与壮大,应用范围也越来越广泛,从传统的企业应用,到互联网使用,再到云计算的发展, ...

  7. float以后设置的小细节

    先看看下面这段css代码,是不是很完美?没错? #pageBodyMain .articleList a: after { content: ""; clear: both; di ...

  8. Codeforces - Gym102028 - 2018 Jiaozuo Regional Contest

    http://codeforces.com/gym/102028 A. Xu Xiake in Henan Province 看起来像水题.乱搞一下,还真是. #include<bits/std ...

  9. <TLE>奇偶剪枝hdoj1010

    (奇偶剪枝)转自百度百科,讲的非常棒: http://baike.baidu.com/link?url=3g5bW7LszRVOVvFDFp6cL0ZZnAaOLUdpaNjc2leHoxkKU9Eh ...

  10. P5110 块速递推

    传送门 为啥我就没看出来有循环节呢-- 打表可得,这个数列是有循环节的,循环节为\(10^9+6\),然后分块预处理,即取\(k=sqrt(10^9+6)\),然后分别预处理出转移矩阵\(A\)的\( ...