Zhang Jiuan’ Notes

Marshal机制

    原来想着写这篇文章来着,但因为时间紧,于是耽搁了。今天晚上还有点时间,于是想着补点吧。
背景:
    有这样一些应用,那就是需要一些数据原样的从一台机器拷贝到其它机器上。这个过程是自动的,没有人为的干涉就可完成。数据可能是一些基本类型(int float char long char*),也可能是一些复杂类型:对象,接口,数组成。
Marshal机制:
    在一个实际调用过程中,列集散集模块将Proxy对应的调用信息打成一个数据包,然后发送到另一进程的Stub进行还原。当然这里并不是绝对的数据还原,比如C语言里面是一个对象类型,到Java的一端要转换成相应的同一规范的等价类型,这些也要靠列集散集机制来完成。另外对每一种类型都用规定大小的内存进行处理,这里数据自描述信息就显的尤为重要了。
Marshal机制的设计:
    整个Marshal打包过程中,就是按类型在数据包中分配相应的内存空间的过程,然后将对应的信息动态填入。当每填入一个数据,Idx就会标识到一个新的位置,用来说明已填的数据量。当然,对于字符串、指针、对象及内存地址相关数据的打包要比这里说的要麻烦的多。
Marshal机制的实现:
    下面代码给出了与列集散集相关元数据的C语言定义。该部分元数据描述各个内核对象类、接口、方法的各自属性,以及它们之间的关系。用户程序调用内核对象服务的列集散集过程描述如下:
//file metadata.h
……
typedef struct _MethodEntry {
    UINT8    paramNum;
    CIBaseType  *params;
} MethodEntry;
typedef struct _InterfaceEntry {
IID       iid;
    UINT16  methodNum;
    MethodEntry  *methods;
} InterfaceEntry;
typedef struct  _ClassEntry {
    CLSID      clsid;
    UINT16      interfaceNum;
    InterfaceEntry  *interfaces;
} ClassEntry;
Marshal机制的应用:
    构件间的异步调用。
 
thx
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!

漫谈数据自描述

    在读研期间接触了许多新名词,其中就有数据自描述。当初也有了一些感性认识吧,不过从来没有系统的记录下来。今天就简单写下一点在脑海还残余的思想吧。
名词解释:
数据:数据即客观事物一种抽象的数据化描述。比如:车(车轮;马达;玻璃;…),对它的数据描述可以是:
<car>
    <car_prop1>车轮</car_prop1>
    <car_prop2>马达</car_prop2>
    <car_prop3>玻璃</car_prop3>
   ….
</car>
这样清晰描述了一个车的构成。这些描述了一个车的组成的字符,我们称之为数据。
原(元)数据:原数据是描述数据的数据我们称之为原数据。仍旧拿上面的例子做说明吧,一辆车它的组成由车轮,马达和玻璃等组成,我们可以使用一些数据描述这些数据,那么这些描述信息便是原数据。这样加了原数据的车可以是如下模式:
<car name=”红旗” owner=”张久安”>
    <car_prop1 id=”isn19810312″ radias=”5inc”>车轮</car_prop1>
    <car_prop2>马达</car_prop2>
    <car_prop3>玻璃</car_prop3>
   ….
</car>
这样如果有了足够的原数据,我们对该辆车有了更加深入的了解。有了这些原数据,我们甚至可以很顺利的组装一辆这样的车。
数据抽象、基础类型统一:
    现在有这样一个问题了:我们在做服务器网络编程的时候,会遇到网络传输问题。在本地是一个什么样子的数据,我们期望传到了远程仍旧是什么样子。这个听起来似乎很简单的问题,事实到了真实需要处理的时候,它并不那么简单。比如会遇到大小端问题,类型不统一问题,机器位长(16/32/64)不一致问题等。
    因此需要有一套规范进行这些限制的约束,只有这样才可能有原则上的统一。
    约束一:数据抽象。将所有需要支持的信息进行抽象,抽象成使用最简单的数据可以描述的东西。比如一些需求我们只要认为他支持了Int Char Char* Float Array几个基础抽象数据类型,就可以对该业务完全支持的话,那知我们把这些基础类型进行归范化就够了。
    约束二:基础类型统一。统一是相对的,比如一个Int类型在16位机器上可以对应成int类型也可以映射成long类型后者是推荐的,因为这样有利于Int类型4位字长的统一。如果你接收了16位机器Int为16位的话,你就必须接受数字位截段的结果。对于64位机器的理解也一样。即然想要概念上的统上,就必须有所舍弃。
数据自描述模型:
数据自描述模型设计:
数据自描述应用:

thx
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!

,

返回顶部