免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5864 | 回复: 11
打印 上一主题 下一主题

瞎侃ILE模式下两种绑定方式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-06 16:44 |只看该作者 |倒序浏览
一 绑定的基本概念(看图说话)

CRTPGM  PGM(PGM1)  MODULE(MOD1 MOD2)  BNDSRVPGM(SRV0)

By copy :创建PGM1的时候,MOD1,MOD2对象被copy到PGM1中。PGM1内部可以不经过地址转换,直接访问MOD1,MOD2。这种绑定方式就叫做by copy。

By reference :创建PGM1的时候,SRV0并不包含在PGM1中,SRV0和PGM1是两个独立的对象。但是会在PGM1和SRV0直接建立一个符号链接,把他们联系起来。当PGM1使用到SRV0的时候,编译器会把这个符号链接转换成SRV0的物理地址,这样PGM1就可以访问SRV0了。这种绑定方式叫做by reference。

二 绑定的过程。
By copy
编译期:CRTPGM的时候,PGM1和MOD1之间的物理绑定。二者成为了一个整体,完成绑定。

By reference
编译期:PGM1与SRV0之间建立符号链接。
运行期: 当PGM1被调用的时候,系统会根据PGM1和SRV0之间的符号链接,转换成SRV0的物理地址,通过SRV0的物理地址找到SRV0并把SRV0加在到activation group中,完成绑定。
注意:by reference方式在运行期加载service program是发生在PGM1被调用的时候。而不是PGM1调用SRV0的时候。当PGM1调用SRV0的时候,SRV0已经完成了绑定。从这个角度来说,by reference的执行速度与by copy是一样的。
总的来说,bound by reference的运行效率介于动态调用和bound by copy之间。

三 绑定的规则
使用by copy的情况有3种,如下:
1.
MODULE parameter上指定的module,都是以by copy的方式绑定。这个没什么好说的。
例如:CRTPGM  PGM(PGM1)  MODULE(MOD1 MOD2)  BNDSRVPGM(SRV0)

2.Binding Directory 里的module,并且这个module为unresolved import提供与之匹配的export。
例如:Binding Directory :BD1 有如下 4个entry                        
Object                         Type                         Library                          
M11                                *MODULE                 *LIBL  
M22                                *MODULE                 *LIBL
S1                                 *SRVPGM                 *LIBL  
S2                                *SRVPGM                 *LIBL  

PGM2:
H BNDDIR(‘BD1’)
……
C   CALLB  ‘M11’
……
此时,PGM2需要引用(unresolved import)M11,而BNDDIR刚好提供了M11(export),所以M11也以by copy的方式绑定到PGM2中。虽然BNNDIR中还包含一个M22,但是因为PGM2不需要M22,所以M22被忽视,不会被绑定到PGM2中。

3.Binding Directory里的module,虽然这个module并不为unresolved import提供export(比如下面的M3),但是这个module的export却出现在BND文件的*current block中。那么这个module也是作为by copy的方式绑定的。说的比较绕嘴,难理解,举个例子吧:
例如:Binding Directory :BD2 有如下 2个entry                        
Object                         Type                         Library                          
M2                                 *MODULE                 *LIBL
M3                                 *MODULE                 *LIBL

Module M1: imports P2
Module M2: exports P2
Module M3: exports P3

Binder language S1: STRPGMEXP PGMLVL(*CURRENT)
EXPORT P3
ENDPGMEXP

CRTSRVPGM  SRVPGM(SRV1)  MODULE(M1) SRCFILE(S1) SRCMBR(S1) BNDDIR(BD2)
首先M1作为MODULE的参数,肯定是by copy方式绑定的(根据绑定规则1)。M1有一个unresolved import:P2,而binding directory:BD2里的M2刚好提供export P2。所以M2也是以by copy的方式绑定的(根据绑定规则2).而M3,不属于以上任何一种情况,但是M3的export P3,却是BND文件里当前(*current)的输出接口,是创建service program必须要使用的,所以虽然M3不属于前两个规则的任何一个,但是也要以by copy的方式绑定。

规则3简单点说,创建service program的时候,BND文件(binder language)里需要的exprot ,此export所属的module总是以by copy的方式绑定。

By reference有2种方式,如下:
1.
BNDSRVPGM parameter上指定的service program,都是以by reference的方式绑定。这个也没什么好说的。
例如:CRTPGM  PGM(PGM1)  MODULE(MOD1 MOD2)  BNDSRVPGM(SRV0)

2.Binding Directory 里的service program,并且这个service program里的module为unresolved import提供与之匹配的export。这个也不多说了。

论坛徽章:
0
2 [报告]
发表于 2011-07-06 16:49 |只看该作者
其实懂不懂绑定方式,对编程没有太大影响。不了解的话也不耽误编程。

新接触ILE编程模式的童鞋可以参考参考,有助于理解ILE的开发模式。

论坛徽章:
0
3 [报告]
发表于 2011-10-21 15:45 |只看该作者
很好的教材!
顶~

论坛徽章:
0
4 [报告]
发表于 2011-10-21 16:33 |只看该作者
可惜都木有人看,你是第一个…………

论坛徽章:
0
5 [报告]
发表于 2011-10-22 00:03 |只看该作者
本帖最后由 insmile 于 2011-10-22 00:05 编辑

木有用到这么复杂的东西,,,都是call了事。。。

这些绑来绑去的程序,个人以为维护性不好,别人修改一个模块以后,万一没有开发文档啥的,就难搞了,实际上很多公用模块都是交叉使用的,太混乱了

论坛徽章:
0
6 [报告]
发表于 2011-10-22 09:03 |只看该作者
回复 5# insmile


    在ILE开发模式下,绑定是一个没法回避的话题。
    绑定可以提高效率,但是代码写起来,部署起来是要麻烦一点。没办法,没有一个两全齐美的方式。{:3_190:}

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
7 [报告]
发表于 2011-10-22 15:02 |只看该作者
我来顶你了哈~~

论坛徽章:
0
8 [报告]
发表于 2011-12-18 17:13 |只看该作者
受益匪浅啊

论坛徽章:
0
9 [报告]
发表于 2012-04-21 21:41 |只看该作者
回复 1# niuhua77

请问,直接用CRTSRVPGM生成一个服务程序MYSRVPGM,将所需的MODULE放进去,然后CRTBNDDIR生成一个MYBNDDIR,将服务程序MYSRVPGM加到MYBNDDIR中,CRTPGM  PGM(MYLIB/MYPGM)  MODULE(MYLIB/MYPGM) BNDDIR(MYLIB/MYBNDDIR)就可以运行了
BNDDIR与.bnd的文件是什么关系呢?

   

论坛徽章:
0
10 [报告]
发表于 2012-04-23 20:23 |只看该作者
回复 9# 燕麦玉米粥


    参考其他的帖子吧。你问的问题和本主题无关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP