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的最后面。
AS400服务程序总结的更多相关文章
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- C# 服务程序 - 调试服务
前言:本篇文章环境是VS2015,win10.如果有任何的差别,请注意 1. 创建服务程序 1)用VC创建服务程序,叫做 MyTestWindowsService 创建完成之后,可以看到 2)添加安装 ...
- 使用Python写Windows Service服务程序
1.背景 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32 ...
- WIN32服务程序(三):完整的服务程序实例
前面我们所讲的“服务程序”,更准确地说是服务控制程序,例如我们通过输入应用的路径,将一个应用程序添加到服务控制管理器.一个服务控制程序可以将一个程序添加到服务控制管理器中,并控制它的运行.停止和删除等 ...
- WIN32服务程序(二):卸载服务
卸载服务的过程是这样的,用OpenSCManager打开SCM,使用OpenService打开准备卸载的服务,通过QueryServiceStatus查询该服务的状态是否停止,如果否,则先停止该服务C ...
- 云服务程序在启动的时候执行Powershell脚本
如果在云服务程序启动时候,需要执行Powershell脚本,我们需要将脚本嵌入到程序中,并且编写一个cmd来执行这个脚本,具体如下: 1.编写测试的Powershell脚本:每隔10分钟 检测dns ...
- C#写Windows Service(windows服务程序)
背景: 要学习使用一个新东西,我们必须知道他是个什么东西.对于我们此次研究的windows服务来说,他又是个什么东西,其实也没有什么高深的了. windows service概述: 一个 ...
- 关于开发Windows服务程序容易搞混的地方!
在开发Windows服务程序时,我们一般需要添加安装程序,即:serviceInstaller,里面有几个关于名称属性,你都搞明白了吗? 1.Description:表示服务说明(描述服务是干什么的) ...
- Delphi开发Windows服务程序
开发步骤: 1.New->Other->Service Application 2.现在一个服务程序的框架已经搭起来了 打开Service1窗口,有几个属性说明一下: AllowPause ...
随机推荐
- BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组
BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一 ...
- margin和padidng的使用
何时应当使用margin:需要在border外侧添加空白时.空白处不需要背景(色)时.上下相连的两个盒子之间的空白,需要相互抵消时.如15px + 20px的margin,将得到20px的空白. 何时 ...
- 【旧文章搬运】Windows内核常见数据结构(驱动相关)
原文发表于百度空间,2008-7-24========================================================================== 这些是驱动中 ...
- USACO 5.4 tour的dp解法
题意:有n个点排成序列,两个人甲乙从1出发,到达n,中间的点不允许到达两次,只能从左向右走,问最多两人访问多少点. (膜大佬) 解: dp f(i, j) 表示甲到了i点,乙到了j点,两人最多访问了多 ...
- 任务35:JWT 认证授权介绍
任务35:JWT 认证授权介绍 应用场景主要是移动端或者PC端前后分离的场景 直接对客户端API的请求 例如访问admin/Index 没有权限返回403. 需要客户端手动的再发动请求,这是一个拿to ...
- Swift3的闭包相关
几乎所有编程语言里都有简化的函数写法,c语言里是宏函数(#define),c++里是内联函数(inline,顺带一说,inline是内联的意思,在html里display里指定的inline也是内联的 ...
- Codeforces - 1033C - Permutation Game - 简单dp - 简单数论
https://codeforces.com/problemset/problem/1033/C 一开始觉得自己的答案会TLE,但是吸取徐州赛区的经验去莽了一发. 其实因为下面这个公式是 $O(nlo ...
- Codeforces - 773A - Success Rate - 二分 - 简单数论
https://codeforces.com/problemset/problem/773/A 一开始二分枚举d,使得(x+d)/(y+d)>=p/q&&x/(y+d)<= ...
- Windows 下openssl安装与配置
编译thirift失败 网上方法很多,大部分是针对32位机的,自己的电脑因为是win7,64位,摸索了很久才安装成功. 环境 WIN7, 64位, vs2005 下载ActivePerl 配置过程中需 ...
- HDU6031:Innumerable Ancestors(二分+倍增数组)
传送门 题意 n个点的图,有n-1条无向边,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得x和y的lca深度最大 分析 这道题如果直接暴力做,复杂度为O(mk1k2* ...