pg启动过程中的那些事二:初始化PostmasterContext
2011-12-07 22:21
253 查看
1先上个示意图,看一下函数调用过程梗概,中间略过部分细节
前面标3的是初始化PostmasterContext
初始化PostmasterContext的方法调用流程图
2初始化PostmasterContext的过程
话说main()->…->PostmasterMain()->…->MemoryContextInit()->AllocSetContextCreate()(“->” 表示调用),初始化完TopMemoryContext和ErrorContext,这之后,main()->…->PostmasterMain()->AllocSetContextCreate()初始化PostmasterContext,PostmasterContext是MemoryContext类型的全局变量,定义如下:
MemoryContext PostmasterContext = NULL;
PostmasterContext的类型和TomMemoryContext、ErrorContext是一样的,都是MemoryContext。有了《pg启动过程中的那些事一》垫底,这个写起来就容易了。初始化PostmasterContext的过程和ErrorContext基本上是一样的。所以下面就直接上初始化完以后的结构图了。不过前面只有TomMemoryContext和ErrorContext的内存结构图加上内存空间管理的AllocBlock和AllocChunk,看起来已经让人眼花缭乱了,这里把AllocBlock和AllocChunk相关部分删掉,突出MemoryContext全局变量之间的关系。
PostmasterContext、TomMemoryContext、ErrorContext的结构图
TomMemoryContext的firstchild指向PostmasterContext,PostmasterContext的nextchild指向ErrorContext,形成了树形结构。PostmasterContext、ErrorContext的parent成员指向TomMemoryContext,形成了环。整体上构成了图。
PostmasterContext在AllocBlock和AllocChunk中的位置,见下面示意图,图中红色的那一块就是PostmasterContext,里面的成员和其他细节就不画了,要不然看起来就天下大乱了。
PostmasterContext在内存中的AllocBlock和AllocChunk中的位置
有了《pg启动过程中的那些事一》和这篇文章垫底,再要理解pg中内存分配的机制就容易了。
前面标3的是初始化PostmasterContext
初始化PostmasterContext的方法调用流程图
2初始化PostmasterContext的过程
话说main()->…->PostmasterMain()->…->MemoryContextInit()->AllocSetContextCreate()(“->” 表示调用),初始化完TopMemoryContext和ErrorContext,这之后,main()->…->PostmasterMain()->AllocSetContextCreate()初始化PostmasterContext,PostmasterContext是MemoryContext类型的全局变量,定义如下:
MemoryContext PostmasterContext = NULL;
PostmasterContext的类型和TomMemoryContext、ErrorContext是一样的,都是MemoryContext。有了《pg启动过程中的那些事一》垫底,这个写起来就容易了。初始化PostmasterContext的过程和ErrorContext基本上是一样的。所以下面就直接上初始化完以后的结构图了。不过前面只有TomMemoryContext和ErrorContext的内存结构图加上内存空间管理的AllocBlock和AllocChunk,看起来已经让人眼花缭乱了,这里把AllocBlock和AllocChunk相关部分删掉,突出MemoryContext全局变量之间的关系。
PostmasterContext、TomMemoryContext、ErrorContext的结构图
TomMemoryContext的firstchild指向PostmasterContext,PostmasterContext的nextchild指向ErrorContext,形成了树形结构。PostmasterContext、ErrorContext的parent成员指向TomMemoryContext,形成了环。整体上构成了图。
PostmasterContext在AllocBlock和AllocChunk中的位置,见下面示意图,图中红色的那一块就是PostmasterContext,里面的成员和其他细节就不画了,要不然看起来就天下大乱了。
PostmasterContext在内存中的AllocBlock和AllocChunk中的位置
有了《pg启动过程中的那些事一》和这篇文章垫底,再要理解pg中内存分配的机制就容易了。
相关文章推荐
- PostgreSQL启动过程中的那些事五:初始化世界上现有行政区时区
- PostgreSQL启动过程中的那些事十三_十四:初始化统计进程需要的资源、为autovuc进程启动做条件检查
- PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境
- Nginx源码分析-启动初始化过程(一)
- Linux系统的启动,初始化及关机过程
- 细水长流Hadoop源码分析(3)RPC Server初始化启动过程
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号二:shmem中初始化xlog
- Spring初始化 - 启动过程
- ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
- 内核启动时clock system的初始化过程
- Uboot启动过程 之 硬件初始化
- 内核启动时clock system的初始化过程
- LPC2294的uclinux启动过程分析--串口初始化过程
- Nginx源码分析-启动初始化过程(二)
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号一:初始化shmemIndex和信号
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十八:shmem中初始化WalSender和WalRecv相关结构
- Spring MVC启动过程(1):ContextLoaderListener初始化
- μC/OS-II的初始化和启动过程
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十九:shmem中初始化BTree相关结构