Postmaster的Shared Memory中的shmem index table 内存结构

我们知道,Postmaster的Shared Memory中的shmem index table 是一个dynamic hash table,所以理解该hash table初始化时在内存中的结构对于理解postmaster 的shared memory有重要帮助。

调用流程:
PostmasterMain->reset_shared(int)->CreateSharedMemoryAndSemaphores()->InitShmemIndex();
先看PostgreSQL总体内存结构:
在momjian的Inside PostgreSQL Shared Memory http://momjian.us/main/writings/pgsql/inside_shmem.pdf第11页中Shared Memory Creation中,我们可以了解到PostgreSQL总体内存结构:


关于Heap,Stack,Shared Memory的关系和在内存中的位置,请参考我的另外一篇文章:
http://blog.chinaunix.net/u2/81513/showart.php?id=2203403
由于Postgresql对malloc的替换实现palloc,底层仍然采用glib c的malloc调用,所以我们可以得出凡是使用palloc分配的内存都是在heap上的(即采用brk系统调用所申请),也就是上图中的data向下的箭头所指。
关于共享内存的实现,通常是调用os接口mmap()实现。把os中内存页面映射到进程空间中。
pa=mmap(addr, len, prot, flags, fildes, off);
其中addr参数如果为null的话(通常如此),则映射到内存空间的地址由系统设定。由于Postmaster中也是设置的null,故我们不能准确知道shared memory的起始地址。但无妨后面的分析。

调用InitShmemIndex()完之后,Postmaster的内存hash index table结构初始化为下图:




至此,结束。

http://blog.sciencenet.cn/home.php?mod=space&uid=419883&do=blog&id=307647
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值