IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

GETMAIN / FREEMAIN与存储OOBAIN /存储发布


IBM大型机论坛 -> PL / I& Assembler
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表于:星期三二月01,2017 1:45上午
引用回复

在CICS论坛中,该文章提到了GETMAIN和FREEMAIN宏的使用,然后继续声称STORAGE宏更快。这是个谎言。

以下程序产生了这些消息-

所需存储时间比一般/普通多10%
GETMTIME = 6.540824,STORTIME = 7.228047

码:
最佳技术交流
         USING *,12
         SAVE  (14,12),,*
         LR    12,15
         LA    15,SAVEAREA
         ST    13,4(,15)
         ST    15,8(,13)
         LR    13,15
         TIMEUSED STORADR = GETMSTRT,CPU = MIC,LINKAGE = SYSTEM
         L     2,=A(64*1024)
         LA    3,128
GETMLOOP GETMAIN RU,LV =(3)
         MVC   0(4,1),GETMHDR
         ST    1,GETMHDR
         BCT   2,GETMLOOP
自由循环ICM   1,B'1111',GETMHDR
         BZ    GETTIME
         MVC   GETMHDR,0(1)
         FREEMAIN RU,LV=(3),A=(1)
         B     FREELOOP
GETTIME TIMEUSED STORADR = GETMEND,CPU = MIC,LINKAGE = SYSTEM
         L     2,=A(64*1024)
目标   储存空间,长度=(3)
         MVC   0(4,1),GETMHDR
         ST    1,GETMHDR
         BCT   2,OBTGET
过时的  ICM   1,B'1111',GETMHDR
         BZ    OBTTIME
         MVC   GETMHDR,0(1)
         存储释放,长度=(3),ADDR=(1)
         B     OBTFREE
OBTTIME TIMEUSED STORADR = OBTEND,CPU = MIC,LINKAGE = SYSTEM
         LG    1,GETMEND
         SG    1,GETMSTRT
         STG   1,GETMTIME
         LG    0,OBTEND
         SG    0,STORSTRT
         STG   0,STORTIME
         SGR   1,0
         SR    0,0
         M     0,=F'100'
         D     0,GETMTIME+4
         ST    1,PERCENT
         CVD   1,DWORK
         ED    PCT,DWORK+6
         L     1,GETMTIME+4
         CVD   1,DWORK
* 3 4 5 6 7
* NNNNNNNNN
         ED    GETMD,DWORK+3
         L     1,STORTIME+4
         CVD   1,DWORK
         ED    储存,DWORK+3
         OPEN  (PRINT,OUTPUT)
         PUT   PRINT,MSG
         PUT   PRINT,MSG2
         CLOSE 打印
         L     13,4(,13)
         RETURN (14,12),RC=0
保存AREA DC    9D'0'
GETMSTRT DC    FD'0'
GETMEND  DC    0FD'0'
STORSTRT DC    FD'0'
OBTEND   DC    FD'0'
GETMTIME DC    FD'0'
STORTIME DC    FD'0'
作品    DC    PL8'0'
百分  DC    F'0'
GETMHDR  DC    A(*-*)
打印    DCB   DSORG = PS,MACRF = PM,DDNAME = SYSPRINT,RECFM = VBA,LRECL = 126
         DC    0D'0'
         LTORG ,
味精      DC    AL2(MSGL,0),C'需要存储'
PCT      DC   0C'NNN',C'',X'202120',C'%比GETMAIN / F多的CPU时间>
               REEMAIN'
味精L     EQU   *-MSG
味精2     DC    AL2(MSG2L,0),C' GETMTIME ='
GETMD    DC   0C'NNN.NNNNNN',C'',X'202120',C'。',6X'20',C','
         DC    C'STORTIME ='
储存    DC   0C'NNN.NNNNNN',C'',X'202120',C'。',6X'20'
味精2L    均衡器   *-MSG2
         END   GETMTEST
该程序在Hercules(而不是真正的硬件)下运行。在普通的z / Arcitecture机器上运行它会很有趣,尽管我怀疑有人会打扰。
回到顶部
查看用户资料 发送私信
UmeySan

活跃的成员


已加入:2006年8月22日
职位:771
地点:德国

发布发表:2017年2月1日星期三下午5:46
引用回复

@史蒂夫

就个人而言,随着今天的那些mi,我不会或多或少浪费时间。

此致UmeySan

从IBM:

z / OS MVS编程:授权汇编程序服务指南
SA22-7608-17

是否使用GETMAIN或STORAGE OBTAIN来获取虚拟存储以及使用FREEMAIN或STORAGE RELEASE来释放存储的决定取决于几个条件:

程序的地址空间控制(ASC)模式。如果它处于AR模式,请使用STORAGE宏。

包含程序要获取或释放的存储的地址空间。如果存储位于主存储区以外的地址空间中,请使用STORAGE宏。

