3.3 공유 메모리
3.3.1 개요
프로세스는 독립적인 주소공간(가상메모리)를 사용하기 때문에 변수를 공유할 수 없다.
공유 메모리를 통해 프로세스간 공유할수 있는 메모리를 구현하자!
각 프로세스는 자신의 주소 공간에 공유메모리를 위한 세그먼트(shmbuf)를 만들고, 이 구조체를 통해 공유메모리에 접근한다.
# ipcs -l
현재 공유 메모리의 정보를 확인하자
3.3.2 공유메모리 함수
int shmget(key_t key, size_t size, int shmflg);
기능: 공유메모리 생성
리턴: 성공 시 공유메모리 ID, 실패 시 errno 설정 후 -1 리턴
key: 공유메모리 접근 키
size: 생성할 공유메모리 크기
shmflg: IPC_CREAT (공유메모리가 없으면 새로 생성), IPC_CREAT | IPC_EXCL (공유메모리가 있으면 에러)
void* shmat(int shmid, const void* shmaddr, int shmflg);
기능: 프로세스의 주소 공간에 공유메모리 부착
리턴: 성공 시 부착된 공유메모리 주소, 실패 시 errno 설정 후 -1 리턴
shmid: 공유메모리 ID
shmaddr: NULL이면 비어있는 주소에 부착, 아니라면 이 주소에 부착
shmflg: SHM_RDONLY(읽기전용)
int shmdt(const void* shmaddr);
기능: 프로세스의 주소 공간에서 공유메모리 분리 (반납)
리턴: 성공 시 0, 실패 시 errno 설정 후 -1 리턴
shmaddr: 분리할 공유메모리 주소
shmat() 으로 공유메모리를 생성하고, shmdt()로 공유메모리를 반납해주자.
int shmctl(int shmid, int cmd, struct shmid_ds* buf);
기능: 공유메모리 제어
리턴: 성공 시 cmd 리턴값, 실패 시 errno 설정 후 -1 리턴
shmid: 공유메모리 ID
cmd: IPC_STAT(공유메모리 정보를 buf에 저장), IPC_RMID(공유메모리 제거)
buf: struct shmid_ds
'한국으로 > 임베디드 리눅스' 카테고리의 다른 글
5.1 프로세스 관리 (0) | 2018.06.28 |
---|---|
4.2 스레드 동기화 (0) | 2018.06.28 |
4.1 스레드란? (0) | 2018.06.27 |
3.4 메시지 큐 (0) | 2018.06.27 |
3.2 세마포어 (0) | 2018.06.27 |
3.1 파이프 (0) | 2018.06.27 |
2.2 시그널 (0) | 2018.06.27 |
2.1 프로세스 (0) | 2018.06.27 |