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 ...
随机推荐
- Cocos2d-X对常用Object-C特性的替换
平台的转换,总是让我们不自觉的去寻找两者的相同处,不过Cocos2d-X的确对很多Object-C的特性进行了模仿性质的封装,使熟悉Object-C的人能够在其中看到很多类似的概念而感到亲切. ...
- Table View Programming Guide for iOS---(四)---Navigating a Data Hierarchy with Table Views
Navigating a Data Hierarchy with Table Views 导航数据表视图层次 A common use of table views—and one to which ...
- 洛谷P3825 [NOI2017]游戏(2-SAT)
传送门 果然图论的题永远建图最麻烦……看着题解代码的建图过程真的很珂怕…… 先不考虑地图$x$,那么每一个地图都只能用两种赛车,于是我们可以用2-SAT来搞,用$i$表示这个地图能用的第一辆车,$i' ...
- Shell 根据名称杀掉进程
代码如下: #!/bin/sh # 从命令行读取进程名称 NAME=$ echo "---------------" echo 'killing ->' $NAME # 过滤 ...
- AtCoder Grand Contest 003 D - Anticube
题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_d 题目大意: 给定\(n\)个数\(s_i\),要求从中选出尽可能多的数,满足任意两个数之积 ...
- April Fools Contest 2017 B
Description Programmers' kids solve this riddle in 5-10 minutes. How fast can you do it? Input The i ...
- Eclipse 运行内存不足情况
在debug或者run 时 在VM arguments 处添加 -Xms512m -Xmx512m
- 491 Increasing Subsequences 递增子序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2.示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, ...
- oracle 触发器,序列,索引
oracle 触发器,序列,索引 --1,触发器 ----trigger /*触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的数据, 当一个定义了特定类型触发器的基表执行插入.修改或删除 ...
- Outlook读取奇妙清单Wunderlist日历失败的解决办法
错误: Outlook.com日历订阅奇妙清单的日历链接时报错 This calendar wasn't updated because of a problem with the publisher ...