pg
的内存处理
AllocSet/MemoryContext
外,另一个主要部分就是共享内存shared memory
。这一节讨论共享内存(简写shmem
)的初始化及其哈希表索引
"ShmemIndex"
的建立,这是共享内存/shmem
管理的基础。
在
reset_shared
()
这个函数里,
计算数据缓冲、xlog
、clog
、共享进程、子事务、并发控制、轻量级锁、backend
进程等需要的共享内存,
调用
shmget()
函数在堆上分配,接着在头部初始化一个
PGShmemHeader
*
类型的
ShmemSegHdr
变量,使其index
成员指向调用hash_create()
创建的可扩展
哈希表索引
"ShmemIndex"
。shmem
的初始化过程参加《pg
启动过程中的那些事七》,哈希表可参见《pg
中的数据结构一》。
下面是初始化完成并建立了
可扩展
哈希表索引
"ShmemIndex"
后的shmem
内存结构图。
共享内存及其索引
"ShmemIndex"
结构图
题外话:pg
的内存管理机制系列文章还没有写到第十一篇,这里用十一是给MemoryContext/AllocSet
的内存管理预留的,这样共享内存管理可以和内存上下文管理分开。
- 大小: 130.4 KB
分享到:
评论