시스템 프로그래밍

시스템 프로그래밍 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