程序是否需要宏服务的分支条目或PC堆栈条目。使用GETMAIN或FREEMAIN宏上的分支条目比使用STORAGE宏更困难。因此,您可以使用STORAGE OBTAIN而不是GETMAIN来简化编码,例如,当您的程序:
处于SRB模式
处于交叉存储模式
以启用的,未锁定的任务模式(EUT)FRR运行

分支条目(GETMAIN或FREEMAIN上的BRANCH参数)要求您的程序持有某些锁。存储没有任何锁定要求。

如果您的程序在可以发出FREEMAIN宏的环境中运行(由上面列出的条件指定),则可以使用FREEMAIN释放最初使用STORAGE OBTAIN获得的存储。您也可以使用STORAGE RELEASE释放最初使用GETMAIN获得的存储。
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表:2017年2月1日星期三晚上7:48
引用回复

好吧,当然,您的决定取决于很多事情。

很多时候,决策取决于是否可以采用某种机制来完全避免使用MVS存储管理。例如,我的大多数私人服务功能都要求调用者提供一个较小的工作区(如100或200字节),或者通过最小化寄存器使用量,将调用者提供的寄存器保存区的一部分用作工作区。在这里,有关存储管理的决定将推迟到其他代理!

几年前,我有一个程序(就像我的测试程序一样)分配了成千上万个小存储区,这些存储区在程序结束时成块释放。在测试过程中,该过程似乎需要很长时间,因此我在测试程序中使用TIMEUSED对其进行了检测,发现它使用了将近一分钟的CPU时间!当时我的解决方案是清除私有功能,该功能会在较大的4K存储块中分配很少的存储区域,最后将这些4K块释放为一组。一分钟的CPU时间降到了不到一秒!

几年前,当BAKR指令发布为IBM“标准”子例程进入/退出约定的可能替代品时,我尝试了一下,发现它更糟!经过一番思考,我意识到它在ESA 390中保存了16个32位寄存器和16个32位访问寄存器。在z / Architecture中,它保存了16个64位寄存器和16个32位访问寄存器。感谢IBM,我将坚持使用常规机制!

在1990年代与XPLINK的开发相关的精美记录中,您会注意到没有提到BAKR,这无疑是我在较早的测试中开发的原因。 XPLINK确实指出了“标准”链接约定需要太多的寄存器来保存和恢复,这是我现在在我自己的工作中考虑的事情,尽管这通常会释放少量的寄存器保存区存储以用作工作区。

就在上周,我研究了已经绝望的过时的Burrough B5500,这是1960年代非常创新的机器。讨论使我开始思考与我们现在看到的几乎通用的堆栈体系结构相比,面向寄存器的体系结构,例如System / 360。当时我的想法是,堆栈使用堆栈的一部分作为存储中的伪寄存器,在我看来,这比实际寄存器要慢。现在,我意识到堆栈体系结构没有大量的寄存器,因此可以简化(并因此加快)状态保存(例如在中断或子例程调用中),这可能就是为什么它们如此流行的原因。好吧,只是一个想法。
回到顶部
查看用户资料 发送私信
UmeySan

活跃的成员


已加入:2006年8月22日
职位:771
地点:德国

发布发表:2017年2月8日星期三下午4:16
引用回复

@史蒂夫

非常感谢您提供这些详细的说明。

就像您一样,几年前,IBM取消了有关64bit和z / Arch的一些新说明时,我拍了一些照片,但决定保留我的传统方法。

我认为不需要使用相对较大的目标分支指令
在编程时,例如BRAS / BRXH或ML / DL等乘法/除法
正常的商业应用,尽可能复杂。使用与COBOL中相同的认可技术-高度结构化-设计良好-进行编程。

正如我在您的个人资料中看到的那样,您是一位退休的专业人士。我深深的敬意,您仍然在忙于应用程序开发和系统工程。

我两年前已经退休,现在我又回来了一些有关汇编程序编程的移植项目。我有些上瘾。
特别是当获得可观的收入时。

对我来说,汇编程序并没有像很多年前宣布的那样全部消亡。德国大多数银行仍然有一些程序。

此致UmeySan
回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表:2017年2月8日星期三晚上9:01
引用回复

1990年代,当相关分支指令问世时,我的分析主要受益者是编译器,与汇编程序程序员相比,编译器确实倾向于编写相对较大的代码块。比如说从2010年到2013年的几年中,我遇到了一个麻烦事,我只使用了相对的分支指令,但是我大多只是改用传统的BC指令。

1991年,当我失业了相当长的一段时间后,我学习了C语言,并学习了C qsort库函数功能。到1991年底,我回到了真实的机器上,再次使用了Assembler。 1993年,我写了QSORT。像qsort一样,它使用比较功能。不久之后,我意识到使用BRC指令不需要比较功能的基址寄存器,因此可以减少使用的寄存器,以及必须保存和恢复的寄存器。 XPLINK的阴影。 QSORT使用常规链接调用比较功能-

调用比较,(地址1,地址2)

