dram.me

Postgres95 postmaster实现

postmaster是PG95的主进程,用于监听端口,等待客户端连接并启动后端程序。

postmaster的主体实现是典型的fork&exec socket服务端模型,但流程上有部分优化。例如在fork&exec之前会先校验请求和用户信息的有效性,如果是无效请求或者用户,则无需启用新进程。

除了启动任务进程,postmaster还负责管理共享资源,例如调用CreateSharedMemoryAndSemaphores初始化共享内存和信号量。

postmaster.c文件中可以看到,其中并没有main函数,程序的入口在src/backend/main/main.c,其中会根据命令名称和参数判断需要执行的主体函数是PostmasterMainBootstrapMain还是PostgresMain

有一个问题点,在PG95 1.01版本中,postmaster包含-b参数,用于指定后端程序路径,并且客户端在发送初始请求时也可以指定(客户端传入的值会被存放到这里,最终DoExec启动进程时用的是-b参数,客户端传入的参数也并未作为参数传入),在后续的版本文档中,-b参数不存在了。