시스템 프로그래밍
시스템 프로그래밍 12장 - IPC methods (Shared memory)
만능성구
2020. 6. 11. 06:22
728x90
Shared Memory
- 일반 Memory는 process는 자신만의 가상 주소공간을 가지고 다른 process가 접근할 수 없도록 강하게 보호된다.(process protection), 공유가 불가능하다
- shared memory는 공유 영역을 만들고 각 process의 가상 공간에 mapping해서 process간의 자원을 공유한다.
cf. Multiple Threads in a process
threads는 memory영역을 공유하고 있다. 이것을 확장해서 process간의 공유를 하는 것이다.
사용하는 방법
- multiple process들 간의 공유되는 메모리 영역을 OS kernel내에 지정한다
- 각각의 prcess memory address space에 mapping해서 사용한다. attache
- 다른 방법보다 copy수가 적기 때문에 IPC 방법 중에 가장 빠른 방식이다.
- 자신의 메모리공간 처럼 읽고 쓸 수 있다.
- 동기화를 위해서 semaphore를 사용한다.
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int shmget(key_t key, int size, int flag);
shared memory space를 만들거나 만들어진 memory space에 접근, 접근 통로를 가져올 수 있다. |
key : shared memeory id size : shared memory size flag : option(file open()/ create()와 같다, or 연산사용) |
return id / -1 |
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
void shmdt (void *addr);
다 사용한 memory영역을 제거하기 위해서 |
addr : 없앨 메모리 시작 주소 |
return 0 / -1 |
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shared 메모리의 정보에 접근하거나 설정한다. |
shmid : shared memory id cmd : 명령어 IPC_SET / IPC_STAT / IPC_RMID (message queue와 동일) buf : shmid_ds 구조체 |
return 0 / -1 |
shmid_ds 실제로 이부분 건드릴 일이 없으므로 살짝쿵 패스
struct shmid_ds {
struct ipc_perm shm_perm;
int shm_segsz;
struct anon_map *shm_amp;
ushort_t shm_lkcnt;
pid_t shm_lpid;
pid_t shm_cpid;
shmatt_t shm_nattch;
ulong_t shm_cnattch;
time_t shm_atime;
long shm_pid1;
time_t shm_dtime;
long shm_pid2;
time_t shm_ctime;
long shm_pid3;
long shm_pid4[4];
};
shm-pro.c
shm-con.c
728x90