`

pg启动过程中的那些事二:初始化PostmasterContext

阅读更多

1先上个示意图,看一下函数调用过程梗概,中间略过部分细节



 

前面标3的是初始化PostmasterContext

初始化PostmasterContext的方法调用流程图

 

2初始化PostmasterContext的过程

话说main()->->PostmasterMain()->->MemoryContextInit()->AllocSetContextCreate()-> 表示调用,初始化完TopMemoryContextErrorContext,这之后,main()->->PostmasterMain()->AllocSetContextCreate()初始化PostmasterContextPostmasterContextMemoryContext类型的全局变量,定义如下:

MemoryContext PostmasterContext = NULL;

 

PostmasterContext的类型和TomMemoryContextErrorContext是一样的,都是MemoryContext。有了《pg启动过程中的那些事一》垫底,这个写起来就容易了。初始化PostmasterContext的过程和ErrorContext基本上是一样的。所以下面就直接上初始化完以后的结构图了。不过前面只有TomMemoryContextErrorContext的内存结构图加上内存空间管理的AllocBlockAllocChunk,看起来已经让人眼花缭乱了,这里把AllocBlockAllocChunk相关部分删掉,突出MemoryContext全局变量之间的关系。

 

 



PostmasterContextTomMemoryContextErrorContext的结构图

TomMemoryContextfirstchild指向PostmasterContextPostmasterContextnextchild指向ErrorContext,形成了树形结构。PostmasterContextErrorContextparent成员指向TomMemoryContext,形成了环。整体上构成了图。

    PostmasterContextAllocBlockAllocChunk中的位置,见下面示意图,图中红色的那一块就是PostmasterContext,里面的成员和其他细节就不画了,要不然看起来就天下大乱了。

 

 



 

 

 

PostmasterContext在内存中的AllocBlockAllocChunk中的位置

       有了《pg启动过程中的那些事一》和这篇文章垫底,再要理解pg中内存分配的机制就容易了。

 

 

  • 大小: 10.2 KB
  • 大小: 46.7 KB
  • 大小: 94.4 KB
1
2
分享到:
评论

相关推荐

    Linux 内存管理系统:初始化

    - `setup_arch`接下来调用`init_bootmem`函数以初始化启动时的内存分配器。此分配器仅在系统启动过程中使用,用于为永久的内核数据分配内存。 - 这些由`bootmem`分配器分配的页被视为内核的一部分,它们在系统启动...

    pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055

    标题中的"pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055"似乎是一个标识符,结合描述中的"AXI Memory Mapped to PCI Express (PCIe)",我们可以推测这可能是一份关于在系统设计中使用AXI...

    PostgreSQL中文手册9.2

    五、 pg_auth_members: pg_auth_members: pg_auth_members: pg_auth_members:pg_auth_members: pg_auth_members:pg_auth_members:pg_auth_members:pg_auth_members: .64 七、 pg_tablespace: pg_tablespace: pg_...

    nacos-2.0.1 postgresql初始化脚本

    nacos-2.0.1 postgresql初始化脚本

    积木报表官方初始化sql

    积木报表官方初始化sql

    新建SQL数据库并初始化

    接下来是数据库的初始化过程,这主要包括: 1. **设计表结构**:定义数据库中的表格,每个表格代表一类实体,包含多个字段(列)。使用`CREATE TABLE`语句定义表格结构,如`CREATE TABLE 表名 (字段1 数据类型, ...

    导出/导入与字符集之间问题的解决

    Oracle数据库的多国语言设置是其支持全球多样化的关键特性,允许系统处理各种语言、货币格式、排序方式以及CHAR、VARCHAR2、CLOB和LONG字段中的数据。这涉及到两个核心概念:国家语言设置和字符集设置。 国家语言...

    汇川-MD系列变频器多功能PG卡使用说明书版本号:V1.0.pdf

    汇川技术MD系列变频器多功能PG卡是一种专门设计用于配合MD380/MD380M/MD500/CS700全系列变频器使用的扩展卡,具有对编码器信号...正确的安装和操作可以最大化地发挥PG卡的功能,为工业自动化领域提供了可靠的技术支持。

    epson1390清零

    初始化设置 : USB ID : Head ID : Head angular Band angular : Microwave : Bi-D PG Typical ECO : MC1-1 : MC1-5 : MC2-4 : PG - MC1-5 : MC2-3 : PG - - MC1-5 : MC2-3 : PW...

    VC_过启动_内核过pg读写_过启动项_过pg保护_启动项_

    最后,"启动项"是指在操作系统启动过程中运行的程序或服务。它们可以在用户登录之前运行,对系统环境产生影响。管理启动项是系统维护的一部分,确保只有信任的程序在启动时执行是至关重要的。 综合来看,这个压缩包...

    nacos使用pg数据库的初始化脚本

    nacos使用pg数据库的初始化脚本

    在windows下手动初始化PostgreSQL数据库教程

    启动命令中,指定了data目录的位置,并可以指定一个日志文件的位置来记录启动过程中的信息。启动成功后,会看到"server starting"的提示,意味着数据库系统已经启动,可以开始使用了。 值得注意的是,在初始化过程...

    [原创]JOS_lab2实验报告: 内存管理及异常初始化

    【JOS Kernel 实验报告:内存管理与异常初始化】 在这个实验中,主要涉及了操作系统内核JOS(简明操作系统)中的两个关键组件:内存管理和异常处理。实验目的是理解和实现虚拟内存机制以及物理内存的分配与回收,...

    GPU数据库PG_strom的安装及使用

    以上步骤详细介绍了如何在 CentOS 7.x 系统中安装 PostgreSQL 9.5 并进一步安装 PG_strom 1.x 版本的过程。PG_strom 作为 PostgreSQL 的一种扩展,能够有效地利用 GPU 的并行计算能力来加速数据处理任务,特别是在 ...

    linux配置postgresql

    这将做很多事,包括建立 PostgreSQL 需要运行的数据结构以及初始化一个可工作的数据库:template1。你需要使用 postgres 用户来运行 initdb 工具。 ``` pg$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data `...

    PG12864F功能介绍

    1. **初始化设置**:使用前需对显示器进行初始化设置,包括设置显示模式、清屏等操作。 2. **指令发送**:通过数据线向显示器发送指令,实现显示内容的更新。 3. **数据传输**:除了指令外,还需要传输实际要显示的...

    linux中pg11的包

    2. **初始化数据库集群**: - 使用`initdb`命令来创建新的PostgreSQL数据库集群,例如:`sudo -u postgres initdb --locale zh_CN.UTF-8 -D /var/lib/postgresql/11/main`。 3. **启动与停止服务**: - 启动:`...

Global site tag (gtag.js) - Google Analytics