PostgreSQL Source Code  git master
pg_shmem.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * pg_shmem.h
4  * Platform-independent API for shared memory support.
5  *
6  * Every port is expected to support shared memory with approximately
7  * SysV-ish semantics; in particular, a memory block is not anonymous
8  * but has an ID, and we must be able to tell whether there are any
9  * remaining processes attached to a block of a specified ID.
10  *
11  * To simplify life for the SysV implementation, the ID is assumed to
12  * consist of two unsigned long values (these are key and ID in SysV
13  * terms). Other platforms may ignore the second value if they need
14  * only one ID number.
15  *
16  *
17  * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
18  * Portions Copyright (c) 1994, Regents of the University of California
19  *
20  * src/include/storage/pg_shmem.h
21  *
22  *-------------------------------------------------------------------------
23  */
24 #ifndef PG_SHMEM_H
25 #define PG_SHMEM_H
26 
27 #include "storage/dsm_impl.h"
28 
29 typedef struct PGShmemHeader /* standard header for all Postgres shmem */
30 {
31  int32 magic; /* magic # to identify Postgres segments */
32 #define PGShmemMagic 679834894
33  pid_t creatorPID; /* PID of creating process (set but unread) */
34  Size totalsize; /* total size of segment */
35  Size freeoffset; /* offset to first free space */
36  dsm_handle dsm_control; /* ID of dynamic shared memory control seg */
37  void *index; /* pointer to ShmemIndex table */
38 #ifndef WIN32 /* Windows doesn't have useful inode#s */
39  dev_t device; /* device data directory is on */
40  ino_t inode; /* inode number of data directory */
41 #endif
43 
44 /* GUC variables */
46 extern PGDLLIMPORT int huge_pages;
47 extern PGDLLIMPORT int huge_page_size;
48 
49 /* Possible values for huge_pages */
50 typedef enum
51 {
56 
57 /* Possible values for shared_memory_type */
58 typedef enum
59 {
64 
65 #ifndef WIN32
66 extern PGDLLIMPORT unsigned long UsedShmemSegID;
67 #else
68 extern PGDLLIMPORT HANDLE UsedShmemSegID;
70 #endif
71 extern PGDLLIMPORT void *UsedShmemSegAddr;
72 
73 #if !defined(WIN32) && !defined(EXEC_BACKEND)
74 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_MMAP
75 #elif !defined(WIN32)
76 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_SYSV
77 #else
78 #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_WINDOWS
79 #endif
80 
81 #ifdef EXEC_BACKEND
82 extern void PGSharedMemoryReAttach(void);
83 extern void PGSharedMemoryNoReAttach(void);
84 #endif
85 
87  PGShmemHeader **shim);
88 extern bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2);
89 extern void PGSharedMemoryDetach(void);
90 extern void GetHugePageSize(Size *hugepagesize, int *mmap_flags);
91 
92 #endif /* PG_SHMEM_H */
#define PGDLLIMPORT
Definition: c.h:1252
signed int int32
Definition: c.h:430
size_t Size
Definition: c.h:541
uint32 dsm_handle
Definition: dsm_impl.h:55
HugePagesType
Definition: pg_shmem.h:51
@ HUGE_PAGES_ON
Definition: pg_shmem.h:53
@ HUGE_PAGES_OFF
Definition: pg_shmem.h:52
@ HUGE_PAGES_TRY
Definition: pg_shmem.h:54
PGShmemHeader * PGSharedMemoryCreate(Size size, PGShmemHeader **shim)
Definition: sysv_shmem.c:691
void PGSharedMemoryDetach(void)
Definition: sysv_shmem.c:955
PGShmemType
Definition: pg_shmem.h:59
@ SHMEM_TYPE_MMAP
Definition: pg_shmem.h:62
@ SHMEM_TYPE_SYSV
Definition: pg_shmem.h:61
@ SHMEM_TYPE_WINDOWS
Definition: pg_shmem.h:60
PGDLLIMPORT void * UsedShmemSegAddr
Definition: sysv_shmem.c:94
struct PGShmemHeader PGShmemHeader
PGDLLIMPORT int huge_page_size
Definition: guc_tables.c:530
PGDLLIMPORT unsigned long UsedShmemSegID
Definition: sysv_shmem.c:93
void GetHugePageSize(Size *hugepagesize, int *mmap_flags)
Definition: sysv_shmem.c:478
PGDLLIMPORT int huge_pages
Definition: guc_tables.c:529
bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2)
Definition: sysv_shmem.c:316
PGDLLIMPORT int shared_memory_type
Definition: ipci.c:54
dsm_handle dsm_control
Definition: pg_shmem.h:36
ino_t inode
Definition: pg_shmem.h:40
Size freeoffset
Definition: pg_shmem.h:35
pid_t creatorPID
Definition: pg_shmem.h:33
void * index
Definition: pg_shmem.h:37
dev_t device
Definition: pg_shmem.h:39
int32 magic
Definition: pg_shmem.h:31
Size totalsize
Definition: pg_shmem.h:34
void PGSharedMemoryReAttach(void)
Definition: win32_shmem.c:419
void * ShmemProtectiveRegion
Definition: win32_shmem.c:42
void PGSharedMemoryNoReAttach(void)
Definition: win32_shmem.c:467