使用QSORT的大多数程序会多次调用它,并具有多个比较功能。比较功能几乎使用了常见的启动顺序,通常-

保存 14
LM 14,15,0(1)
LR 1,15
洛杉矶15,1
*在此处插入比较代码。

寄存器15具有初始返回码,即qsort钉书钉-负,0,正,含义相同。

通常,所有比较功能都有一个共同的后缀
码:
SC0100   SR    15,15
         BRC   15,SC0300
SC0200   LNR   15,15
SC0300   RETURN 14,RC=(15)
有时,当分支不小于或大于时,您会进入SC0100,SC0200或SC0300通常由JL SC0200或JH SC0300分支。比较功能对性能至关重要,因此我可以节省的一切都是朝着正确方向迈出的一步。我不保存和恢复寄存器0和1,因为QSORT不需要它们。 QSORT中的实际CALL宏是

LR R15,R5
呼叫(15),(((R9),(R10)),MF =(E,PARMLIST)

宏会破坏寄存器14、15和1,QSORT实际上并不使用寄存器0。寄存器5具有比较例程的地址。显然,比较功能无法更改寄存器2至13,但是无论如何它都不会使用它们。

现在,如果比较功能需要其自己的基址寄存器,则其编码方式可能会不同

使用*,2
保存 (14,2)
LR 2,15
洛杉矶15,1
...
返回(14,2),RC =(15)

保存宏扩展为

+ STM 14,2,12(13)

相比

+ ST 14,12(,13)

RETURN扩展为

+ L 14,12(,13)
+ LM 0,2,20(13)
+ BR 14

相比

+ L 14,12(,13)
+ BR 14
回到顶部
查看用户资料 发送私信
彼得·荷兰

全球主持人


已加入:2009年10月27日
帖子:2476
所在地:荷兰,阿姆斯特尔芬

发布发表:2017年2月8日星期三晚上11:15
引用回复

但是,您想证明什么?你做了一些编程吗?

对你有益。

引用:


UmeySan

就个人而言,随着今天的那些mi,我不会或多或少浪费时间。

是的,他是对的。

回到顶部
查看用户资料 发送私信
史蒂夫·迈尔斯

活跃的成员


已加入:2013年11月30日
帖子:870
地点:宇宙

发布发表于:2017年2月9日星期四凌晨1:25
引用回复

几分之一秒的确累加了。而且,令人惊讶的是,它们仅在大型机上被发现。在玩具和婴儿机器上,没有人试图测量这种东西,所以没有人在乎,因为无法测量。这是项目倾向于在玩具和婴儿机器上消耗更多气体的原因之一,因为没有人事先检查过。尽管测量工具的可重复性令人失望,但它们已经在大型机中使用了数十年,尽管实际使用它们的纪律似乎已经消失了,这可能是因为它不在CS课程中(因为不能在玩具和婴儿身上完成)这些人似乎依靠摩尔的“法律”掩盖自己的失误。

QSORT中的原始外壳并不是很好。其实我是从K那里偷来的&R,出于演示目的对其进行了简化。但是我可以通过在其他地方提高效率来部分弥补它,例如比较功能。

我试图证明的是您必须注意小东西。 ST 14比STM 14,2快很多。 L 14比L 14 / LM 0.2快得多。如果调用比较函数100,000次,您将看到不同。
回到顶部
查看用户资料 发送私信
UmeySan

活跃的成员


已加入:2006年8月22日
职位:771
地点:德国

发布发表:2017年2月16日(星期四)下午8:12
引用回复

你好史蒂夫

我认为这仍然是一场无休止的辩论。我仍然认为在大型和复杂的SQL语句的处理时需要密切注意一些不可避免的必要性。可能比某些汇编程序说明更关键。
可以用Strobe和Omegamon进行测量。

但是就像我说的那样,我不是在乎运行时字节数或几秒钟的家伙。我不再将位开关与TM一起使用。我认为没有必要在进行商业编程。几秒钟的付出或付出不会赢得胜利或金表。

祝您周末愉快,UmeySan


哥登达·彼得

Hartelijk dank即将成为主流。
Plezant weekeinde,groet,于梅山
回到顶部
查看用户资料 发送私信
彼得·荷兰

全球主持人


已加入:2009年10月27日
帖子:2476
所在地:荷兰,阿姆斯特尔芬

发布发表于:2017年2月16日,星期四10:00 pm
引用回复

引用:
哥登达·彼得

Hartelijk dank即将成为主流。


很好,非常感谢。

也祝您周末愉快。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> PL / I& Assembler

 


类似主题
话题 论坛 回覆
没有新帖 将虚拟磁带服务器TS7700用作计算机... 所有其他大型机主题 0
没有新帖 恢复例行/异常退出出口以释放... PL / I& Assembler 14
没有新帖 大型机存储HSM IBM工具 5
没有新帖 大型工作存储和SOS问题 CICS 0
没有新帖 启动CICS,但存在存储短缺 CICS 2
搜索我们的论坛:


回到顶部