这一节pg初始化共享后台进程状态数组SharedBackendStatus和多个字符串缓存,通过CreateSharedBackendStatus例程实现。
1先上个图,看一下函数调用过程梗概,中间略过部分细节
初始化SharedBackendStatus方法调用流程图
2初始化xlog相关结构
话说main()->…->PostmasterMain()->…->reset_shared() ->CreateSharedMemoryAndSemaphores()>…->CreateSharedBackendStatus(),调用ShmemInitStruct(),在其中调用hash_search()在哈希表索引"ShmemIndex"中查找"Backend Status Array",如果没有,就在shmemIndex中给"Backend Status Array"分一个HashElement和ShmemIndexEnt(entry),在其中的Entry中写上"BackendStatus Array"。返回ShmemInitStruct(),再调用ShmemAlloc()在共享内存上给"Backend Status Array"相关结构(见下面“Backend Status相关结构图”)分配空间,设置entry(在这儿及ShmemIndexEnt类型变量)的成员location指向该空间,size成员记录该空间大小,最后返回CreateSharedBackendStatus(),让PgBackendStatus *类型静态全局变量BackendStatusArray指向所分配内存。
CreateShare