shmem.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * shmem.h
  4.  *   shared memory management structures
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: shmem.h,v 1.18.2.1 1999/07/30 17:07:17 scrappy Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef SHMEM_H
  14. #define SHMEM_H
  15. #include "storage/spin.h"
  16. #include "utils/hsearch.h"
  17. /* The shared memory region can start at a different address
  18.  * in every process.  Shared memory "pointers" are actually
  19.  * offsets relative to the start of the shared memory region(s).
  20.  */
  21. typedef unsigned long SHMEM_OFFSET;
  22. #define INVALID_OFFSET (-1)
  23. #define BAD_LOCATION (-1)
  24. /* start of the lowest shared memory region.  For now, assume that
  25.  * there is only one shared memory region
  26.  */
  27. extern SHMEM_OFFSET ShmemBase;
  28. /* coerce an offset into a pointer in this process's address space */
  29. #define MAKE_PTR(xx_offs)
  30.   (ShmemBase+((unsigned long)(xx_offs)))
  31. /* coerce a pointer into a shmem offset */
  32. #define MAKE_OFFSET(xx_ptr)
  33.   (SHMEM_OFFSET) (((unsigned long)(xx_ptr))-ShmemBase)
  34. #define SHM_PTR_VALID(xx_ptr)
  35.   (((unsigned long)xx_ptr) > ShmemBase)
  36. /* cannot have an offset to ShmemFreeStart (offset 0) */
  37. #define SHM_OFFSET_VALID(xx_offs)
  38.   ((xx_offs != 0) && (xx_offs != INVALID_OFFSET))
  39. extern SPINLOCK ShmemLock;
  40. extern SPINLOCK ShmemIndexLock;
  41. /* shmemqueue.c */
  42. typedef struct SHM_QUEUE
  43. {
  44. SHMEM_OFFSET prev;
  45. SHMEM_OFFSET next;
  46. } SHM_QUEUE;
  47. /* shmem.c */
  48. extern void ShmemIndexReset(void);
  49. extern void ShmemCreate(unsigned int key, unsigned int size);
  50. extern int InitShmem(unsigned int key, unsigned int size);
  51. extern long *ShmemAlloc(unsigned long size);
  52. extern int ShmemIsValid(unsigned long addr);
  53. extern HTAB *ShmemInitHash(char *name, long init_size, long max_size,
  54.   HASHCTL *infoP, int hash_flags);
  55. extern bool ShmemPIDLookup(int pid, SHMEM_OFFSET *locationPtr);
  56. extern SHMEM_OFFSET ShmemPIDDestroy(int pid);
  57. extern long *ShmemInitStruct(char *name, unsigned long size,
  58. bool *foundPtr);
  59. extern bool TransactionIdIsInProgress(TransactionId xid);
  60. extern void GetXmaxRecent(TransactionId *XmaxRecent);
  61. typedef int TableID;
  62. /* size constants for the shmem index table */
  63.  /* max size of data structure string name */
  64. #define SHMEM_INDEX_KEYSIZE (50)
  65.  /* data in shmem index table hash bucket */
  66. #define SHMEM_INDEX_DATASIZE (sizeof(ShmemIndexEnt) - SHMEM_INDEX_KEYSIZE)
  67.  /* maximum size of the shmem index table */
  68. #define SHMEM_INDEX_SIZE  (100)
  69. /* this is a hash bucket in the shmem index table */
  70. typedef struct
  71. {
  72. char key[SHMEM_INDEX_KEYSIZE]; /* string name */
  73. unsigned long location; /* location in shared mem */
  74. unsigned long size; /* numbytes allocated for the structure */
  75. } ShmemIndexEnt;
  76. /*
  77.  * prototypes for functions in shmqueue.c
  78.  */
  79. extern void SHMQueueInit(SHM_QUEUE *queue);
  80. extern void SHMQueueElemInit(SHM_QUEUE *queue);
  81. extern void SHMQueueDelete(SHM_QUEUE *queue);
  82. extern void SHMQueueInsertTL(SHM_QUEUE *queue, SHM_QUEUE *elem);
  83. extern void SHMQueueFirst(SHM_QUEUE *queue, Pointer *nextPtrPtr,
  84.   SHM_QUEUE *nextQueue);
  85. extern bool SHMQueueEmpty(SHM_QUEUE *queue);
  86. #endif  /* SHMEM_H */