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. servlet的<url-pattern>

    ① 完全匹配 <url-pattern>/test/list.do</url-pattern> ② 路径匹配 <url-pattern>/*</url-pat ...

  2. 扩展KMP(占位)

    先放代码. #include<cstdio> #include<iostream> #include<cstring> using namespace std; ; ...

  3. unity3d 公告板

    Unity 自带具有一个平面的原始对象,但一个简单的平面在2D游戏或GUI可能是有用的,在任何情况下作出一个好的开始例子.一个最小的平面包含四个顶点,界定两个三角形的边角. 第一件事就是设置顶点数组. ...

  4. this调用属性

    示例: class Person{ private String name; private int age; public Person(String name,int age){ this.nam ...

  5. Table View Programming Guide for iOS---(七)---Managing Selections

    Managing Selections 管理选择 When users tap a row of a table view, usually something happens as a result ...

  6. k8s-helm-二十四

    一.介绍 Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.可以把Helm比作CentOS的yum工具. yum不光要解决包之间的依赖关系,还要提供具体的程 ...

  7. 数据库MySQL技术-基础知识

    数据库技术: SQL,关系数据库标准 注意: 环境编码:  cmd客户端是固定的gbk编码  而php网页中,是该网页文件的编码(现在主流都是utf8). mysql> set names gb ...

  8. Thrift 入门

    1下载 https://thrift.apache.org/download 或 Apache Thrift Archive 下载编译好的release可执行文件: Thrift compiler f ...

  9. (5)Javascript的表达式

    Javascript的表达式 表达式是一个语句的集合,计算结果是个单一值,然后该结果被javascript归入下列数据类型之一:布尔.数字.字符串.对象等.表达式是具有一定的值,用操作符把常量和变量连 ...

  10. ES6之箭头函数深入理解

    相对于普通函数的区别 新的书写方式 this 的改变 不能当构造函数 没有 prototype 属性 没有 arguments 对象 新的书写方式 书写方式很简单!直接看下图, 常规方式写一个函数 c ...