这一节
pg
初始化
postmaster
子进程给
postmaster
进程发送信号用到的相关结构,在共享内存里通过信号交互,通过
PMSignalShmemInit
例程实现
。主要是初始化了一个
PMSignalData
结构,并使用了面向过程编程的一个技巧,把这个结构中的固定长度数组
sig_automatic_t PMChildFlags[1]
扩充成
2XMaxBackends=200
个的信号的数组,以供
postmaster
进程和
postmaster
子进程之间互动互操作。
1
先上个图,看一下函数调用过程梗概,中间略过部分细节
初始化
PMSingal
方法调用流程图
2
初始化
xlog
相关结构
话说
main()->
…
->PostmasterMain()->
…
->reset_shared() ->
CreateSharedMemoryAndSemaphores()>
…
->
PMSignalShmemInit
()
,调用
ShmemInitStruct()
,
在其中
调用
hash_search()
在哈希表索引
"ShmemIndex"
中查找
"PMSignalState"
,如果没有,就在
shmemIndex
中给
"PMSignalState"
分一个
HashElement
和
ShmemIndexEnt
(
entry
)
,在其中的
Entry
中写上
"PMSignalState"
。返回
ShmemInitStruct()
,再调用
ShmemAlloc()
在共享内存上给
"PMSignalState"
相关结构(见下面“
PMSignalState
相关结构图”
)分配空间,设置
entry
(在这儿及ShmemIndexEnt
类型变量)的成员
location
指向该空间,
size
成员记录该空间大小
,
最后返回
PMSignalShmemInit
()
,让
PMSingalData
*
类型静态
全局变量
PMSignalState
指向
所分配内存
,初始化PMSingalData
结构类型的成员值,其中包括一个信号数组成员。
相关结构定义和图见下面:
struct
PMSignalData
{
/* per-reason flags */
sig_atomic_t
PMSignalFlags
[
NUM_PMSIGNALS
];
/* per-child-process flags */
int
num_child_flags
;
/* # of entries
in PMChildFlags[] */
int
next_child_flag
;
/* next slot to
try to assign */
sig_atomic_t
PMChildFlags
[1];
/* VARIABLE LENGTH ARRAY */
};
NON_EXEC_STATIC
volatile
PMSignalData
*PMSignalState = NULL;
信号在各操作系统中是不同的。下面是各系统的信号类型PGSemaphoreData
的定义。
POSIX
标准的
PGSemaphoreData
的定义:
typedef sem_t
PGSemaphoreData;
SYSV
标准的
PGSemaphoreData
的定义:
typedef struct
PGSemaphoreData
{
int
semId;
/* semaphore set identifier */
int
semNum;
/* semaphore number within set */
} PGSemaphoreData;
Windows
系统
PGSemaphoreData
的定义:
typedef HANDLE
PGSemaphoreData;
初始化完
PMSignalState
相关结构
的共享内存结构图
为了精简上图,把创建
shmem
的哈希表索引
"ShmemIndex"
时创建的
HCTL
结构删掉了,这个结构的作用是记录创建可扩展哈希表的相关信息,不过这个结构在
"ShmemIndex"
创建完成后也会由于出了对象作用域而消失。增加了左边灰色底的部分,描述
共享内存
/shmem
里各变量物理布局概览,由下往上,由低地址到高地址。
图中黄色的索引项就是本节新增加的索引项。
PMSignalState
相关结构图
- 大小: 12.6 KB
- 大小: 126 KB
- 大小: 530.9 KB
分享到:
相关推荐
nacos-2.0.1 postgresql初始化脚本
一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: 一、服务器进程的启动和关闭: . 50 PostgreSQL PostgreSQL...
赠送jar包:postgresql-42.3.1.jar; 赠送原API文档:postgresql-42.3.1-javadoc.jar; 赠送源代码:postgresql-42.3.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:postgresql-42.2.5.jar; 赠送原API文档:postgresql-42.2.5-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
关于PostGreSQL中的存储过程 PostGreSQL是一个开源的数据库
从零初始化一个SpringBoot项目,集成PostgreSQL并使用JPA和MyBatis两种方式对其进行操作。这里只记录PostgreSQL相关操作,项目创建过程不详细介绍,类似流程可参考文章<<Spring Boot:Idea从零开始初始化后台项目>>...
存储过程 postgresql postgresql存储过程
PostgreSQL数据库领域经典著作 系统讲解PostgreSQL技术内幕,深入分析PostgreSQL特色功能,包含大量来自实际生产环境的经典案例和经验总结 PostgreSQL数据库是目前功能最强大的开源数据库,它基本上包含其他所有...
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar; 赠送源代码:postgresql-42.2.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar; 赠送源代码:postgresql-42.3.3-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:postgresql-42.2.2.jar; 赠送原API文档:postgresql-42.2.2-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
本套程序是在VS2005下C#开发,利用PostgreSQL作为数据库。 本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL...
赠送jar包:postgresql-42.2.6.jar; 赠送原API文档:postgresql-42.2.6-javadoc.jar; 赠送源代码:postgresql-42.2.6-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组
PostgreSQL12.2中文手册.chm.7z PostgreSQL12.2中文手册.chm.7z
创建 PostgreSQL 实例后,您还需要进行 PostgreSQL 实例的初始化,以轻松启用实例。操作步骤登录 PostgreSQL 控制台,在实例列表,选
NULL 博文链接:https://haige18.iteye.com/blog/1746527
Test-postgresql:积极维护的Test :: postgresql的分支
《PostgreSQL 11.2手册》是基于《PostgreSQL 10.1手册》翻译,并且合并了武汉大学彭煜玮老师翻译的《PostgreSQL 11.0文档》中的大量内容。其余翻译工作由翻译小组的志愿者们完成。 感谢彭老师和翻译小组的志愿者...
赠送jar包:postgresql-42.3.3.jar; 赠送原API文档:postgresql-42.3.3-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。