免费注册 查看新帖 |

Chinaunix

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

DATA AREA和DATA QUEUE的区别之我见(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-08 14:24 |只看该作者 |倒序浏览
本帖最后由 niuhua77 于 2011-09-09 08:22 编辑

网上流传一道题:data area和data queue的区别。
我个人觉得data area和data queue除了长的比较像之外,其可比性并不大。从大的方向说,data area和data queue的共同点仅仅是二者都可以完成不同job间的通讯的功能(即数据交换),但是相同的功能还可以由 PF,user space等完成,为什么没人把它们都拿来一起比较呢?因为长的不像?? hoho~~~
下面分别介绍一下Data Area和Data Queue,希望能给困惑者带来一点帮助,不对的地方欢迎指正。

Data Area

一 基本信息
        Data Area在系统中用*DTAARA来表示,实际上OS400把Data Area当作一个单独的字段。
        Data Area中存储的数据类型有3种,分别是*CHAR、*DEC、*LGL。它们的最大的长度分别为:
       *CHAR——2000个字符
       *DEC ——1个数字(最长为24 digits, 9 decimal positions。实际上长度不能超过15)
       *LGL ——1个逻辑值(‘1’或者‘0’)
由此可见,Data Area所能保存的信息量十分有限,对于*DEC和*LGL来说,仅仅能保存一个数值;对与*CHAR类型来说,能保存2000个字符的数据。所以,Data Area不适用于大量数据的处理。通常用Data Area来保存一些被多个job共用的控制信息。另外,Data Area仅仅是一个单独的字段,不需要像PF中那样用游标来定位记录,所以打开一个Data Area的系统开销要比打开一个PF要小的多,效率高得多。这就是Data Area最大的优点。

二 使用方法
        Data Area的创建、删除、修改、显示可以用CL命令在命令行上操作,或者在CLP程序中操作,都比较简单就不多说了。下面说一下在RPGLE中的使用方法。
        RPG中关于Data Area的操作符有以下几个:IN、OUT、*LOCK、UNLOCK,
        IN:读取Data Area
        OUT:输出更新Data Area并解锁
        *LOCK: 为Data Area加上锁
        UNLOCK:为Data Area 解锁
下面举个例子来说明Data Area的基本操作:

D Total             DS               DTAARA(TotDat)   //定义Data Area
D  Amount                     8 S  2OVERLAY(Total:1)  
C            *LOCK    IN      Total   //读取并且锁住Data Area
* // your code……
C                      OUT     Total   //更新并且释放Data Area锁
OR
C            *LOCK    IN      Total   //读取并且锁住Data Area
* // your code……
C                    UNLOCK   Total   //释放Data Area锁

关于一般的Data Area的锁,做个说明:

1  Data Area的锁是独占只读锁(exclusive, allow read),如果某Data Area已经被锁住了,那么其他的作业只能以只读的方式访问此Data Area,不能用OUT操作。

2 如果想在程序中更新Data Area,则必须先锁住此Data Area(跟UPDATE PF一个道理)。如果没有锁住Data Area,就在那么在程序中用OUT的话,程序会报错,例如:
C                    IN      Total   
* // your code……   没有锁住data area就输出,是不可以的。
C                    OUT    Total   

3 Data Area上锁可以通过
        1)使用*LOCK  IN 方式  
        2)使用Data Area Data Structure方式(稍后介绍)

4 Data Area 解锁可以通过
        1)OUT——更新并解锁
        2)UNLOCK ——解锁
        3)程序结束并且*INLR=*ON,则锁自然解除。

三 Data Area Data Structure

这种类型的Data Area有点特殊,使用起来会方便一些
定义:
D Total             UDS             DTAARA(TotDat)   //定义Data Area
D  Amount                     8 S  2OVERLAY(Total:1)
Data Area Data Structure与普通的Data Area定义有一点差异,就是在DS keyword的前面加上一个U,即:UDS
使用方法:
Data Area Data Structure的特别之处就在于,它隐含了两行的代码,如下:
C            *LOCK    IN      Total   //读取并且锁住Data Area
*……
C                      OUT     Total   //更新并且释放Data Area锁
就是说如果定义成Data Area Data Structure的话,那么程序会自动读取并锁住此Data Area,并且在程序结束的时候,会自动输出更新Data Area并释放锁。所以如果定义成Data Area Data Structure的话,就不需要上面的两行代码了。

四 *LDA——Local Data Area
        *LDA算是一种特殊的Data Area,它是长度为1024个字节的字符串,并由系统自动为每个job创建和删除。
每个job只能操作自己的*LDA,不能操作、获取其他job的*LDA的数据。就是说在同一个job内,你愿意怎么折腾都行,但是你不能共享别的job的*LDA,别的JOB也不能共享你的JOB的*LDA。不过有一种特例,即递交出去的作业是可以继承原来作业的*LDA的内容。假如JOB A 用SBMJOB递交出了一个JOB B,那么系统会用JOB A的*LDA的内容来初始化JOB B的*LDA。
因为*LDA是私有的,不用担心其他job会锁住LDA,所以LDA的读取和更新不用上锁,也不会报错。
D Local             DS              DTAARA(*LDA)          //定义*LDA
D  orderNum                    5    Overlay(Local:5)
*
C                    IN       Local
C                    EVAL    orderNum=’12345’
C                    OUT     Local
如果Data Area是*LDA的话,不用锁住Data Area,更新Data Area也不会报错,不是*LDA的话,以上代码就会报错。

论坛徽章:
0
2 [报告]
发表于 2011-09-08 14:27 |只看该作者
沙发还是要自己坐滴~~~

Data queue部分还没写,等有时间我写好了会补上的

最近论坛太冷清了,都冒冒泡,加点人气吧~~~~

论坛徽章:
0
3 [报告]
发表于 2011-09-08 16:50 |只看该作者
坐等data queue高见

论坛徽章:
0
4 [报告]
发表于 2011-09-08 20:54 |只看该作者
这个确实可比性不大,问这个问题的大概是国人吧。

论坛徽章:
0
5 [报告]
发表于 2011-09-08 21:44 |只看该作者
不怕有问题,只怕不问问题,再怕问问题没人答,坐下来慢慢看,hoho

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
6 [报告]
发表于 2011-09-08 23:29 |只看该作者
我也来围观一下,,写的不错,支持呀~

论坛徽章:
0
7 [报告]
发表于 2011-09-09 08:16 |只看该作者
回复 3# shibuya


    多谢捧场~~~

论坛徽章:
0
8 [报告]
发表于 2011-09-09 08:18 |只看该作者
回复 4# roden


    前几天朋友说他面试的时候被问到了,好像是国内的公司

论坛徽章:
0
9 [报告]
发表于 2011-09-09 08:19 |只看该作者
回复 5# 爱笑的猫猫


    说的太对了,围观也是一种态度。。。。

论坛徽章:
0
10 [报告]
发表于 2011-09-09 08:21 |只看该作者
回复 6# junlee1986


    我忠实的粉丝,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP