共享内存初始化

DistributedLog_shmemInit函数主要工作:1. 为distributed log建立SLRU 2. 为distributed log 创建共享内存。

  1. 为distributed log建立SLRU
    在内存中定义的结构体DistributedLogCtlData用于指向共享内存数据结构体,先初始化PagePrecedes函数指针为用于判别哪个数据页更老的函数。调用SimpleLruInit函数初始化LRU共享内存池(共享内存大小为BUFFERALIGN(sizeof(SlruSharedData)+nslots*(sizeof(char*)+sizeof(SlruPageStatus)+sizeof(bool)+sizeof(int)+sizeof(LWLockPadded)))+BLCKSZ*nslots),将申请的共享内存池指针赋值给SlruCtlData结构体的shared成员。将pg_distributedlog字符串拷贝到SlruCtlData结构体的DIR成员中。
  2. 为distributed log创建共享内存,其实就是在共享内存中申请DistributedLogShmem结构体大小的内存,用于存放DistributedLogShmem的内容。
    系统安装时需要调用一次DistributedLog_BootStrap函数,用于创建初始DistributedLogsegment。
    Postmaster或standalen-backedn启动时调用一次DistributedLog_Startup函数。