db로 사용되는 튜플들의 관리를 배열처럼 (시작점)의 offset 으로 관리해줌으로써 가능하다.
데이터에 접근하는 프로세스마다  (시작점)에 대해서 서로 다른 포인터값을 갖게 되기때문이다.

공유메모리에 데이터를 넣는 방식.

(시작점)
|<--- 테이블 내용 --->|<---  n개의 튜플내용(트리 node정보 등) ---->|
|<----- n개의 키 ----->|<------------ n개의 데이터 -------------->|


"테이블 내용"과 "n개의 튜플내용"은 "정적인 크기"를 갖는다.
typedef struct _tbl-
{
  int root ;
  int used ;
  int free ;
  int head ;
  int tail ;
  ...
} tbl_t ;

typedef struct _tuple_
{
  int left ;
  int right ;
  int prev ;
  int next ;
  ...
}

키와 데이터로 사용될 내용이 정의되면 그 구조체 또한 정적으로 정의될 수 있다.
typedef struct _key_
{
  unsigned int ip;
  unsigned int pcf ;
} key_t ;

typedef struct _data_
{
  int field1 ;
  long long body ;
}

초기화 함수에서
"테이블내용 + (n x 튜플내용) + (n x 키내용) + (n x 데이터내용)" 만큼의 메모리를 할당한다.
그리고  key와 data가 있는 offset 만 알고 있다면 문제가 없을 것 같다.

ps. 더 좋은 아이디어가 있다면 조언 좀 >.,<

Posted by 백구씨쥔장
,