系统相关
首页 > 系统相关> > ABAP内存组织与内部会话

ABAP内存组织与内部会话

作者:互联网

ABAP内存组织与内部会话

        从ABAP程序对AS ABAP的存储访问的的视角来说,可以访问到应用服务器的存储区域是共享内存(shared memory),SAP内存(SAP memory),ABAP内存(ABAP memory)和内部会话中的(回滚区)roll area。内存区域从小到大的顺序为数据对象,ABAP内存,SAP内存,共享内存,中央数据库,他们分别处于内部会话,主会话(外部会话),用户会话,应用服务器,AS ABAP层级上。对应关系如下表:

级别

Internal Session

Main Session

user Session

Application Server

AS ABAP

存储

ABAP Object

ABAP Memory

SAP Memory

Shared Memory

Database

        中央数据库可以作为所有应用服务器共享的最高级存储,在单个应用服务器中最高的存储区域为共享存储(shared memory),该级存储被应用服务器中多个会话共享,然后针对单独用户会话来说,在用户会话中最高存储为SAP内存,SAP内存被用户会话中的多个主会话也就是外部会话共享,主会话中又可能会产生多个内部会话,内部会话共享主会话的内存区域ABAP内存,而在内部会话中的数据存储是数据对象。详情见下图:        

         AS ABAP的应用层是可以被部署到多个应用服务器中的,通常来说这些应用服务器是分布在不同计算机上的实例,当然不同的应用服务器也是可以运行在同一台计算机上的,所有的应用服务器访问AS ABAP的中央数据库,每个应用服务器有他自己的shared memory,abap运行时环境给程序,程序数据和buffers使用共享内存。ABAP程序可以在共享存储(注意:如果在程序显式的进行数据存储并频繁使用应用服务器的共享内存,会导致资源稀缺,形成瓶颈。)中存储共享对象(shared objects)和数据群集(data clusters),ABAP程序可以访问跨事务应用buffers(cross-transactional application buffers)中的数据群集,或者共享对象内存中的共享对象。 当登陆到应用服务器上时会打开一个用户会话,每个用户会话都会被分配它自己的的SAP内存,而对于每个用户会话,都有一个主会话被打开,每个主会话都被分配它自己的ABAP内存,在ABAP内存中数据群集也可以被存储,调用序列中的的程序们共享访问这些数据群集;而每个ABAP程序的调用都会创建一个新的内部会话来加载该程序,内部会话的内存区域被称为回滚区域(roll area),它被分割为堆和栈两个区域。该区域是程序中可变对象持有的区域,而不能够被改变得程序数据是被存储在PXA中。回滚区域包含了在PXA区域中必要数据的引用。从技术的角度来讲,回滚区域和全局PXA被存储在应用服务器的共享内存中,然后通过SAP内存管理,内部会话中程序和数据的组织如下图:

    在内部会话中可能会有多个程序被组织到一个程序组里,在内部会话被返回之后这个程序组就被拆解掉了,然后就不能访问内部会话的数据和对象了。

    比如在使用SUBMIT或者事务码进行一个ABAP程序的调用,此时会创建一个内部会话,首先主程序组被创建,被调用的程序成为了程序组中的的主程序(这个主程序可能是可执行程序,模块池或者一个函数组),最后内部会话的生命周期会随着主程序的消亡一起结束。而每次当外部加载一个新的类池或者一个函数时,也就是对类池或者函数组暴露的组件(全局类或者函数模块可见的组件)的访问,此时附加程序组会被被创建,并且这个类池或者函数组成为了附加程序组的主程序。附加的程序组的生命周期是伴随着内部会话的。但是当外部调用非函数组或者类池被时候,是不会形成附加程序组的,取而代之的是它们被加载到用户的程序组,例如:

其他的一些补充

     关于应用服务器

   关于用户会话(User session)

关于主会话(Main session)

关于内部会话(Internal Session)

关于程序组中的程序

关于PXA

    管理ABAP程序中固定数据的程序内存(program execution area)区域。PXA明显包含在应用服务器特定时间并发的所有运行程序的字节码(bytecodes)。应用服务器中的所有内部会话共享这部分内存,并且每个应用服务器只有一个PXA。程序一旦被执行过一次,程序的字节码就会被保存到PXA的缓冲,为了尽可能的阻止当程序重新执行事件发生时加载数据库时从数据库冲重新加载。PXA也缓冲公共的资源,比如常量的值,和为boxed components的inital value sharing.

标签:存储,程序,会话,ABAP,内存,应用服务器
来源: https://www.cnblogs.com/mach-arch/p/15965422.html