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中内存分配的机制就容易了。
- 大小: 10.2 KB
- 大小: 46.7 KB
- 大小: 94.4 KB
分享到:
相关推荐
- `setup_arch`接下来调用`init_bootmem`函数以初始化启动时的内存分配器。此分配器仅在系统启动过程中使用,用于为永久的内核数据分配内存。 - 这些由`bootmem`分配器分配的页被视为内核的一部分,它们在系统启动...
标题中的"pg055axibridgepcie_055PG.com_055pg.com_www.055PG.COM_https//:055"似乎是一个标识符,结合描述中的"AXI Memory Mapped to PCI Express (PCIe)",我们可以推测这可能是一份关于在系统设计中使用AXI...
五、 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初始化脚本
积木报表官方初始化sql
接下来是数据库的初始化过程,这主要包括: 1. **设计表结构**:定义数据库中的表格,每个表格代表一类实体,包含多个字段(列)。使用`CREATE TABLE`语句定义表格结构,如`CREATE TABLE 表名 (字段1 数据类型, ...
Oracle数据库的多国语言设置是其支持全球多样化的关键特性,允许系统处理各种语言、货币格式、排序方式以及CHAR、VARCHAR2、CLOB和LONG字段中的数据。这涉及到两个核心概念:国家语言设置和字符集设置。 国家语言...
初始化设置 : 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...
nacos使用pg数据库的初始化脚本
汇川技术MD系列变频器多功能PG卡是一种专门设计用于配合MD380/MD380M/MD500/CS700全系列变频器使用的扩展卡,具有对编码器信号...正确的安装和操作可以最大化地发挥PG卡的功能,为工业自动化领域提供了可靠的技术支持。
启动命令中,指定了data目录的位置,并可以指定一个日志文件的位置来记录启动过程中的信息。启动成功后,会看到"server starting"的提示,意味着数据库系统已经启动,可以开始使用了。 值得注意的是,在初始化过程...
【JOS Kernel 实验报告:内存管理与异常初始化】 在这个实验中,主要涉及了操作系统内核JOS(简明操作系统)中的两个关键组件:内存管理和异常处理。实验目的是理解和实现虚拟内存机制以及物理内存的分配与回收,...
最后,"启动项"是指在操作系统启动过程中运行的程序或服务。它们可以在用户登录之前运行,对系统环境产生影响。管理启动项是系统维护的一部分,确保只有信任的程序在启动时执行是至关重要的。 综合来看,这个压缩包...
以上步骤详细介绍了如何在 CentOS 7.x 系统中安装 PostgreSQL 9.5 并进一步安装 PG_strom 1.x 版本的过程。PG_strom 作为 PostgreSQL 的一种扩展,能够有效地利用 GPU 的并行计算能力来加速数据处理任务,特别是在 ...
这将做很多事,包括建立 PostgreSQL 需要运行的数据结构以及初始化一个可工作的数据库:template1。你需要使用 postgres 用户来运行 initdb 工具。 ``` pg$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data `...
1. **初始化设置**:使用前需对显示器进行初始化设置,包括设置显示模式、清屏等操作。 2. **指令发送**:通过数据线向显示器发送指令,实现显示内容的更新。 3. **数据传输**:除了指令外,还需要传输实际要显示的...
2. **初始化数据库集群**: - 使用`initdb`命令来创建新的PostgreSQL数据库集群,例如:`sudo -u postgres initdb --locale zh_CN.UTF-8 -D /var/lib/postgresql/11/main`。 3. **启动与停止服务**: - 启动:`...