프로세스 간 통신(2)

hgh1472·2023년 12월 23일
0

shared memory

둘 이상의 프로세스가 물리적 메모리의 일부를 공유한다.

shmget 시스템 호출

사용법

#include <sys/types.h>
#include <sys/ipc.h>
#Include <sys/shm.h>
int shmget(key_t key, size_t size, int permflag);
  • key : 공유 메모리 영역의 identifier
  • size : 공유 메모리 영역의 최소 크기
  • permflag : access permission
  • return 값 : 공유 메모리 영역의 id

shmat 시스템 호출

shmget 호출에 의해 할당된 메모리 영역을 자신의 논리적 자료 공간에 부착

사용법

#include <sys/shm.h>
int *shmat(int shmid, const void *addr, int shmflag);
  • addr
    • process address space내의 부착 위치
    • NULL인 경우 시스템이 위치 결정
  • shmflag
    • SHM_RDONLY : 공유 메모리에 대해 읽기만 가능
    • 0: 공유 메모리에 대해 읽기/쓰기 가능
  • return 값 : process 내의 유효주소

shmctl 시스템 호출

사용법

#include <sys/shm.h>
int shmctl(int shmid, int command, struct shmid_ds *shm_stat);
  • command
    • IPC_STAT
    • IPC_RMID

record locking

특정 record에 대한 다른 프로세스의 읽기/쓰기 제한

  • read lock : 읽기는 허용, 쓰기는 제한
  • write lock : 읽기, 쓰기 모두 제한

사용법

#include <fcntl.h>
int fcntl(int filedes, int cmd, struct flock *ldata);
  • filedes : lock을 설정하려는 file의 descriptor
    • read-lock은 O_RDONLY/O_RDWR로 open된 file에 한해서 적용 가능
    • write-lock은 O_WRONLY/O_RDWR로 open된 file에 한해서 적용 가능
  • cmd
    • F_GETLK : lock 정보 얻기
    • F_SETLK : non-blocking locking or unlocking
    • F_SETLKW : blocking locking
  • struct flock *ldata
    • short l_type : lock의 type(F_RDLCK, F_WRLCK, F_UNLCK)
    • short l_whence : SEEK_SET, SEEK_CUR, SEEK_END
    • off_t l_start : l_whence로부터의 변위로 표현된 locked record의 시작 위치
    • off_t l_len : locked record의 길이

교착상태

두 프로세스가 작업하다 동기화 과정에서 코드가 꼬인 상태. = 두 프로세스 둘 다 block되는 상황

0개의 댓글