본문 바로가기

UNIX_LINUX_C_C++

[공유메모리] 데이터 넣는 방법

출처 : Shared Memory로 DB 만들때의 문제점.

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. 더 좋은 아이디어가 있다면 조언 좀 >.,<